第5章 语法制导翻译及中间代码生成

语法制导翻译

  • 是以语法分析为主导的语义处理。语法分析过程中嵌入语义动作,即调用对应的语义子程序
  • 为每个文法规定相应的语义,即编写出相应语义处理子程序,整个分析是以语法分析为主导。

中间语言

逆波兰式(后缀表达式)

中缀转后缀表达式

赋值语句转后缀表达式

<左部>:=<表达式>,把赋值号“:=”看成是一个赋值运算符,它的后缀式为<左部><表达式的后缀式>:=(相当于:=优先级最低)

条件语句转后缀表达式

  • if e then S1 else S2可按后缀式写成e′  p1  JEZ  S1′  p2   JUMP   S2′
  • e′,S1′S2′分别是e、 S1S2的后缀式。此外, p1表示S2′在数组POST的起始位置, p2表示S2′之后那个符号位置。

  • JUMP表示无条件转:后缀式P JUMP表示无条件转移到下标P所指那个元素POST[p](即从该符号开始继续执行)
  • JLT表示小于转:后缀式e1e2 P JLT表示当后缀表达式e1小于后缀表达式e2时,则转移至POST[P]
  • JEZ表示零转:后缀式e P JEZ表示当后缀表达式e的值为零时,则转移至POST[P]

三元式

(i) (OP, ARG1, ARG2)

(i)为三元式的编号,不同三元式不能有相同的编号。

OP是运算符部分,ARG1ARG2是运算对象部分,它们指向运算对象的中间结果(i)直接指向运算对象

树形表示

  • 在树表示中,叶子结点表示运算对象,即常量或变量,其它结点表示运算符。
  • 后序遍历二叉树可以得到该表达式的逆波兰表达式。

四元式

(OP,ARG1,ARG2,RESULT)
OP是运算符;ARG1ARG2是运算对象;RESULT是运算结果,会生成中间结果Ti

posted @ 2020-08-20 10:29  Littlejiajia  阅读(168)  评论(0编辑  收藏  举报