110 likes | 216 Views
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;}
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