2
我正在創建一個簡單的布爾查詢解析器。我想在下面做這樣的事情。布爾查詢解析器中的'令牌衝突'
grammar BooleanQuery; options { language = Java; output = AST; } LPAREN : ('(') ; RPAREN : (')'); QUOTE : ('"'); AND : ('AND' | '&' | 'EN' | '+') ; OR : ('OR' | '|' | 'OF'); WS : (' ' | '\t' | '\r' | '\n') {$channel=HIDDEN;} ; WORD : (~(' ' | '\t' | '\r' | '\n' | '(' | ')' | '"'))*; MINUS : '-'; PLUS : '+'; expr : andexpr; andexpr : orexpr (AND^ orexpr)*; orexpr : part (OR^ part)*; phrase : QUOTE (options {greedy=false;} : .)* QUOTE; requiredexpr : PLUS atom; excludedexpr : MINUS atom; part : excludedexpr | requiredexpr | atom; atom : phrase | WORD | LPAREN! expr RPAREN!;
問題是MINUS和PLUS標記與AND和OR標記中的MINUS和PLUS標記發生'碰撞'。對不起,如果我不使用正確的術語。我是ANTLR的新手。
下面的示例查詢:
foo OR (pow AND -"bar with cream" AND -bar)
我都做什麼錯誤?
你能給我更多具體的指針如何解決這個問題嗎?我不知道我應該從文檔中開始尋找什麼詞組/概念。 – 2010-08-20 14:24:54
我編輯了我的答案,並添加了一個示例,我將如何更改您的定義。 – Frank 2010-08-20 14:32:17
謝謝你的幫助! – 2010-08-20 14:39:17