Parsing
Cornell University
// E → T + E | T
void parseE() throws SyntaxError {
parseT();
if (peek("+")) {
advance();
parseE();
}
}
Similarly, the method parseT
looks for “×
” to decide which production to use:
// T → F × T | F
void parseT() throws SyntaxError {
parseF();
if (peek("×")) {
advance();
parseT();
}
}
And parseF()
can decide using the first symbol it sees, assuming we have an appropriate method isNumber()
:
// F → n | ( E )
void parseF() throws SyntaxError {
if (isNumber(peek())) {
advance();
} else {
consume("(");
parseE();
consume(")");
}
}