attribute grammars
DESCRIPTION
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;} - PowerPoint PPT PresentationTRANSCRIPT
by Neng-Fa Zhou
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.vBIN.r = 0
BIN0 ::= BIN1 B BIN1.r = BIN0.r + 1B.r = BIN0.rBIN0.v = BIN1.v+B.v
BIN ::= B BIN.v = B.vB.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)