L-attributed grammar
This article needs additional citations for verification. (July 2020) (Learn how and when to remove this template message) |
L-attributed grammars are a special type of attribute grammars.[1] They allow the attributes to be evaluated in one depth-first left-to-right traversal of the abstract syntax tree. As a result, attribute evaluation in L-attributed grammars can be incorporated conveniently in top-down parsing.
A syntax-directed definition is L-attributed if each inherited attribute of [math]\displaystyle{ X_j }[/math] on the right side of [math]\displaystyle{ A \rightarrow X_1, X_2, \dots, X_n }[/math] depends only on
- the attributes of the symbols [math]\displaystyle{ X_1, X_2, \dots, X_{j-1} }[/math]
- the inherited attributes of [math]\displaystyle{ A }[/math] (but not its synthesized attributes)
Every S-attributed syntax-directed definition is also L-attributed.
Implementing L-attributed definitions in Bottom-Up parsers requires rewriting L-attributed definitions into translation schemes.
Many programming languages are L-attributed. Special types of compilers, the narrow compilers, are based on some form of L-attributed grammar. These are a strict superset of S-attributed grammars. Used for code synthesis.
Either "inherited attributes" or "synthesized attributes" associated with the occurrence of symbol [math]\displaystyle{ X_1,X_2, \dots, X_n }[/math].
References
- ↑ Knuth, Donald E. (June 1968). "Semantics of context-free languages". Mathematical Systems Theory 2 (2): 127–145. doi:10.1007/BF01692511. Template:QID. ISSN 0025-5661.
Original source: https://en.wikipedia.org/wiki/L-attributed grammar.
Read more |