183k views
2 votes
Extend the grammar of figure 2. 25 to include if statements and while loops, along the lines suggested by the following examples:

1. Program — stmt_list $$ 2. Stmt_list + stmt_list stmt 3. Stmt list → stmt 4. Stmt - id := expr 5. Stmt + read id 6. Stmt + write expr 7. Expr + term 8. Expr + expr add op term 9. Term + factor 10. Term + term mult_op factor 11. Factor + ( expr ) 12. Factor →id 13. Factor + number 14. Add_op + + 15. Add-op +- 16. Mult_op * 17. Mult_op 1 Figure 2. 25 LR(1) grammar for the calculator language. Productions have been numbered for reference in future figures.

abs := n

if n < 0 then abs := 0 - abs fi

sum := 0

read count

while count > 0 do

read n

sum := sum + n

count := count - 1

od

write sum

Q) Your grammar should support the six standard comparison operations in conditions, with arbitrary expressions as operands. It should also allow an arbitrary number of statements in the body of an if or while statement

User Trizalio
by
7.2k points

1 Answer

1 vote
Program → stmt_list $$
Stmt_list → stmt_list stmt
Stmt_list → stmt
Stmt → id := expr
Stmt → read id
Stmt → write expr
Stmt → if (cond) then stmt_list else stmt_list endif
Stmt → while (cond) stmt_list endwhile
Expr → term
Expr → expr add_op term
Term → factor
Term → term mult_op factor
Factor → ( expr )
Factor → id
Factor → number
Add_op → +
Add_op → -
Mult_op → *
Mult_op → /
Step-by-step explanation:
The above extended grammar includes two new productions (7 and 8) to handle if statements and while loops. The if statement has a condition (cond) that can include any arbitrary expression and two sets of statements to execute, one if the condition is true and the other if the condition is false. The while loop also has a condition (cond) that can include any arbitrary expression and a set of statements to execute repeatedly while the condition is true. The grammar also allows for an arbitrary number of statements in the body of an if or while statement.
User Dimitri Acosta
by
7.8k points