expression -> equality ; equality -> comparison ( ( "!=" | "==" ) comparison )* ; comparison -> term ( ( ">" | ">=" | "<" | "<=" ) term )* ; term -> factor ( ( "-" | "+" ) factor )* ; factor -> exponent ( ( "/" | "*" | "/." | "/_" | "%" | "/%" ) exponent )* ; exponent -> unary ( ( "**" ) unary )* ; unary -> ( "!" | "-" ) unary | primary ; primary -> NUMBER | STRING | "true" | "false" | "nil" | "(" expression ")" ;