Program ::= Statement+ Statement ::= (VariableStatement | PrintStatement | ReturnStatement) SEMICOLON VariableStatement ::= ("let" IDENTIFIER | IDENTIFIER) EQUALS Expression PrintStatement :== PRINT LPAREN Expression RPAREN ReturnStatement :== RETURN Expression Expression :== NUMBER | IDENTIFIER | Expression + Expression