add more handouts and update index
mhe authored 1 month ago
ConcreteSyntax.md 1.15 KB
Concrete syntax
Here is a grammar for our language, written in BNF, where expressions with lower numbers describe operators with lower precedence. The grammar is
ambiguous regarding else . We resolve the ambiguity by associating else ‘s to the closest if ‘s to the left.
Program ::= Identifier := Expr;
| { [Program] }
| while (Expr) Program
| if (Expr) Program
| if (Expr) Program else Program
Expr ::= Expr1 | Expr1 OrOp Expr
Expr1 ::= Expr2 | Expr2 AndOp Expr1
Expr2 ::= Expr3 | Expr3 EqOp Expr2
Expr3 ::= Expr4 | Expr4 CompOp Expr3
Expr4 ::= Expr5 | Expr5 AddOp Expr4
Expr5 ::= Expr6 | Expr6 MulOp Expr5
Expr6 ::= Expr7 | NotOp Expr6
Expr7 ::= Constant | Identifier | (Expr)
OrOp ::= ||
AndOp ::= &&
EqOp ::= ==
CompOp ::= <= | < | >= | >
AddOp ::= + | –
MulOp ::= * | / | %
NotOp ::= !
We will use monadic parsing (please read chapter 13 of the book) to convert from concrete syntax to abstract syntax.
Next: Abstract syntax
7845144f