110 likes | 221 Vues
This article explores the concept of attribute grammars, a generalization of context-free grammars (CFG), where each grammar symbol has associated attributes. It covers both synthesized and inherited attributes, detailing their roles in computing values and expressions. The discussion includes examples such as the evaluation of arithmetic expressions and the conversion of binary numbers to decimal. Additionally, it highlights methods for computing attribute values during or after parsing, emphasizing the use of dependency graphs and rule-based techniques. This comprehensive overview aims to deepen your understanding of attribute grammars.
E N D
Attribute Grammars • Recall the yacc program • Parse a given expression • Evaluate it expr : expr '+' expr {$$ = $1 + $3;} | expr '-' expr {$$ = $1 - $3;} | expr '*' expr {$$ = $1 * $3;} | expr '/' expr {$$ = $1 / $3;} | '(' expr ')' {$$ = $2;} | NUMBER ; by Neng-Fa Zhou
Attributes and Attribute Grammars • Attributes • variables (type,offset,first or last occurrence,...) • constants (type, value, scope, ...) • Attribute grammar(Syntax-directed definition) • A generalization of CFG in which each grammar symbol has an associated set of attributes • Semantics rules for computing attribute values by Neng-Fa Zhou
Synthesized Attributes • Synthesized Attributes • The value is computed from the values of attributes of the children • S-attributed grammar - synthesized attributes only • Bottom-up propagation • Example • values of expressions • types of expressions by Neng-Fa Zhou
S-Attributed GrammarsExample by Neng-Fa Zhou
The Annotated Parse Tree by Neng-Fa Zhou
Inherited Attributes • Inherited Attributes • The value is computed from the values of attributes of the siblings and parent • Top-down propagation • Example • type information • where does a variable occurs? lhs or rhs by Neng-Fa Zhou
Inherited AttributesExample by Neng-Fa Zhou
The Annotated Parser Tree by Neng-Fa Zhou
Converting Binary to Decimal N ::= BIN N.v = BIN.v BIN.r = 0 BIN0 ::= BIN1 B BIN1.r = BIN0.r + 1 B.r = BIN0.r BIN0.v = BIN1.v+B.v BIN ::= B BIN.v = B.v B.r = BIN.r B ::= '1' B.v = 2B.r B ::= '0' B.v = 0 by Neng-Fa Zhou
Dependency Graphs • Each node represents an attribute of a node in the parse tree • Each arc represents the dependence relationship (flow of values) by Neng-Fa Zhou
Computing Attribute Values • 1.Compute while parsing • Oblivious methods • Fast (one pass) • Complicated • Some attribute values cannot be computed • 2. Compute after parsing • Parse-tree methods (sort dependency graphs) • Rule-based methods (data-flow or fix-point) by Neng-Fa Zhou