Difference between revisions of "Introduction to Syntax/Exercise 1"

From Wiki**3

< Introduction to Syntax
Line 14: Line 14:
 
== Solution ==
 
== Solution ==
  
The terminal symbols are all the symbols not defined by a rule: '''<tt>or</tt>''', '''<tt>and</tt>''', '''<tt>not</tt>''', '''<tt>(</tt>''', '''<tt>)</tt>''', '''<tt>true</tt>''', '''<tt>false</tt>'''.
+
1. The terminal symbols are all the symbols not defined by a rule: '''<tt>or</tt>''', '''<tt>and</tt>''', '''<tt>not</tt>''', '''<tt>(</tt>''', '''<tt>)</tt>''', '''<tt>true</tt>''', '''<tt>false</tt>'''.
 +
 
 +
2. The following trees are possible for true and false and true (an analogous analysis could be done for '''or''')
 +
 
 +
3. The following grammar selects left associativity for the binary operators ('''and''' and '''or'''):
 +
 
 +
bexpr  -> bexpr or bterm | bterm
 +
bterm  -> bterm and bfactor | bfactor
 +
bfactor -> not bfactor | ( bexpr ) | true | false
 +
 
 +
4. The analysis considers the grammar defined in 3.
 +
 
 +
 
  
 
[[category:Compilers]]
 
[[category:Compilers]]
 
[[category:Teaching]]
 
[[category:Teaching]]

Revision as of 21:07, 2 April 2010

The Problem

Consider the following grammar:

 bexpr   -> bexpr or bexpr | bterm
 bterm   -> bterm and bterm | bfactor
 bfactor -> not bfactor | ( bexpr ) | true | false
  1. Identify the terminal and non-terminal symbols of the grammar.
  2. Show that the grammar is ambiguous by deriving two different trees for the same input sequence.
  3. Write a non-ambiguous grammar for the same language.
  4. Build the tree corresponding to the analysis of the following input sequence: not ( true or false and true )

Solution

1. The terminal symbols are all the symbols not defined by a rule: or, and, not, (, ), true, false.

2. The following trees are possible for true and false and true (an analogous analysis could be done for or)

3. The following grammar selects left associativity for the binary operators (and and or):

bexpr   -> bexpr or bterm | bterm
bterm   -> bterm and bfactor | bfactor
bfactor -> not bfactor | ( bexpr ) | true | false

4. The analysis considers the grammar defined in 3.