Simulation

  • 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

LL(1) grammar ('' is ε):


Generate tables Reset

Grammar Table

Nonterminals FIRST FOLLOW

Transition Table

Parsing

  • Valid string examples for ETF Grammar:

    • id + id
    • id * id
    • id + id * id
    • id * id + id
  • Invalid string examples for ETF Grammar:

    • id +
    • id *
    • +
    • * +


Trace

StackInputRule

Parse Tree