- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
川大编译原理复习要点
编译的各个阶段
扫描程序(scanner)
在这个阶段编译器实际阅读源程序(通常以字符流的形式表示)。扫描程序执行词法分析(Lexical analysis):它将字符序列收集到称作记号(t o k e n)的有意义单元中,记号同自然语言,如英语中的字词相似。
语法分析程序(parser)
语法分析程序从扫描程序中获取记号形式的源代码,并完成定义程序结构的语法分析(syntax analysis),这与自然语言中句子的语法分析类似。语法分析定义了程序的结构元素及其关系。通常将语法分析的结果表示为分析树( parse tree)或语法树(syntax tree)。
语义分析程序(semantic analyzer)
分析程序的静态语义,包括包括声明和类型检查。
源代码优化程序(source code optimizer),代码生成器(code generator),目标代码优化程序(target code optimizer)。
编译器的前端(front end),后端(back end),遍(passes)
扫描程序、分析程序和语义分析程序是前端,代码生成器是后端。
编译器发现,在生成代码之前多次处理整个源程序很方便。这些重复就是遍(p a s s)
编译器,汇编器和解释器之间的区别
解释程序是如同编译器的一种语言翻译程序。它与编译器的不同之处在于:它立即执行源程序而不是生成在翻译完成之后才执行的目标代码。
汇编程序是用于特定计算机上的汇编语言的翻译程序。有时,编译器会生成汇编语言以作为其目标语言,然后再由一个汇编程序将它翻译成目标代码。
扫描,分析(语法,词法)的任务
扫描的任务是将源程序读作字符文件并将其分为若干个记号
扫描程序的任务是从源代码中读取字符并形成由编译器的以后部分(通常是分析程序)处理的逻辑单元。
由扫描程序生成的逻辑单元称作记号( t o k e n)
分析的任务是确定程序的语法,或称作结构
分析程序的任务是从由扫描程序产生的记号中确定程序的语法结构,以及或隐式或显式地构造出表示该结构的分析树或语法树
上下文无关文法,最左推导,BNF,EBNF,乔姆斯基文法层次
上下文无关文法说明程序设计语言的语法结构,利用了与正则表达式中极为类似的命名惯例和运算。二者的主要区别在于上下文无关文法的规则是递归的(recursive)
最左推导( leftmost derivation)是指它的每一步中最左的非终结符都要被替换的推导
最右推导( rightmost derivation)则是指它的每一步中最右的非终结符都要被替换的推导。最左推导和与其相关的分析树的内部节点的前序编号相对应;而最右推导则和后序编号相对应
最右推导的一个例子:
文法规则:exp → exp op exp | (e x p) | n u m b e r
op → + | - | *
相关题目:3.3
EBNF中注意重复和可选的表示方法,语法图
句子,句型,文法所定义的语言,分析树,抽象语法树
自顶向下,自底向上语法分析
自顶向下(t o p - d o w n)的分析算法通过在最左推导中描述出各个步骤来分析记号串输入。之所以称这样的算法为自顶向下是由于分析树隐含的编号是一个前序编号,而且其顺序是由根到叶。分为两类:回溯分析程序( backtracking parser)和预测分析程序( predictive parser)
自底向上的分析程序有两种可能的动作(除“接受”之外):
1) 将终结符从输入的开头移进到栈的顶部。
2) 假设有B N F选择A→a,将栈顶部的串a归约为非终结符A。
为什么要解决公因子,左递归
当有公因子存在时,不能立即区分出文法规则右边的选择
当有左递归时,将导致一个无限循环。
写正则表达式,构造NFA,DFA,最小化(按照算法做)
构造NFA(使用Thompson结构):
1) 基本正则表达式 基本正则表达式格式a或ε,其中a表示字母表中单个字符的匹配,
ε表示空串的匹配。与正则表达式a等同的N FA(即在其语言中准确接受)的是:
与ε等同的N FA是:
2) 并置 我们希望构造一个与正则表达式r s等同的N FA,其中r 和s 都是正则表达式。可将与rs 对应的N FA构造如下:
3) 在各选项中选择 我们希望在与前面相同的假设下构造一个与r | s 相对应的N FA。如下进行:
4) 重复 我们需要构造与r *相对应的机器,现假设已有一台与r 相对应的机器。那么就如下进行:
构造NFA的一个例子:
例:根据Thompson 结构将正则表达式a b | a 翻译为N FA。
文档评论(0)