编译原理语义分析与中间代码生成.ppt_第1页
编译原理语义分析与中间代码生成.ppt_第2页
编译原理语义分析与中间代码生成.ppt_第3页
编译原理语义分析与中间代码生成.ppt_第4页
编译原理语义分析与中间代码生成.ppt_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

语义分析与中间代码生成 复习 编译程序的逻辑过程按照编译程序的逻辑工作过程 语法分析后 接下来就要进行语义分析了 语义分析后 再生成中间代码 实际应用中 往往在语法分析的同时 进行语义分析并生成中间代码 这就是语法制导翻译法 语法制导翻译过程中 需要借助于属性文法进行语义描述和语义处理 本章内容 属性文法有关概念 语法制导翻译基本思想 中间代码形式 简单算术表达式 布尔表达式 赋值语句 条件语句 循环语句的翻译 属性文法 表达式文法E T T TorTT n bE T1 T2 T1 type intT2 type T1 typeE type int E T1orT2 T1 type boolT2 type T1 typeE type bool T n T type int T b T type bool 属性文法 对于某个压缩了的文法 当把每个文法符号和一组属性相关联 并把产生式附加以语义规则的时候 就得到属性文法 语法制导的翻译过程 由于属性文法的规则和产生式是一一对应的关系 所以 由属性文法确定的语义分析可以在语法分析的过程中进行 这个过程称为语法制导的翻译 属性文法 attributegrammar A G V F 其中G 一个CFG 属性文法的基础 V 有穷的属性集每个属性与一个文法符号相关联这些属性代表与文法符号相关的语义信息如类型 地址 值 代码 符号表内容等等属性与变量一样 可以进行计算和传递属性加工的过程即是语义处理的过程属性加工与语法分析同时进行属性的表示 标识符 或数 写在相应文法的下边点记法 E Val E Place E Type F 关于属性的属性断言或一组属性的计算规则 称为语义规则 断言或语义规则与一个产生式相联 只引用该产生式左端或右端的终结符或非终结符相关的属性 语义规则描述的工作 属性计算静态语义检查符号表操作代码生成 继承属性和综合属性 两类属性 综合属性 SynthesizedAttribute 归约型属性用于 自下而上 传递信息继承属性 InheritedAttribute 推导型属性用于 自上而下 传递信息 属性的计算 A X1X2 XnA的综合属性 计算S A f A X1 A Xn Xj的继承属性 计算I Xj f A A A Xn 文法符号属性的说明 非终结符既可有综合属性也可有继承属性 但文法开始符号没有继承属性 终结符只有综合属性 通常规定 文法符号的综合属性与继承属性无交 综合属性的例子 非终结符E T及F都有一个综合属性val 符号digit有一个综合属性 它的值由词法分析器提供 与产生式L E对应的语义规则仅仅是打印由E产生的算术表达式的值的一个过程 可认为这条规则定义了L的一个虚属性 某些非终结符加上标是为了区分一个产生式中同一非终结符多次出现 综合属性的自下而上定值 设表达式为3 5 4 则语义动作打印数值19 继承属性的例子 继承属性L in 继承属性的自上而下定值 D L in real L in real L in real T type real real id2 id1 id3 Realid1 id2 id3 语法制导翻译的基本思想 为每条产生式配上一个翻译子程序 称为语义动作或语义子程序 语义动作的工作指明符号串的意义 按照这种意义规定了对应的动作 查添各种表格改变变量之值诊察与报告源程序错误产生中间代码 在语法分析的同时 当一个产生式获得匹配 对于自上而下分析 或用于归约 对于自下而上分析 时 就执行相应产生式的语义子程序 中间代码 中间代码 Intermediatecode 源程序的一种内部表示 不依赖目标机的结构 易于机械生成目标代码的中间表示 几种中间语言后缀式 逆波兰表示法 三地址代码四元式三元式间接三元式树 后缀式 表达式的一种表示形式运算符直接跟在运算量后面又称为逆波兰表示法定义 设E是表达式 那么如果E是变量或者常量 E的逆波兰表示为EE1OPE2 E1 E2 OP 其中E1 E2 为E1 E2的逆波兰表示 E E 其中E 为E的逆波兰表示 后缀式的生成设置一个操作符栈 当扫描到操作数时 输出该操作数 当遇到操作符时 与栈顶操作符比较优先级 若栈顶操作符优先级高于栈外操作符 则输出该栈顶操作符 反之 则栈外操作符入栈 后缀表达式的计值自左向右扫描表达式 每遇到运算量就把它推进栈 每遇到k目算符就把它作用于栈顶的k个项 并把运算结果来代替这k个项 逆波兰表示的例子 A B C D E C D N ABCD ECD N a b c d e abc de 逆波兰表示方法的扩充 赋值语句 V e V e 例子 t a b c d e tab c de 转向语句 goto jump条件语句 Ifthenelse jumpfjump 三地址代码 一般形式 X yopz例子x y z可表示为T1 y zT2 x T1T1 T2为编译时产生的临时变量三地址语句的种类三地址代码的具体实现四元式三元式间接三元式 四元式 一般形式 例子 a b c bct1 at1t2单目运算的处理 为空 一般来讲 四元式的运算符都有对应的机器指令 或者对应的子程序 因此从四元式生成指令代码是容易的 四元式之间的联系是通过临时变量实现的 便于进行代码优化 四元式表示的例子 A B C D E C D N 1 CDT1 2 BT1T2 3 AT2T3 4 CDT4 5 T4NT5 6 ET5T6 7 T3T6T7 三元式 如果我们不明显给出四元式的结果部分 而是用四元式的编号来表示结果 那么我们可以得到三元式 形式如下 例子 a b c bc a 三元式的出现顺序与表达式的计值顺序一致 和四元式的比较 无须临时变量 占用存储空间少 相互引用太多 使得难以进行代码优化 三元式表示的例子 A B C D E C D N 1 CD 2 B 1 3 A 2 4 CD 5 4 N 6 E 5 7 3 6 间接三元式 间接三元式 为了便于代码优化处理 用一张间接码表辅以三元式表的办法来表示中间代码 间接码表是一张指示器表 它将按运算的先后顺序列出有关三元式在三元式表中的位置 当在代码优化过程中需要调整运算顺序时 只需重新安排间接码表即可 例子 X A B CY D A B 间接三元式表示的例子 A B C D E C D N 1 CD 1 2 B 1 2 3 A 2 3 4 1 N 1 5 E 4 4 6 3 5 5 6 树形表示 抽象语法树AST 采用树形表示作为一种中间代码形式 有助于代码的产生和优化 树形表示的定义 简单变量或常数的树就是该变量或常数自身 如果表示e1和e2的树为T1和T2 那么 e1 e2 e1 e2 e1的树分别是 显然 树形表示是三元式表示的翻版 抽象语法树 AbstractSyntaxTree 在语法树中去掉那些对翻译不必要的信息 获得更有效的源程序中间表示AST可以拓广 用来表示数组元素 过程调用 控制结构 说明等 由语法树到AST 步骤 去掉单非产生式子树 上提终结符结点 运算符上提 取代其父结点 去掉括号 运算符上提 例子 a a a 简单算术表达式和赋值句的翻译 文法 A i EE E E E E E E i引入的语义属性 E place与非终结符E相联系 表示存放E值的变量名在符号表的入口或整数码 对临时变量 语义过程 newtemp 函数过程 每次调用 回送一个代表新临时变量名的整数码作为函数值 lookup i name 函数过程 对i所代表标识符查找符号表以获知它在符号表中位置 入口 emit 语义过程 产生一个三地址代码并填入中间代码表中 产生式的语义描述 1 A i E p lookup i name if p NULL error elseemit p E place 2 E E 1 E 2 E place newtemp emit E place E 1 place E 2 place 3 E E 1 E 2 E place newtemp emit E place E 1 place E 2 place 4 E E 1 E place newtemp emit E place uminus E 1 place 5 E E 1 E place E 1 place 6 E i p lookup i name if p NULL error elseE place p 布尔表达式的翻译 布尔表达式基本作用 用作计算逻辑值 用作控制条件 布尔表达式文法 E E E E E E E idrelopid id结合性和优先级 relop 左结合 布尔表达式的翻译 计算布尔表达式的值 逐步计算 利用布尔表达式的性质采取优化措施 A B ifAthentrueelseBA B ifAthenBelsefalse B ifBthenfalseelsetrue 布尔表达式的翻译 逐步计算的例子 A B C D C D T1 B T1 T2 A T2 T3 布尔表达式的翻译 优化计算引入的三地址代码 ifi placegotol 若i为真 转向第l个三地址代码 ifi 1 placerelop opi 2 placegotol 若i 1 relop opi 2 为真 转向第l个三地址代码 gotol 无条件转向第l个三地址代码 布尔表达式的翻译 逻辑计值E E 1 orE 2 E place newtemp emit E place E 1 place or E 2 place E E 1 andE 2 E place newtemp emit E place E 1 place and E 2 place E notE 1 E place newtemp emit E place not E 1 place E E 1 E place E 1 place E i 1 relopi 2 E place newtemp emit ifi 1 relop opi 2 gotonextquad 3 emit E place 0 emit gotonextquad 2 emit E place 1 E i E place i place 布尔表达式的翻译 作为控制条件E i E truelist nextquad E falselist nextquad 1 E bcode nextquad emit ifi placegoto0 emit goto0 E i 1 relopi 2 E truelist nextquad E falselist nextquad 1 E bcode nextquad emit ifi 1 placerelop opi 2 placegoto0 emit goto0 E E 1 E truelist E 1 truelist E falselist E 1 falselist E bcode E 1 bcode 布尔表达式的翻译 作为控制条件E notE 1 E truelist E 1 falselist E falselist E 1 truelist E bcode E 1 bcode E E 1 orE 2 backpatch E 1 falselist E 2 bcode E truelist merge E 1 truelist E 2 truelist E falselist E 2 falselist E bcode E 1 bcode E E 1 andE 2 backpatch E 1 truelist E 2 bcode E truelist E 2 truelist E falselist merge E 1 falselist E 2 falselist E bcode E 1 bcode 条件语句的翻译 C ifEthen backpatch E truelist nextquad C chain E falselist S CS 1 S chain merge C chain S 1 chain TP CS 1 else q nextquad emit goto0 backpatch C chain nextquad TP chain merge S 1 chain

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论