(→Solution) |
|||
Line 16: | Line 16: | ||
=== Semantic tree and dependency graph === | === Semantic tree and dependency graph === | ||
− | "x" is an inherited attribute (propagation in blue); "val" is a synthesized attribute ( | + | "x" is an inherited attribute (propagation in blue); "val" is a synthesized attribute (propagation in red). |
Temporary handwritten solution. | Temporary handwritten solution. | ||
− | [[Image:Top-Down Parsing | + | [[Image:Top-Down Parsing-exercise-6-semantic-tree-1.png]] |
=== Attribute grammar using only synthesized attributes === | === Attribute grammar using only synthesized attributes === | ||
+ | |||
+ | We start by noting that the semantic computed by the previous grammar corresponds to base 5-like numbering (although the digits do not belong to base 5). | ||
+ | |||
+ | The new grammar is trivial to write: | ||
+ | |||
+ | <text> | ||
+ | |||
+ | </text> | ||
+ | |||
+ | "val" is a synthesized attribute (propagation in red). | ||
+ | |||
+ | Temporary handwritten solution. | ||
+ | |||
+ | [[Image:Top-Down Parsing-exercise-6-semantic-tree-2.png]] | ||
+ | |||
+ | [[category:Teaching]] | ||
+ | [[category:Compilers]] | ||
Consider the following grammar, where F is the initial symbol and {a,b,c,d,e} is the set of terminal symbols:
F -> G b | O c F e O -> a G -> F c | O c d | (eps)
"x" is an inherited attribute (propagation in blue); "val" is a synthesized attribute (propagation in red).
Temporary handwritten solution.
File:Top-Down Parsing-exercise-6-semantic-tree-1.png
We start by noting that the semantic computed by the previous grammar corresponds to base 5-like numbering (although the digits do not belong to base 5).
The new grammar is trivial to write:
<text>
</text>
"val" is a synthesized attribute (propagation in red).
Temporary handwritten solution.