CS152
Chris Pollett
Feb. 18, 2009
<expr> ::= <expr> + <expr> | <expr> * <expr> | (<expr> ) | <number> <number> ::= <number> <digit> | <digit> <digit> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
<expr> => <expr> * <expr> ⇒ <expr> + <expr> *<expr>the other as
<expr> => <expr> + <expr> ⇒ <number> + <expr> ⇒ <digit> + <expr> ⇒ 3 + <expr> ⇒ 3+ <expr> * <expr>and the rest of the derivations are the same.
<expr> ::= <expr> + <expr> | <term> <term> ::= <term> * <expr> | (<expr> ) | <number>This has the same effect as giving precedence to the rules.
<number> ::= <number> <digit> | <digit>to say that a <number> a string of one or more <digits>, one can write instead
<number> ::= digit {digit}here {} is used to denote zero of more repetitions.
if (<expr>) <statement> [else <statement>]to indicate the else clause is optional.
<noun-phrase> ::= <article> <noun> <article> ::= a | themight be drawn as: