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 ::= "-" | "!" | "+"
