|
|
(5 intermediate revisions by the same user not shown) |
Line 1: |
Line 1: |
| {{TOCright}}
| | #REDIRECT [[ist:Top-Down Parsing/Exercise 6]] |
| = Problem =
| |
| | |
| Consider the following grammar, where '''<tt>F</tt>''' is the initial symbol and '''<tt>{a,b,c,d,e}</tt>''' is the set of terminal symbols:
| |
| | |
| F -> G b | O c F e
| |
| O -> a
| |
| G -> F c | O c d | (eps)
| |
| | |
| # Examine the grammar and rewrite it so that an LL(1) predictive parser can be built for the corresponding language. | |
| # Compute the FIRST and FOLLOW sets for all non-terminal symbols in the new grammar and build the parse table.
| |
| # Show the analysis table (stack, input, and actions) for the parsing process of the '''<tt>acbe</tt>''' input sequence.
| |
| | |
| == Solution ==
| |
| | |
| === Semantic tree and dependency graph ===
| |
| | |
| "x" is an inherited attribute (propagation in blue); "val" is a synthesized attribute (propagation in red).
| |
| | |
| Temporary handwritten solution.
| |
| | |
| [[Image:Top-Down Parsing-exercise-6-semantic-tree-1.png]] | |
| | |
| === 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]]
| |
| | |
| | |
| | |
| [[category:Teaching]]
| |
| [[category:Compilers]]
| |