# COSC450/550 HW 2

1. Write EBNF description for the following:

a. A Java class definition header statement

b. A C switch statement

2. Rewrite the BNF of Example 3.4 (page120) to give + precedence over * and force + to be

right associative.

3. Using the grammar in Example 3.2 (page117), show a parse tree and a leftmost

derivation for the following statement: A = A * (B + (C * A))

4. Prove that the following grammar is ambiguous:

<S à <A <B <C

<A à <A + <A | <id

<id à a | b | c

5. Write an attribute grammar whose BNF basis is that of Example 3.6 (page131) but

whose language rules are as follows: Data types cannot be mixed in expressions, but

assignment statements need not have the same types on both sides of the assignment

operator.

6. Using the virtual machine instructions given in Section 3.5.1.1, give an operational

semantic definition of the following:

a. Java do-while

b. C++ if-then-else

c. C for

7. Compute the weakest precondition for each of the following assignment statements and

postconditions:

a. a = 2 * (b -1) – 1 {a 0}

b. b = (c + 10) / 3 {b 6}

c. x = 2 * y + x – 1 {x 11}

8. Compute the weakest precondition for each of the following sequences of assignment

statements and their postconditions:

a = 2 * b + 1;

b = a – 3

{b < 0}

a. A Java class definition header statement

b. A C switch statement

2. Rewrite the BNF of Example 3.4 (page120) to give + precedence over * and force + to be

right associative.

3. Using the grammar in Example 3.2 (page117), show a parse tree and a leftmost

derivation for the following statement: A = A * (B + (C * A))

4. Prove that the following grammar is ambiguous:

<S à <A <B <C

<A à <A + <A | <id

<id à a | b | c

5. Write an attribute grammar whose BNF basis is that of Example 3.6 (page131) but

whose language rules are as follows: Data types cannot be mixed in expressions, but

assignment statements need not have the same types on both sides of the assignment

operator.

6. Using the virtual machine instructions given in Section 3.5.1.1, give an operational

semantic definition of the following:

a. Java do-while

b. C++ if-then-else

c. C for

7. Compute the weakest precondition for each of the following assignment statements and

postconditions:

a. a = 2 * (b -1) – 1 {a 0}

b. b = (c + 10) / 3 {b 6}

c. x = 2 * y + x – 1 {x 11}

8. Compute the weakest precondition for each of the following sequences of assignment

statements and their postconditions:

a = 2 * b + 1;

b = a – 3

{b < 0}

You'll get 1 file (161.2KB)