28 lines
1.3 KiB
Plaintext
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 |