Session 12 Opening Exercise Handout
A Quick Exercise
The small context-free grammar from Session 9:
statement := repeat statement until expression
| print identifier
| identifier <- expression
expression := identifier = expression
| zero? expression
| number
... and a recursive-descent parser for it. Assume a function
called match(Token) that consumes a token and
returns either true or returns false.
public boolean statement()
{
switch ( scanner.peek() )
{
Token.repeat :
return match(Token.repeat) && statement() &&
match(Token.until) && expression();
Token.print :
return match(Token.print) && match(Token.identifier);
Token.identifier :
return match(Token.identifier) &&
match(Token.assign) && expression();
default:
return false;
}
}
public boolean expression()
{
switch ( scanner.peek() )
{
Token.identifier :
return match(Token.identifier) &&
match(Token.equals) && expression();
Token.zeroPredicate :
return match(Token.zeroPredicate) && expression();
Token.number :
return match(Token.number);
default:
return false;
}
}