- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
西南交通大学希望学院 编译原理过程及分析
编译原理过程及分析
姓名: 王 伟
学号:
(2016.12)
编译原理过程及分析
编译器最基本的功能就是把高级语言(例如C/Fortran)编写的代码转化为机器指令(就是01串),从这个角度来说它本质上是个转换过程。经典的编译过程主要包括:? ??1、词法分析(Lexical Analysis)? ? 词法分析就是从输入代码中识别出各种记号(token),例如对于C语言我们就需要知道if,else等是语言的关键字,myvar是个标识,而123myvar不能被识别为一个标识。负责实现词法分析的模块有时也称为scanner。? ? 词法分析的关键当然是语言定义的规则了,比如哪些是关键词,哪些是合法的标识等,这些规则一般是通过正则表达式(RE,Regular Expression)来给出,运行时从输入缓冲区中读入一部分,然后看和哪个RE匹配就知道它到底是个什么token。? ? 下一个问题就是正则表达式的匹配过程如何实现,经典理论对此都会提到有限状态机(FSM, Finite State Machine)。关于FSM在可行性计算里一般都会有不少篇幅分析,在编译里谈到的FSM和RE主要是如何从输入的构成出对应的FSM。? ??? ? 构造的过程一般分为三个步骤:? ? (1)根据Thompson构造法从RE构造出对应的非确定性有限状态机(NFA, Non-deterministic Automata);? ? (2)经过不断计算epison-闭包(也成为可到达集)构造出确定性有限状态机(DFA, deterministic Automata);? ? (3)将DFA最小化,方法是增量式地合并不可区分(对于同一输入的下一个状态都一样)的两个状态。? ??2、语法分析? ? 语法分析的输入是一连串的token(词法分析的输出),根据语言的语法规则不断解析最后得到一棵抽象语法树(AST, Abstract Syntax Tree),负责语法分析模块通常也被叫做Parser。在词法分析中,我们经常使用正则表达式来表示语言所接受的token的规则,类似的,在语法分析中,我们使用文法(Grammar)来表示语言的语法规则,这也早期计算机语言设计中的研究热点(同样也是大学里学习编译时最容易让人头晕的东西)。? ??? ? 编译里常说的文法指的是一种上下文无关文法(Context-Free Grammar),简单地说文法里包含终结符(terminal,就是26个字符、数字等等)、非终结符(nonterminal,实际是一种抽象)和产生式(production)。上下文无关文法要求每个产生式的左边必须恰好是一个非终结符,而右边是0个或多个终结符与非终结符的组合,最后整个文法还必须有一个起始符(某个终结符)。文法里还有些很重要的基本概念,例如推导(derivation)、归约(reduction)、二义性(ambiguity)、最左推导等等。
? ? 文法中最重要的基本概念是FIRST集和FOLLOW集的构造。根据这两个集合就可以很容易构造出一个预测分析表,每个行的名字是一个非终结符,每个列的名字是一个终结符,如果每个表格内没有两个以上的项,那么说明是一个LL(1)文法(Left-to-right parse, Leftmost-derivation, 1-symbol lookhead),简单地说就是向右边看一个符号就能确定下一步动作。当原文法不是LL(1)文法时,可以尝试通过消除左递归(Eliminate Left Recursion)和提取左因子(Left Factoring)对原文法进行变形得到等价的LL(1)文法。
? ? 第二种文法就是LR(k)文法(Left-to-right parse, Rightmost derivation, k-token lookhead)。这种文法的解释过程一般通过栈辅助实现,中间主要有两种动作:shift(就是将当前输入入栈)和reduce(选择产生式并从栈中弹出符号执行归约操作)。LR(0)的构成过程就是从起始符所在的产生式开始构造item,然后对每个item针对每个可能的input构造它的出边(同样还是一个item),最终所有的item形成一个有限状态机。接下来构造有限状态机,对于每个状态,如果出边是一个终结符,在对应表格记入shift操作,如果是非终结符则记入goto操作。如果S-x.这种it
您可能关注的文档
最近下载
- 人教版数学试卷五年级下册期末测试题9.doc VIP
- 人教版道德与法治七年级上册知识点梳理(00002).docx VIP
- DBJ∕T 13-71-2021 回弹法检测混凝土抗压强度技术规程.docx VIP
- 新生儿低血糖临床规范管理专家共识.pptx VIP
- 三角函数 新高考数学知识点总结与题型精练(新高考地区专用).docx VIP
- 沪教版六年级上册数学练习题(最全).doc VIP
- 组织效能提升工作 坊 系统思考:如何破除组织防卫,提高组织效能.docx
- 《GB30000.27-2013化学品分类和标签规范第27部分:吸入危害》最新解读.pptx VIP
- 园林绿化养护台账.docx VIP
- 智慧医院智慧消防系统设计方案.docx VIP
文档评论(0)