首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

c语言手搓一个600行的类c语言解释: 给编程初学者的解释教程(3)- 词法分析

c语言手搓一个600行的类c语言解释: 给编程初学者的解释教程(3)- 词法分析 c语言手搓一个600行的类c语言解释: 给编程初学者的解释教程(1)- 目标和前言 c语言手搓一个600...行的类c语言解释: 给编程初学者的解释教程(2)- 简介和设计 c语言手搓一个600行的类c语言解释: 给编程初学者的解释教程(3)- 词法分析 c语言手搓一个600行的类c语言解释:...给编程初学者的解释教程(4)- 语法分析1:EBNF和递归下降文法 c语言手搓一个600行的类c语言解释: 给编程初学者的解释教程(5)- 语法分析2: tryC的语法分析实现 c语言手搓一个...600行的类c语言解释: 给编程初学者的解释教程(6)- 语义分析:符号表和变量、函数 项目github地址及源码: https://github.com/yunwei37/tryC 这一篇讲讲在...但对于我们这样一个简单的解释来说,手工构造词法分析,并且完全不涉及到正则表达式的知识,理解起来也并不是很困难啦。

60330

c语言手搓一个500+行的类c语言解释: 给编程初学者的解释教程(3)- 词法分析

词法分析能够对源码字符串做预处理,以减少语法分析的复杂程度。...由于词法分析对于各个语言基本都是大同小异,在其他地方也有很多用途,并且手工构造的话实际上是一个很枯燥又容易出错的活计,因此其实已经有了不少现成的实现,比如 lex/flex 。...但对于我们这样一个简单的解释来说,手工构造词法分析,并且完全不涉及到正则表达式的知识,理解起来也并不是很困难啦。...循环的原因有以下几个: 处理错误: 如果碰到了一个我们不认识的字符,可以指出错误发生的位置,然后用while循环跳过当前错误,获取下一个token并继续编译; 跳过空白字符; 在我们实现的tryC语言中...,空格是用来作为分隔的,并不作为语法的一部分。

1.3K00
您找到你想要的搜索结果了吗?
是的
没有找到

c语言手搓一个600行的类c语言解释: 给编程初学者的解释教程(1)- 目标和前言

c语言手搓一个600行的类c语言解释: 给编程初学者的解释教程(1)- 目标和前言 c语言手搓一个600行的类c语言解释: 给编程初学者的解释教程(1)- 目标和前言 c语言手搓一个600...行的类c语言解释: 给编程初学者的解释教程(2)- 简介和设计 c语言手搓一个600行的类c语言解释: 给编程初学者的解释教程(3)- 词法分析 c语言手搓一个600行的类c语言解释:...给编程初学者的解释教程(4)- 语法分析1:EBNF和递归下降文法 c语言手搓一个600行的类c语言解释: 给编程初学者的解释教程(5)- 语法分析2: tryC的语法分析实现 c语言手搓一个...这里的部分是过了一年之后大二学编译原理的时候,把当时的代码相对比较规范完善的方式重写了一遍,也因此希望把它整理成一个简单的教程,让c语言的初学者也可以愉快地搓一个解释玩;或者让学过编译原理的同学,能够把理论和实践联系起来...,尤其在没有生成中间代码的情况下; 参考资料 《编译原理及其实践》 c4 四个函数和很少的代码就完成了功能相当完善的 C 语言编译, 并且能够自举;我自己写作的时候也借鉴了c4的许多实现思想

42220

c语言手搓一个600行的类c语言解释: 给编程初学者的解释教程(2)- 简介和设计

c语言手搓一个600行的类c语言解释: 给编程初学者的解释教程(2)- 简介和设计 c语言手搓一个600行的类c语言解释: 给编程初学者的解释教程(1)- 目标和前言 c语言手搓一个600...行的类c语言解释: 给编程初学者的解释教程(2)- 简介和设计 c语言手搓一个600行的类c语言解释: 给编程初学者的解释教程(3)- 词法分析 c语言手搓一个600行的类c语言解释:...给编程初学者的解释教程(4)- 语法分析1:EBNF和递归下降文法 c语言手搓一个600行的类c语言解释: 给编程初学者的解释教程(5)- 语法分析2: tryC的语法分析实现 c语言手搓一个...600行的类c语言解释: 给编程初学者的解释教程(6)- 语义分析:符号表和变量、函数 项目github地址及源码: https://github.com/yunwei37/tryC 需要了解的一些基本概念...而解释是一种计算机程序,它直接执行由编程语言或脚本语言编写的代码,它并不会把源代码预编译成机器码,而是一行一行地分析源代码并且直接执行,相对编译而言可能效率较为低下,但实现也相对简单,并且容易在不同的机器上进行移植

49710

c语言手搓一个500+行的类c语言解释: 给编程初学者的解释教程(2)- 简介和设计

项目github地址及源码: https://github.com/yunwei37/tryC 需要了解的一些基本概念 编译解释的区别不同 通常我们说的 “编译” 是一种计算机程序,负责把一种编程语言编写的源码转换成另外一种计算机代码...而解释是一种计算机程序,它直接执行由编程语言或脚本语言编写的代码,它并不会把源代码预编译成机器码,而是一行一行地分析源代码并且直接执行,相对编译而言可能效率较为低下,但实现也相对简单,并且容易在不同的机器上进行移植...通常可以抽象语法树表示语法分析的结果,比如赋值语句: ```c num = 123.4 * 3; ``` 可以这样一个抽象语法树来表示: ```mermaid graph TD...解释与编译仅在代码生成阶段有区别,而在前三个阶段如词法分析、语法分析、语义分析基本是一样的。...tryC编译的设计: 从上面可以看出,我们的tryC解释需要这三个模块: 词法分析 语法分析 语义分析和解释执行 需要这两个数据结构(用来在阶段之间保存或传递值): token,用来在词法分析和语法分析之间传递标记

1.6K00

c语言手搓一个500+行的类c语言解释: 给编程初学者的解释教程(1)- 目标和前言

项目github地址及源码: https://github.com/yunwei37/tryC 一个小目标 这一系列教程希望面向初学者,使用c语言手工实现一个简单的解释来玩,不需要您掌握除了c语言以外的其他前置知识...写一个能执行代码的解释不仅是一件很有(zhuang)趣(bi)的事情,大概也可以作为刚学习完c语言的一个练手的小项目啦 不同于大部分常见的其他只支持四则运算的所谓”手工解释“教程,我们希望在代码结构尽量清晰的...这里的部分是过了一年之后大二学编译原理的时候,把当时的代码相对比较规范完善的方式重写了一遍,也因此希望把它整理成一个简单的教程,让c语言的初学者也可以愉快地搓一个解释玩;或者让学过编译原理的同学,能够把理论和实践联系起来...需要了解的前置知识 c语言的指针、函数指针、结构体等 递归的思想 心理准备 写一个600行的解释虽然不算什么大工程,但相关的原理还是稍微有些复杂的,可能需要多花一些时间理解程序的运行过程; 代码可能难以调试...,尤其在没有生成中间代码的情况下; 参考资料 《编译原理及其实践》 c4 四个函数和很少的代码就完成了功能相当完善的 C 语言编译, 并且能够自举;我自己写作的时候也借鉴了c4的许多实现思想;

1.4K00

c语言手搓一个500+行的类c语言解释: 给编程初学者的解释教程(5)- 语法分析2

项目github地址及源码: https://github.com/yunwei37/tryC tryC的语法分析 完整的tryC文法: (这里我们单引号包裹那些在BCNF文法定义中出现但又作为终结符出现的字符...| // 数组定义 statement的代码实现 布尔表达式和算术表达式的代码之前已经讲过了,这里看看statement的实现,以及如何在语法分析的同时解释执行...: 这里使用的方法是,对于流程控制语句,在语法分析的时候就进行条件判断,如果if判断失败或者while不进入循环块,就跳过该语句块不进行语法分析、解释执行; 其中RETURNFLAG用来表示在函数中返回...statement()) return RETURNFLAG; } match('}'); } .... if语句 由于tryC解释是边进行语法分析...,边解释执行的,因此如果不需要解释执行执行某一个语句块,就调用函数 skipStatments() 跳过该语句块,不对其进行语法分析,不解释执行;(在if语句和while语句中使用): ...

77800

c语言手搓一个500+行的类c语言解释: 给编程初学者的解释教程(4)- 语法分析1

项目github地址及源码: https://github.com/yunwei37/tryC 这一章开始进入解释的核心部分: 语法分析; 我们来看看两个概念,EBNF和递归下降文法,以及如何用这两个方法来计算...BNF与上下文无关文法 Backus-Naur符号(就是众所周知的BNF或Backus-Naur Form)是描述语言的形式化的数学方法,由John Backus (也许是Peter Naur)开发,最早用于描述...Algol 60编程语言的语法。...BNF语法定义的语言是一个字符串集合,可以按照下述规则书写,这些规则叫做书写规范(产生式规则),例如一个四则运算表达式可以表示为: exp -> exp op exp | ( exp ) | number...通常我们在编译构建中使用的都是上下文无关文法。

1.7K00

c语言手搓一个600行的类c语言解释: 给编程初学者的解释教程(6)- 语义分析:符号表和变量、函数

c语言手搓一个600行的类c语言解释: 给编程初学者的解释教程(6)- 语义分析:符号表和变量、函数 c语言手搓一个600行的类c语言解释: 给编程初学者的解释教程(1)- 目标和前言...c语言手搓一个600行的类c语言解释: 给编程初学者的解释教程(2)- 简介和设计 c语言手搓一个600行的类c语言解释: 给编程初学者的解释教程(3)- 词法分析 c语言手搓一个600...行的类c语言解释: 给编程初学者的解释教程(4)- 语法分析1:EBNF和递归下降文法 c语言手搓一个600行的类c语言解释: 给编程初学者的解释教程(5)- 语法分析2: tryC的语法分析实现...c语言手搓一个600行的类c语言解释: 给编程初学者的解释教程(6)- 语义分析:符号表和变量、函数 项目github地址及源码: https://github.com/yunwei37/tryC...符号表 我们先来回顾一下符号表的定义: 符号表是一种用于语言翻译(例如编译解释)中的数据结构。

43220

实现JavaScript语言解释(一)

因此为了更好地理解JavaScript的语言特性,我就自己动手实现了一个叫做Simple的JavaScript语言解释,这个解释十分简单,它基于TypeScript实现了JavaScript语法的子集...解释 解释顾名思义就是会对我们的代码进行解释执行,它和编译不一样,它不会对源代码进行转换(最起码不会输出中间文件),而是边解释边执行源代码的逻辑。...Simple解释 由于Simple不会对编写的JavaScript代码进行中间代码转换,它只会解释并且执行代码的逻辑,所以它是一个不折不扣的JavaScript语言解释。...考虑到大多数编程语言都是英语进行编码的,我们不妨先来看一下人是如何理解一个英语句子的,看能不能受到一些启发。 人理解英语句子的过程 Put a pencil on the table。...综上所述,一个语言解释的软件架构大体是这样的: 上面其实也就是Simple的软件架构,接着让我们来看一下词法分析的具体实现。

1.2K30

c语言手搓一个600行的类c语言解释: 给编程初学者的解释教程(4)- 语法分析1:EBNF和递归下降文法

c语言手搓一个600行的类c语言解释: 给编程初学者的解释教程(4)- 语法分析1:EBNF和递归下降文法 c语言手搓一个600行的类c语言解释: 给编程初学者的解释教程(1)- 目标和前言...c语言手搓一个600行的类c语言解释: 给编程初学者的解释教程(2)- 简介和设计 c语言手搓一个600行的类c语言解释: 给编程初学者的解释教程(3)- 词法分析 c语言手搓一个...600行的类c语言解释: 给编程初学者的解释教程(4)- 语法分析1:EBNF和递归下降文法 c语言手搓一个600行的类c语言解释: 给编程初学者的解释教程(5)- 语法分析2: tryC的语法分析实现...c语言手搓一个600行的类c语言解释: 给编程初学者的解释教程(6)- 语义分析:符号表和变量、函数 项目github地址及源码: https://github.com/yunwei37/tryC...这一章开始进入解释的核心部分: 语法分析; 我们来看看两个概念,EBNF和递归下降文法,以及如何用这两个方法来计算tryC中的表达式。

44720

实现JavaScript语言解释(二)

end": { "line": 1, "column": 21 } } } ] 在语法解析(Syntax Analysis)阶段,Simple解释会根据定义的语法规则来分析单词之间的组合关系...在语法解析阶段,如果Simple解释发现输入的Token字符串不能通过既定的语法规则来解析,就会抛出一个语法错误(Syntax Error),例如赋值语句没有右表达式的时候就会抛出Syntax Error...那么对于Simple解释来说,它的语法规则又是什么呢?...细心的你可能发现在上面的例子中所有语句都是以分号;结尾的,这是因为为了简化语法解析的流程,Simple解释强制要求每个表达式都要以分号结尾,这样我们才可以将重点放在掌握语言的实现原理而不是拘泥于JavaScript...对于程序员来说最清晰的解释应该是直接看代码了,所以我们可以来看一下Simple语言语法解析的代码部分。

54010

Python语言编译解释

一、解释语言Python Python语言是一种解释型、面向对象、动态数据类型的高级程序设计语言。 ?...编译型语言 先整体编译,再执行 运行速度快,任意改动需重新编译 可脱离编译环境运行 解释语言解释,边执行 运行速度慢 部分改动无需整体重新编译 不可脱离解释环境运行 编译型与解释语言列表...二、Python解释种类 CPython 官方版本的解释。这个解释C语言开发的,所以叫CPython。CPython是使用最广的Python解释。...我们通常说的、下载的、讨论的、使用的都是这个解释。 Ipython 基于CPython之上的一个交互式解释,在交互方式上有所增强,执行Python代码的功能和CPython是完全一样的。...CPython>>>作为提示符,而IPythonIn [序号]:作为提示符。 PyPy 一个追求执行速度的Python解释

1.5K20

c语言手搓一个600行的类c语言解释: 给编程初学者的解释教程(5)- 语法分析2: tryC的语法分析实现

c语言手搓一个600行的类c语言解释: 给编程初学者的解释教程(5)- 语法分析2: tryC的语法分析实现 c语言手搓一个600行的类c语言解释: 给编程初学者的解释教程(1)- 目标和前言...c语言手搓一个600行的类c语言解释: 给编程初学者的解释教程(2)- 简介和设计 c语言手搓一个600行的类c语言解释: 给编程初学者的解释教程(3)- 词法分析 c语言手搓一个...600行的类c语言解释: 给编程初学者的解释教程(4)- 语法分析1:EBNF和递归下降文法 c语言手搓一个600行的类c语言解释: 给编程初学者的解释教程(5)- 语法分析2: tryC的语法分析实现...c语言手搓一个600行的类c语言解释: 给编程初学者的解释教程(6)- 语义分析:符号表和变量、函数 项目github地址及源码: https://github.com/yunwei37/tryC...statement()) return RETURNFLAG; } match('}'); } .... if语句 由于tryC解释是边进行语法分析

32030
领券