通常有两种将语义规则和产生式联系起来的标记方式:
- Syntax-Directed Definitions: 是一种较高层次的规范,表明每一个产生式相关的语义动作,但没有明确什么时候执行这些动作。
- Syntax-Directed Translation Schemes: 是SDD的一种补充标记方式,语义动作可以书写在产生式体的任意位置。用以表明执行时机。
因此可以说“使用某种SDT实现SDD”。通常,SDT在parsing的过程中完成并且不需要构建语法树。
消除左递归后的语义动作变化
当文法进行消除左递归操作后,对应的SDT的语义动作也需要修改。例如,如下一个存在左递归的文法的语义动作是这样的。均为综合属性
但是消除左递归后,需要引入继承属性和额外的综合属性
消除内嵌的语义动作以符合自底向上parsing
使用一条新的产生式以替换内嵌的语义动作。这样该语义动作就可以作为新的产生式的综合属性并在自底向上parsing的同时处理了。