class Query prechigh left OPERATOR_NOT left OPERATOR_AND left OPERATOR_OR preclow rule target: expression | /* none */ { result = 0 } expression: TERM_WITHOUT_QUOTES { result = {:DEFAULT_COLUMN => val[0]} } | TERM_WITH_QUOTES { result = {:DEFAULT_COLUMN => val[0]} } | TERM_WITHOUT_QUOTES COLON TERM_WITHOUT_QUOTES { result = {val[0] => val[2]} } | TERM_WITHOUT_QUOTES COLON TERM_WITH_QUOTES { result = {val[0] => val[2]} } | expression OPERATOR_OR expression { result = {:OPERATOR_OR => [val[0], val[2]]} } | expression OPERATOR_AND expression { result = {:OPERATOR_AND => [val[0], val[2]]} } | OPERATOR_NOT expression { result = {:OPERATOR_NOT => val[1]} } | L_BRACKET expression R_BRACKET { result = val[1] } | expression expression { result = {:OPERATOR_OR => [val[0], val[1]]} } end ---- header require_relative 'lexer' ---- inner def parse(input) scan_str(input) end