add simple grammar rules and tests for simple cases
This commit is contained in:
11
grammar.y
11
grammar.y
@@ -1,8 +1,17 @@
|
|||||||
class Query
|
class Query
|
||||||
rule
|
rule
|
||||||
expression:
|
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]} }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---- header
|
||||||
|
require_relative 'lexer'
|
||||||
|
|
||||||
---- inner
|
---- inner
|
||||||
def parse(input)
|
def parse(input)
|
||||||
scan_str(input)
|
scan_str(input)
|
||||||
|
|||||||
@@ -5,5 +5,31 @@ class QueryParserTester
|
|||||||
before do
|
before do
|
||||||
@evaluator = Query.new
|
@evaluator = Query.new
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'tests query with only one search term without quotes and without column name' do
|
||||||
|
@result = @evaluator.parse('-123')
|
||||||
|
|
||||||
|
expect(@result[:DEFAULT_COLUMN]).to eq '-123'
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'tests query with only one search term with quotes and without column name' do
|
||||||
|
@result = @evaluator.parse('"OR 128"')
|
||||||
|
|
||||||
|
expect(@result[:DEFAULT_COLUMN]).to eq '"OR 128"'
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'tests query with one column and search term without quotes' do
|
||||||
|
@result = @evaluator.parse('tag:mta')
|
||||||
|
|
||||||
|
expect(@result['tag']).to eq 'mta'
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'tests query with one column and search term with quotes' do
|
||||||
|
@result = @evaluator.parse('tag:"tag 120"')
|
||||||
|
|
||||||
|
expect(@result['tag']).to eq '"tag 120"'
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user