词法分析和语法分析之后的中间代码生成,是编译第三阶段的工作
本章介绍几种典型的中间代码形式,以及产生它的算法
中间代码的形式很多,如逆波兰记号、树形表示、三元式、四元式
他们都是介于单词流与目标指令之间的“中间产品”
目前还不存在一种广泛接受的方式来描述为典型程序语言产生中间代码所需的邻语言的动作
原因是代码生成依赖于对语义的解释,而语义的刻划的形式化系统尚未诞生
为每一个产生式配一个翻译子程序(语义子程序、动作),在语法分析的同时执行它
这样,配上语义动作之后,既指定了串的意义,同时又按这种意义规定了生成某种中间代码应作的基本动作
语法制导翻译逆波兰表示法三元式和树四元式简单算术表达式和赋值句到四元式的翻译布尔表达式到四元式的翻译控制语句的翻译数组元素的引用过程调用说明语句的翻译自上而下分析制导翻译概说在语法分析过程中,随着分析的步步进展,根据每个产生式所对应的语义子程序(语义动作)进行翻译(产生中间代码)的办法
概念标记说明描述语义动作时,需要赋予每个文法符号X(终结符或者非终结符)以种种不同方面的值,如X
TYPE(类型),X
VAL(值)等
一个产生式中同一符号多次出现,用上角标来区分
EE+E表示为EE(1)+E(2)每个产生式的语义动作,写在该产生式之后的花括号内
#--S0………XX
VALSm-1YY
VALSm文法符号,无须进栈,让其进栈只是为了醒目
需要保存的某些语义信息
实际上为一个指示器,指向分析表的某一行
先对LR分析器的栈作一些改进,加入语义值
STATEVALSYMTOP文法及其语义动作(0)S’E{printE
VAL}(1)EE(1)+E(2){E
VAL:=E(1)
VAL+E(2)
VAL}(2)EE(1)*E(2){E
VAL:=E(1)
VAL*E(2)
VAL}(3)E(E(1)){E