
编译原理
君浪
君子不器 浪子不羁
展开
-
编译原理学习笔记(三)词法分析
在上一次对第二章的学习中(http://blog.youkuaiyun.com/u011602557/article/details/68943237),利用制导翻译的内容做了一个简单的翻译程序。其结构比较混乱,语法分析和词法分析基本混在了一起。在第三章中着重讲了词法分析的内容,其中说到了将分析部分分为语法分析和词法分析的技术原因(龙书第二版69页3.1.1),同时也有利于理解编译过程。因此这一次的内容主要围绕原创 2017-04-08 20:17:24 · 1654 阅读 · 0 评论 -
编译原理学习笔记(一)制导翻译器
《编译原理》在第二章中给出了一个翻译表达式的例子(从中缀表达式到后缀表达式)。总结了如下内容: 1. 写出描述语法规则的产生式(文法包含产生式集合与符号集合) 2. 根据文法建立对应语句的语法分析树 3. 消除语言的二义性 4. 运算符的结合性以及优先级 5. 通过向文法的产生式附加属性和翻译方案得到翻译结果原创 2017-03-29 21:06:43 · 1898 阅读 · 0 评论 -
编译原理学习笔记(四)预测分析器(1)
词法分析是为语法分析做准备的,词法分析器提取词法单元后返回给语法分析器用以进行语法分析。龙书在第四章中详细阐述了语法分析的部分。语法分析有自顶向下和自底向上两类方法,自顶向下是由产生式不断推导,直到匹配了整个输入串的过程,自底向上是通过字符串归约直到得到开始符的过程。今天主要学习了自顶向下的预测分析法。预测分析法是递归下降分析法的一种特例,因此要先说到递归下降分析法。 递归下降分析由一组过程组成,原创 2017-04-09 22:27:50 · 4119 阅读 · 0 评论 -
编译原理学习笔记(二)翻译程序的实现
上一节所学的主要是语法到语义的内容,通过手动构造语法树来理解编译过程。 在3.5节,书中给出了后缀表达式翻译程序的java实现。根据前面的内容,今天对NC代码编译给出简易的实现。在实现前,需要几个准备内容用以简化代码: 1. 正则表达式 正则表达式能够对一个字符串进行模式匹配,可以对符合模式的字符串进行检索、替换。 2. 宏 c++中使用宏可以对代码进行批量预处理,对于某些重复的代码可以用原创 2017-04-01 12:53:59 · 3222 阅读 · 0 评论 -
编译原理学习笔记(四)预测分析器(2)
上次说到了驱动表,这里给出利用驱动表进行预测分析的算法实现(原书伪码见p144)syn_unit end(0);//结束符syn_unit start(mode, mesh_table[mode]->src.lex, 0, syn_unit::NONTERMINATOR);//mode为开始符号的参数stack<syn_unit> stk;stk.push(end);stk.push(sta原创 2017-04-11 17:26:04 · 843 阅读 · 0 评论 -
编译原理学习笔记(五)语法制导定义
在初学编译原理时的第二章中就给了制导翻译程序的例子,在第五章中又再次提到,不过更加详细。 上次做的预测分析器还有不完善的地方——目前只能进行语法分析,不能产生语义动作。可以使用语法制导定义的方法来完成。语法制导定义是上下文无关文法和属性以及规则的结合,属性与文法符号相关联,规则和产生式相关联。非终结符具有两种属性:综合属性和继承属性。分析树上的非终结符的综合属性是由产生式所关联的语义规则来定义的,原创 2017-04-12 21:06:42 · 10157 阅读 · 0 评论 -
NC编译器结题以及软件重用性的思索
经过3月29日到今天一共17天的紧张学习赶工,NC编译器的编写环节暂时告一段落。从开始的简单制导翻译到后来的词法语法分析,虽然其中还有很多细节没有学到位,但在与无数BUG的斗争中大体上已经领略到了一个编译前端的结构。这里做一下总结: 输入一段代码、一些规则,按规则输出代码中的信息,这就是一个编译器的工作。看似简单,但如果规则较复杂,不进行理论有序的描述就很难得到正确的结果。因此,把编译过程划分为几原创 2017-04-14 19:29:45 · 419 阅读 · 0 评论