Files
old-gem/lib/grammar.y
2020-02-07 16:09:57 +01:00

28 lines
1.3 KiB
Plaintext

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