Concepts of Programming Languages

(Sean Pound) #1

126 Chapter 3 Describing Syntax and Semantics


<assign> => <id> = <expr>
=> <id> = <expr> + <term>
=> <id> = <expr> + <term> * <factor>
=> <id> = <expr> + <term> * <id>
=> <id> = <expr> + <term> * A
=> <id> = <expr> + <factor> * A
=> <id> = <expr> + <id> * A
=> <id> = <expr> + C * A
=> <id> = <term> + C * A
=> <id> = <factor> + C * A
=> <id> = <id> + C * A
=> <id> = B + C * A
=> A = B + C * A

Figure 3.3


The unique parse tree
for A = B + C * A
using an unambiguous
grammar


<assign>

<id>

A

<id>

<factor>

<id>

B C

= <expr>

<expr>

<term>

+ <term>

<factor>

A

<id>

<term> * <factor>


  1. An expression with two occurrences of the same operator has the same issue; for example,
    A / B / C.


3.3.1.9 Associativity of Operators
When an expression includes two operators that have the same precedence (as
* and / usually have)—for example, A / B * C—a semantic rule is required
to specify which should have precedence.^2 This rule is named associativity.
Free download pdf