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

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

作者: 衣忌破 | 来源:发表于2019-12-09 17:02 被阅读0次
    在递归的预测分析过程中进行翻译

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

    以下例子说明

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

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

    算法
    • 为每个非终结符A构造一个函数,A的每个继承属性对应该函数的一个 形参,函数的返回值是A的综合属性值。对出现在A产生式中的每个文法符号的每个属性都设置一个局部变量。

    • 非终结符A的代码根据当前的输入决定使用哪个产生式。

    • 与每个产生式有关的代码执行如下动作:从左到右考虑产生式右部的词法单元、非终结符及语义动作。

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

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

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

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/wkcigctx.html