语义分析和中间代码生成.ppt

  1. 1、本文档共84页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

什么是语法制导翻译法在语法分析过程中,随着分析的逐步进展,根据相应文法的每一规则所对应的语义子程序进行翻译的方法(即随语法分析的进展,识别出一个语法结构,就对它的语义进行分析和翻译)。第61页,共84页,星期六,2024年,5月语法制导翻译技术分为自底向上语法制导翻译和自顶向下语法制导翻译。第62页,共84页,星期六,2024年,5月自底向上语法制导翻译自底向上语法制导翻译方法是在自下而上的语法分析过程中逐步实现语义规则的方法。自底向上语法制导翻译的特点:(1)当栈顶形成句柄执行归约时,调用相应的语义动作。(2)语法分析栈和语义分析栈同步操作。第63页,共84页,星期六,2024年,5月以LR语法制导翻译为例,说明如何实现语法制导翻译:1、为文法G的每一个规则设计相应的语义子程序。2、构造文法G的LR分析表。3、将原LR语法分析栈扩充,以便存放文法符号对应的语义值。4、在用某一规则进行归约的同时,调用相应的语义子程序,完成所用规则式相应的语义动作。第64页,共84页,星期六,2024年,5月中间语言为了使编译程序在逻辑上更为简单明确,特别是为了使目标代码的优化比较容易实现,许多编译程序都采用了某种复杂性介于源程序语言和机器语言之间的中间语言,并且首先把源程序翻译成这种中间语言程序(中间代码)。第65页,共84页,星期六,2024年,5月常见的中间语言形式逆波兰式三元式四元式第66页,共84页,星期六,2024年,5月四元式是一种比较普遍采用的中间代码形式。四元式的四个成分是:算符OP、第一运算量ARG1、第二运算量ARG2以及运算结果RESULT。其中,运算量和运算结果有时指用户自定义的变量,有时指编译程序引进的临时变量。第67页,共84页,星期六,2024年,5月赋值语句A:=-B*(C+D)的四元式序列:序号OPARG1ARG2RESULT注释(1)?B_T1T1为临时变量(2)+CDT2T2为临时变量(3)*T1T2T3T3为临时变量(4):=T3_A赋值运算表中:“?”是为了区别“-”而表示的求负运算符。凡只需一个运算量的算符,使用ARG1。第68页,共84页,星期六,2024年,5月6.4表达式及赋值语句的翻译6.4.1简单算术表达式和赋值语句的翻译简单算术表达式是一种仅含简单变量的算术表达式;简单变量是指普通变量和常数,但不含数组元素及结构引用等复合型数据结构。简单算术表达式的计值顺序与四元式出现的顺序相同,因此很容易将其翻译成四元式形式。第69页,共84页,星期六,2024年,5月实现简单算术表达式和赋值语句到四元式的翻译一般采取下列步骤:(1)分析文法的特点。(2)设置一系列语义变量,定义语义过程、语义函数。(3)修改文法,写出每一条规则的语义子程序。(4)扩充LR分析栈,构造LR分析表。第70页,共84页,星期六,2024年,5月考虑以下文法G[A]:A→i=E?E→E+E∣E*E∣?E∣(E)∣i为了实现由表达式到四元式的翻译,需要给文法加上语义子程序,以便在进行归约的同时执行对应的语义子程序。第71页,共84页,星期六,2024年,5月语义子程序所涉及的语义变量、语义过程及函数说明如下:(1)对非终结符E定义语义变量E.place,即用E.place表示存放E值的变量名在符号表中的入口地址或临时变量名的整数码。(2)

文档评论(0)

xiaoshun2024 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档