- 博客(9)
- 资源 (2)
- 收藏
- 关注
原创 词法分析
#include #include const int INT=0;const int BOOL = 1;const int VOID = 2;const int TRUE = 3;const int FALSE = 4;const int IF = 5;const int ELSE = 6;const int FOR = 7;const int WHILE = 8;con
2017-01-16 19:07:22 427
原创 词法分析与正则表达式(三)
对编译原理有基本了解的人都知道,正则表达式与有限状态自动机存在等价的关系。换句话说,它们能够识别的语言集合是一样的。但是在C语言的词法分析中,我们不需要运用有限状态自动机的知识,因此相关的介绍都略去。本文介绍如何实现C语言的语法分析。需要指出的是,我们不打算实现C语言的所有功能。因为这既耗时,也完全没有必要。通过实现一些简单的功能,就足以理解编译原理的全貌了。我们词法分析程序,识别的关
2017-01-16 19:04:24 1003
原创 词法分析与正则文法(二)
集合的运算设L和D都是某些字符串的集合,定义L∪DL\cup D为两个集合的并。 LDLD为两个集合的连接,即LD=αβ:α∈L,β∈DLD={\alpha\beta: \alpha \in L, \beta\in D}。 LkL^k为两集合L的k次自连接。例如L3=LLL=(LL)LL^3=LLL=(LL)L。特别地,记L0={ϵ}L^0=\{\epsilon\},其中ϵ\epsilo
2017-01-11 23:44:32 828
原创 词法分析与正则表达式 (一)
严格来说,词法分析是语法分析的一部分。可是将词法分析从语法分析中抽离出来,有如下好处。1. 简化语法分析器的设计。如果把空白字符和去除注释这些功能都交给语法分析器来处理,那语法分析器的结构会变得非常简单。2. 提高编译器效率。编译器耗时最大的部分消耗在词法分析阶段。因为词法分析涉及到文件读操作。而将词法分析器抽离出来,有利于设计更有效的专门的处理器。3. 增强编译器的移植性。与
2017-01-10 20:24:20 1827
原创 左递归
空串产生式最常出现的情形——左递归的消除。左递归是产生式的一种特殊形式。它的形式如下。A→AαA\rightarrow A \alpha其中A是非终结符,而α\alpha是由终结符和非终结符组成的字符串。注意,α\alpha不能是空串,否则产生式变为A→AA\rightarrow A没有任何意义。左递归会对文法分析造成困扰。因为,根据产生式,我们可以不断进行如下推导。A→→→→AαAααAααα..
2017-01-08 17:43:12 10964
原创 空串产生式
在上下文无关文法的定义中,要求产生式的左部是一个非终结符,而产生式的右部是非终结符和终结符串。但是有一类产生式非常特殊。它们形如V→ϵV\rightarrow\epsilon这里V是非终结符,而ϵ\epsilon是一个特殊的字符,表示空串。在处理空串时需要特别注意。因为一个空串可以看做是两个空串的链接。这样一生二,二生三,无穷无尽,不知道何处是个头。因此在语法分析时,空串产生式不是随处可用。那么在什
2017-01-08 17:01:40 3006
原创 去除代码中的注释(三) 实现 下
上一篇博文介绍了对输入字符流的预处理,将字符流转化为Token流。经过这一步转化后,就可以使用上下文无关文法进行分析了。本文介绍对Token流的分析过程。我们使用递归下降法来实现语法的解析。递归下降法的特点是,为每一个非终结符定义一个函数,在这个函数里需要定义所有以该非终结符为左部的产生式。我们定义了下面的非终结符。表示整个源代码段,它是文法定义中的初始非终结符
2017-01-07 21:08:38 345
原创 去除代码中的注释——完整实现代码
#include class Token{public: int type, value; const static int END_OF_FILE = EOF; const static int BLCOK_COMMENT_START = 0; const static int LINE_COMMENT_START = 1; const s
2017-01-05 10:26:46 2359
原创 去除代码中的注释(二) 实现 上
上一篇博文介绍了去除代码注释的思想。我们发现,代码注释准确来说,不属于上下文无关文法的范畴。也就是同样的一个字符串,在不同的上下文环境下语义有所不同。为了对付这种情况,需要在字符解析时引入状态变量。我们实现的过程,主要分为两个部分。首先将输入字符串整理成一个Token。这里的Token在文法规则中对应的终结符。有了第一部分的工作,生成的Token流就可以通过上下文无关文
2017-01-04 21:54:46 636
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人