语法制导翻译
- 是以语法分析为主导的语义处理。语法分析过程中嵌入语义动作,即调用对应的语义子程序。
- 为每个文法规定相应的语义,即编写出相应语义处理子程序,整个分析是以语法分析为主导。
中间语言
逆波兰式(后缀表达式)
中缀转后缀表达式
赋值语句转后缀表达式
<左部>:=<表达式>,把赋值号“:=”看成是一个赋值运算符,它的后缀式为<左部><表达式的后缀式>:=(相当于:=优先级最低)
条件语句转后缀表达式
- if e then S1 else S2,可按后缀式写成e′ p1 JEZ S1′ p2 JUMP S2′
- e′,S1′和S2′分别是e、 S1和S2的后缀式。此外, 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是运算符部分,ARG1和ARG2是运算对象部分,它们指向运算对象的中间结果(i)或直接指向运算对象。
树形表示
- 在树表示中,叶子结点表示运算对象,即常量或变量,其它结点表示运算符。
- 后序遍历二叉树可以得到该表达式的逆波兰表达式。
四元式
(OP,ARG1,ARG2,RESULT)
OP是运算符;ARG1和ARG2是运算对象;RESULT是运算结果,会生成中间结果Ti