编译器笔记25-语法制导翻译-在递归的预测分析过程中进行语义翻译

2019-12-09  本文已影响0人  衣忌破
在递归的预测分析过程中进行翻译

递归的预测分析过程中,每一个非终结符都对应一个过程(可参考这篇文章)。在语义翻译中因为要计算非终结符的继承属性和综合属性,因此将非终结符对应的一个过程扩展为一个函数,此函数的参数就是各个非终结符的继承属性值,函数的返回值就是各个非终结符的综合属性值。

以下例子说明

非终结符T'对应的函数.png 非终结符T对应的函数.png 非终结符F对应的函数.png 分析器对应的主函数.png

上述函数中黑色字体部分代表原有的分析器中非终结符对应的过程,蓝色字体部分字体部分就是扩展的部分。为T的综合属性定义一个局部变量Tval,并且将函数的返回值赋值给Tval,这样就完成了语义翻译器的编写。

算法
  1. 对于带有综合属性x 的词法单元 X ,把x 的值保存在局部变量
    X.x 中;然后产生一个匹配 X 的调用,并继续输入

  2. 对于非终结符B ,产生一个右部带有函数调用的赋值语句c :=
    B(b1, b2, …, bk) ,其中, b1, b2, …, bk 是代表B的继承属性的变量,c 是代表B的综合属性的变量。

  3. 对于每个动作,将其代码复制到语法分析器,并把对属性的引用改为对相应变量的引用。

上一篇下一篇

猜你喜欢

热点阅读