LL(1) Parser Visualization

Write your own context-free grammar and see an LL(1) parser in action!

Written by Zak Kincaid and Shaowei Zhu based on http://jsmachines.sourceforge.net/machines/ll1.html

1. Write your LL(1) grammar (empty string '' represents ε):

Valid LL(1) Grammars

For any production S -> A | B, it must be the case that:

  • For no terminal t could A and B derive strings beginning with t
  • At most one of A and B can derive the empty string
  • if B can derive the empty string, then A does not derive any string beginning with a terminal in Follow(A)

Formatting Instructions

  • The non-terminal on the left-hand-side of the first rule is the start non-terminal
  • Write each production rule in a separate line (see example to the left)
  • Separate each token using whitespace
  • $ is reserved as the end-of-input symbol, and S is reserved as an artificial start symbol. The grammar is automatically augmented with the rule S ::= start $

Debugging

  • More information about the parser construction is printed on the console
  • The source code follows the pseudocode in lecture. In particular, see computeNullable, computeFirst, computeFollow, and computeLL1Tables

Generate tables

2. Nullable/First/Follow Table and Transition Table

Nonterminals FIRST FOLLOW

3. Parsing

Start/Reset Step Forward


Partial Parse Tree