Presentation is loading. Please wait.

Presentation is loading. Please wait.

1 Disambiguating the grammar If we use the parse tree to indicate precedence levels of the operators, we can remove the ambiguity. The following rules.

Similar presentations


Presentation on theme: "1 Disambiguating the grammar If we use the parse tree to indicate precedence levels of the operators, we can remove the ambiguity. The following rules."— Presentation transcript:

1 1 Disambiguating the grammar If we use the parse tree to indicate precedence levels of the operators, we can remove the ambiguity. The following rules give / a higher precedence than -  - |  / const | const const / -

2 2 Derivation of 2+5*3 using C grammarC grammar + 2 3 5 *

3 3 Recursion and parentheses To generate 2+3*4 or 3*4+2, the parse tree is built so that + is higher in the tree than *. To force an addition to be done prior to a multiplication we must use parentheses, as in (2+3)*4. Grammar captures this in the recursive case of an expression, as in the following grammar fragment:  +  *  | | “(” “)”

4 4 Associativity of operators When multiple operators appear in an expression, we need to know how to interpret the expression. Some operators (e.g. +) are associative, meaning that the meaning of an expression with multiple instances of the operator is the same no matter how it is interpreted: (a+b)+c = a+(b+c) Some operators (e.g. -) are not associative: (a-b)-c  a-(b-c)e.g. try a=10, b=8, c=6 (10-8)-6 = -4 but 10-(8-6)=8 - and / are both left-associative, meaning that a-b-c is interpreted as (a-b)- c. Exponentiation (**) is right-associative. This means that 2**3**2 is interpreted as 2**(3**2) (i.e. 2**9) rather than (2**3)**2 (i.e. 8**2 or 2**6).

5 5 Associativity of Operators Operator associativity can also be indicated by a grammar. In the following fragment the left and right operands of - are treated symmetrically. -> - | -> | | “(” “)” - - - -

6 6 Associativity of Operators These rules ensure that – is left-associative, because they prevent direct recursion with – in the right-hand operand. -> - | -> | | “(” “)” - -

7 7 Decision timing: Design time vs. Implementation time (to come)

8 8 Theory vs. Reality (to come) Dealing with fixed-size numeric representations


Download ppt "1 Disambiguating the grammar If we use the parse tree to indicate precedence levels of the operators, we can remove the ambiguity. The following rules."

Similar presentations


Ads by Google