program ::= [statement]
statement ::= print expression
| if expression then [statement] end
| if expression then [statement] else statement end
| if expression then [statement] elsif expression [statement] [..elseif] else [statement] end
| for variable in list do [statement] end
expression ::=
"(" expression binary_op expression ")"
| unary_op expression
| term
| term.function
term ::= constant | variable | function | [expression]
constant ::= integer | float | string | [constant]
binary_op ::= "+" | "-" | "*" | "/" | "%" | "==" | "!=" | "<" | "<=" | ">" | ">=" | "&&" | "||"
unary_op ::= "-" | "!" | "+"