### Statements expr_statment : expression ( ";" | "\n" ) ### Expressions expression : logical_or ### Operators logical_or : logical_and ( "||" logical_and )* logical_and : equality ( "&&" equality )* equality : comparison ( ( "==" | "!=" ) comparison )* comparison : bitwise_or ( ( "<=" | ">=" | "<" | ">" ) bitwise_or )* bitwise_or : bitwise_xor ( "|" bitwise_xor )* bitwise_xor : bitwise_and ( "^" bitwise_and )* bitwise_and : bitwise_shift ( "&" bitwise_shift )* bitwise_shift : additive ( ( "<<" | ">>" ) additive )* additive : multiplicative ( ( "+" | "++" | "-" ) multiplicative )* multiplicative : unary ( ( "*" | "**" | "/" | "%" ) unary )* unary : ( "!" | "-" | "~" ) unary | call call : primary ( "(" ( primary "," )* primary? ")" )* primary : identifier | literal | "(" expression ")" ### Types identifier : ( ALPHA | "_" | "$" ) ( ALPHANUMERIC | "_" | "$" )* literal : string | char | float | int | boolean string : '"' ALPHANUMERIC* '"' char : "'" ALPHANUMERIC "'" float : NUMERIC "." NUMERIC* int : NUMERIC+ boolean : "true" | "false" ### Primitives ALPHANUMERIC = ALPHA | NUMERIC NUMERIC = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ALPHA = "A" | "B" | "C" | "D" | "E" | "F" | "G" | "H" | "I" | "J" | "K" | "L" | "M" | "N" | "O" | "P" | "Q" | "R" | "S" | "T" | "U" | "V" | "W" | "X" | "Y" | "Z" | "a" | "b" | "c" | "d" | "e" | "f" | "g" | "h" | "i" | "j" | "k" | "l" | "m" | "n" | "o" | "p" | "q" | "r" | "s" | "t" | "u" | "v" | "w" | "x" | "y" | "z"