- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* * 2)语法分析器的自动生成程序 YACC 语法规则说明 语法分析程序 (C程序) 输入: 语法规则(产生式) 语义动作(C程序段) 输出: yyparse( ) 函数 * * 例1-1 DOS 命令 date 的输出格式 例:9-3-1993、09-03-1993、9-03-93 语法 date → month - day - year 词法 month → DIGIT DIGIT | DIGIT day → DIGIT DIGIT | DIGIT year → DIGIT DIGIT | DIGII DIGIT DIGIT DIGIT * * 例1-1(续) 语义 year(年)、month(月)、day(日) 语义约束条件 0 month.value 13 0 day.value 32,31,30 0 year.value 10000 * * 1.6 本章小结 编译原理是一门非常好的课 程序设计语言及其发展 程序设计语言的翻译 编译程序的总体结构 编译程序的各个阶段 编译程序的组织与生成 * * 此处大致介绍一下《编译原理》课程的内容以及学习该课程所要达到的目标。 * * * * * * (在黑板上同时画出语法树) * * * * * 对输入串id+id*id进行分析的过程 栈 输入缓冲区 输出 #E id+id*id# #ET id+id*id# E→TE #ETF id+id*id# T→FT #ETid id+id*id# F→id #ET +id*id# #E +id*id# T→ε #ET+ +id*id# E→+TE #ET id*id# * * * * #ETF id*id# T→FT #ETid id*id# F→id #ET *id# #ETF* *id# T→*FT #ETF id# #ETid id# F→id #ET # #E # T→ε # # E→ε 输出的产生式序列形成了最左推导对应的分析树 #ET id*id# * * * * * * 3、语义分析 语义分析(semantic analysis)一般和语法分析同时进行,称为语法制导翻译(syntax-directed translation) 功能:分析由语法分析器识别出来的语法成分的语义 获取标识符的属性:类型、作用域等 语义检查:运算的合法性、取值范围等 子程序的静态绑定:代码的相对地址 变量的静态绑定:数据的相对地址 * * 4、中间代码生成 中间代码(intermediate Code) 例:sum=(10+20)*(num+square); 后缀表示(逆波兰Anti- Polish Notation) sum 10 20 + num square +*= 前缀表示(波兰Polish Notation) = sum *+10 20+num square 四元式表示 (三地址码) (+,10,20,T1) (+,num,square,T2) (*, T1, T2, T3) (=, T3 , , sum) 三元式表示 (+,10,20) (+,num,square) (*,⑴,⑵) (=, sum,⑶) 语法树 * * 波兰表示问题——Lukasiewicz 1929年发明 中缀表示(Infix notation):(a+①b)*(-c+②d)+③e/f 波兰表示(Polish / Prefix / Parenthesis-free / Lukasiewicz notation)——也就是前缀表示 +③*+①a b+②@c d/ef 逆波兰表示(Reverse Polish / Suffix / Postfix notation) ——也就是后缀表示 a b +①c@ d +②*ef/+ ③ 运算顺序从左向右 * * 4、中间代码生成 中间代码的特点 简单规范 与机器无关 易于优化与转换 * * 代码优化(optimization)是指对中间代码进行优化处理,使程序运行能够尽量节省存储空间,更有效地利用机器资源,使得程序的运行速度更快,效率更高。当然这种优化变换必须是等价的。 与机器无关的优化 与机器有关
文档评论(0)