- 1、本文档共50页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第八章语法制导翻译和中间代码的生成
E→E1 or E2 {E.Place:=newtemp; emit(E.place ‘:=’E1.place ‘or’ E2.place)} E→E1 and E2 {E.Place:=newtemp; emit(E.place ‘:=’E1.place ‘and’ E2.place)} E→not E1 { E.Place:=newtemp; emit(E.place ‘:=’ ‘not’ E1.place)} E→(E1) emit(E.place ‘:=’ E1.place) 简单布尔表达式翻译的属性文法 E→id1 relop id2 {E.Place:=newtemp; emit(‘if’ id1.place relop id2.place ‘goto’ nextstat+3); emit(E.Place’:=’ ‘0’); emit(‘goto nextstat+2); emit(E.Place’:=’ ‘1’)} E→true { E.Place:=newtemp; emit(E.Place’:=’ ‘1’)} E→false { E.Place:=newtemp; emit(E.Place’:=’ ‘0’)} S →if E then S1 |if E then S1 else S2 |while E do S1 控制语句的布尔表达式的翻译 E的代码 S1的代码 E的代码 S1的代码 Jump out S2的代码 E的代码 S1的代码 Jump begin E.ture 表达式为真转向的目标语句 E.false表达式为假转向的目标语句 实例 if ab or cd and ef then S1 else s2 的布尔表达式的翻译: 共50页, Page* 编译程序的任务: 是把源程序翻译成目标程序,这个 目标程序必须和源程序的语义等同 ,也就是说,尽管它们的语法结构 完全不同,但它们所表达的结果应 完全相同。 第八章 语法制导翻译和中间代码的生成 通常,在词法分析程序和语法分析程序对 源程序的语法结构进行分析之后,要么由 语法分析程序直接调用相应的语义子程序 进行语义处理,要么首先生成语法树或该 结构的某种表示,再进行语义处理。 语义处理的两个功能: 第一,审查每个语法结构的静态语义, 即验证语法结构合法的程序是否真正有意义 。有时把这个工作称为静态语义分析或静态 审查。 第二,如果静态语义正确,语义处理则 要执行真正的翻译,即,要么生成程序的一 种中间表示形式(中间代码),要么生成实 际的目标代码。 1.属性文法 2.语法制导翻译 3.中间代码的形式 4.简单的赋值语句的翻译 5.布尔表达式的翻译(*) 属性文法 : 一个属性文法是一个三元组A=(G,V,F), (1) 一个上下文无关文法G; (2)一个属性的有穷集V; (3)关于属性的断言或谓词的有穷集F。 每个属性与文法的某个非终结符或终结符 相联。每个断言与文法的某产生式相联。 8.1属性文法 如果对G中的某一输入串而言,句子A中的所 有断言对该输入串的语法树结点的属性全 为真,则该串A是语言中的句子,编译程序 的静态语义审查工作就是验证关于所编译 的程序的断言是否全部为真。 属性文法静态语义实例分析 G[E] E→T1 +T2|T1 or T2 T→num|true|false 输入串3+4 E T T 3 4 + 常使用N.t的形式表示与 非终结符N相联的属性t 加入属性和断言G[E`]: E→T1+T2{T1.t=int AND T2.t=int} E→T1 or T2 {T1.t=bool AND T2.t=bool} T→num {T.t:=int} T→true{T.t:=bool} T→false{T.t:=bool} T1.t=T2.t T2.t=int T1.t=int E T T 3 4 + 例8.1 简单算术表达式求值的语义描述。 产生式 语义规则 (0)L→E print(E.val) (1)E→E1+T E.val:=E.val+T.val (2)E→T E.val:=T.val (3)T→T1*F T.Val:=T1.val*F.val (4)T→F
文档评论(0)