LARA

Recursive Descent for Polynomials

In context-free grammars we have seen a grammar of polynomials.

Consider first this version of grammar:

  polynomial ::= term ("+" term)*
  term ::= factor ("*" factor)*
  factor ::= constant | variable | "(" polynomial ")"

This grammar version is very nice for recursive descent parsing

Here is a parser for this grammar: polynomials.pscala

Note correspondence:

(“+” term)* ⇒ while (lex.current=PLUS) { lex.next; parseTerm }

Example: running the code above on “x + y*(u+3)”

For statements, we use keyword to decide what we are about to parse:

“if” X | “while” Y ⇒ if (lex.current=IF) parseX else if (lex.current=WHILE) parseY