Grammar

Phrase structure grammar
<program> ::= <exp>

<exp> ::= <var_exp>
        | <fn_exp>
        | <app_exp>
        | <intlit_exp>
        | <papp_exp>

<fn_exp> ::= fn '(' <var_exp>* ')' => <exp>

<app_exp> ::= '(' <exp> <exp>* ')' 

<papp_exp> ::= <prim_op> '(' <args> ')' 

<args> ::= ( <exp>  ( ',' <exp> )*  )?
Lexical grammar
<var_exp> ::= <LETTER> (<LETTER>|<DIGIT>|_)*

<intlit_exp> ::=  <DIGIT>+

<DIGIT> ::= 0 | 1 | 2 | ... | 8 | 9

<LETTER> ::= a | b | ... | z | A | B | ... | Z

<prim_op> ::=  + | * | add1

Interpreter Version 0.01

Enter the program you want to interpret below:





Output of the interpreter: