我正在阅读一本编译器书籍,当它说“S 属性语法也是 L 属性语法”时有点困惑。无法理解。有人可以说清楚(一个例子应该很好)。谢谢。
问问题
35739 次
2 回答
14
L-属性文法是一种特殊类型的属性文法。它们允许在抽象语法树的一次从左到右的遍历中评估属性。因此,L-属性文法中的属性评估可以方便地结合到自顶向下解析中。许多编程语言都是 L 属性的。特殊类型的编译器,即窄编译器,基于某种形式的 L 属性语法。这些可与 S 属性语法相媲美。用于代码合成。
S-Attributed Grammars 是一类以没有继承属性为特征的属性语法。继承的属性,在解析过程的语义分析过程中,必须从父节点向下传递到抽象语法树的子节点,这是自底向上解析的问题,因为在自底向上解析中,抽象语法的父节点树是在创建所有孩子之后创建的。S属性语法中的属性评估可以方便地结合到自顶向下解析和自底向上解析中。Yacc 基于 S 属性方法。
任何 S 属性文法也是 L 属性文法。
在 L 属性语法中,属性评估可以在从左到右的遍历中执行。由于在 S 属性语法中,属性不是继承的,因此它不会阻止您这样做。因此,您可以说 S 属性语法符合 L 语法的特征。
于 2010-03-16T22:23:04.867 回答
3
简单 S-attributed Grammar 是具有严格合成类型的语法意味着在整个解析树中仅具有 Value 属性
其中 L-Attributed 语法既可以具有综合语法,也可以具有继承语法,其中一些规则具有从左到右的继承转移。我想它会帮助你。
于 2016-04-09T22:18:01.993 回答