05 语法制导翻译 | 《编译原理》笔记
本系列是编译原理 (哈工大陈鄞、郭勇)视频课的课堂笔记,主要是课堂 PPT 和部分讲授内容的文字版,仅供参考。
语法制导翻译概述
在语法分析的同时进行语义翻译,语法制导翻译即将两者放在一起实现的技术。语法制导翻译使用 CFG 来引导对语言的翻译,是一种面向文法的翻译技术。
比如一个变量,其属性就包括该变量是什么类型的,它的值是多少,存放在什么地方。类似地,表达式的属性也包括值、类型、地址等等。
L 的 inh 属性是由 T 的 type 决定的,L1 的 inh 属性是由 L 的 inh 属性定义的。
语法制导定义 SDD
在这个例子中,a 对应的 L 的 tyep 是由其父节点决定的,图中蓝色箭头表示了属性的传递路线。
SDD 的求值顺序
可以通过拓扑排序可以得到可行的求值顺序。
S-属性定义与 L-属性定义
上述例子的继承属性全都符合要求:要么来自父节点,要么来自左侧的兄弟节点。
上述例子的继承属性有一条不满足要求:来自其右侧的兄弟节点。
语法制导翻译方案 SDT
在非递归的预测分析过程中进行翻译
本节课程演示了一个例子的完整分析过程,这里就不整理了,参考原课程视频即可。
非终结符的继承属性和综合属性的计算时机是不同的:继承属性是在其即将出现的时刻进行计算,综合属性是在其子节点分析完毕后进行计算。
一个 SDT 确定下来以后,其中各个符号对应的执行代码就确定下来了。
在递归的预测分析过程中进行翻译
本节课程演示了一个例子的完整分析过程,这里就不整理了,参考原课程视频即可。
递归的预测分析过程中,每一个非终结符都对应一个过程,在语义翻译中,因为我们要计算非终结符的继承属性和综合属性,我们需要将非终结符对应的过程扩展成一个函数,函数的参数就是非终结符的各个继承属性值,返回值就是综合属性值。
05 语法制导翻译 | 《编译原理》笔记