menhir --interpret --interpret-show-cst parser.mly

EOF

// global
INT ID SEMI

// function
FUNCTION ID RETURNS NONE LPAREN INT ID RPAREN LBRACE INT ID SEMI RBRACE
FUNCTION ID RETURNS NONE LPAREN RPAREN LBRACE RBRACE
FUNCTION ID RETURNS NONE LPAREN RPAREN LBRACE ID SEMI RBRACE

// loop
FUNCTION ID RETURNS NONE LPAREN RPAREN LBRACE LOOP CONDITIONS LPAREN START COLON SEMI CHECK COLON ID LT INT_LITERAL SEMI CHANGE COLON RPAREN DO LBRACE RBRACE RBRACE

FUNCTION ID RETURNS NONE LPAREN RPAREN LBRACE LOOP CONDITIONS LPAREN START COLON SEMI CHECK COLON ID LT INT_LITERAL SEMI CHANGE COLON ID ASSIGN ID PLUS INT_LITERAL RPAREN DO LBRACE RBRACE RBRACE

FUNCTION ID RETURNS NONE LPAREN RPAREN LBRACE LOOP CONDITIONS LPAREN START COLON ID ASSIGN INT_LITERAL SEMI CHECK COLON ID LT INT_LITERAL SEMI CHANGE COLON ID ASSIGN ID PLUS INT_LITERAL RPAREN DO LBRACE RBRACE RBRACE

FUNCTION ID RETURNS INT LPAREN RPAREN LBRACE LOOP CONDITIONS LPAREN START COLON ID ASSIGN INT_LITERAL SEMI CHECK COLON ID LT INT_LITERAL SEMI CHANGE COLON ID ASSIGN ID PLUS INT_LITERAL RPAREN DO LBRACE ID ASSIGN LPAREN ID PLUS ID RPAREN SEMI RBRACE RBRACE


// if
FUNCTION ID RETURNS NONE LPAREN RPAREN LBRACE IF LPAREN BOOL_LITERAL RPAREN LBRACE RBRACE RBRACE

// else
FUNCTION ID RETURNS NONE LPAREN RPAREN LBRACE IF LPAREN BOOL_LITERAL RPAREN LBRACE RBRACE ELSE LBRACE RBRACE RBRACE

// nested if
FUNCTION ID RETURNS NONE LPAREN RPAREN LBRACE IF LPAREN BOOL_LITERAL RPAREN LBRACE IF LPAREN BOOL_LITERAL RPAREN LBRACE RBRACE RBRACE RBRACE

// return
FUNCTION ID RETURNS NONE LPAREN RPAREN LBRACE RETURN BOOL_LITERAL SEMI RBRACE


// arrays
INT LI ID ASSIGN LBRACKET RBRACKET SEMI
INT LI ID ASSIGN LBRACKET INT_LITERAL RBRACKET SEMI
INT LI ID ASSIGN LBRACKET ID RBRACKET SEMI
INT LI ID ASSIGN LBRACKET INT_LITERAL COMMA INT_LITERAL RBRACKET SEMI


// reference array
INT LI ID ASSIGN LBRACKET INT_LITERAL RBRACKET SEMI INT ID ASSIGN ID LBRACKET INT_LITERAL RBRACKET SEMI