2016-08-08 9 views
0

私はhere- 私はthis-ANTLRエラー "入力にノー実行可能な代替案"

のように入力を渡すと、基本的にはgrammar-

grammar Simpleql; 

statement : expr command* ; 
expr : expr ('AND' | 'OR' | 'NOT') expr # expopexp 
| expr expr # expexp 
| predicate # predicexpr 
| text # textexpr 
| '(' expr ')' # exprgroup 
; 
predicate : text ('=' | '!=' | '>=' | '<=' | '>' | '<') text ; 
command : '| show' text* # showcmd 
| '| show' text (',' text)* # showcsv 
; 
text : NUMBER # numbertxt 
| QTEXT # quotedtxt 
| UQTEXT # unquotedtxt 
; 

AND : 'AND' ; 
OR : 'OR' ; 
NOT : 'NOT' ; 
EQUALS : '=' ; 
NOTEQUALS : '!=' ; 
GREQUALS : '>=' ; 
LSEQUALS : '<=' ; 
GREATERTHAN : '>' ; 
LESSTHAN : '<' ; 

NUMBER : DIGIT+ 
| DIGIT+ '.' DIGIT+ 
| '.' DIGIT+ 
; 
QTEXT : '"' (ESC|.)*? '"' ; 
UQTEXT : ~[()=,<>!\r\n]+ ; 

fragment 
DIGIT : [0-9] ; 
fragment 
ESC : '\\"' | '\\\\' ; 

WS : [ \t\r\n]+ -> skip ; 

を以下ましたhttps://datapsyche.wordpress.com/2014/10/23/back-to-learning-grammar-with-antlr/

与えられた例を、以下のよ

Abishek AND (country=India OR city=NY) LOGIN 404 | show name city 

エラーが発生する - line 1:65 no viable alternative at input '<EOF>'

私はエラーに関連した2件のSOの投稿に行きましたが、文法に何が間違っているのか分からないようです。

+1

トークンストリームをダンプすると、あなたが期待する内容で 'UQTEXT'トークンを持つのですか?他のトークンも同様ですか? – GRosenberg

答えて

0

私はあなたの例を実行しようとしたが、しかし、私は次の出力を取得した試験リグでエラーなしでそれを実行することができたantlrworks 2にエラーの数を投げた:

(statement (expr (expr (expr (text Abishek)) AND (expr ((expr (expr (predicate (text country) = (text India))) OR (expr (predicate (text city) = (text NY))))))) (expr (expr (text LOGIN)) (expr (text 404)))) (command | show (text name) (text city))) 

と同じ出力ウェブサイトに表示されているツリーの

あなたの実際の入力は私の意見であり、過去にANTLRがascii/ansi/utf-8などのようにエンコードされていない場合や、使っている。私はLinuxのテキストエディタからlinuxにファイルを保存し、同じ生成されたパーサを持つウィンドウでファイルを実行しようとしたときにこれが発生しました。だから私の推薦はあなたのテキスト入力を再保存しようとすることです - 'Abishek AND(country = India or city = NY)LOGIN 404 | show name city 'を作成し、これが原因であるたびにエンコーディングが異なることを確認してください。

注また、このまたは類似の方法のようにエンコーディングを指定することができますエンコーディングエラーを有することが発見されていない試合で試してみて、エンコーディングの無関係な解析および結果になります

CharStream charStream = new ANTLRInputStream(inputStream, "UTF-8"); 

ので。

いくつかの方法でコードを保存した後に動作するかどうかを教えてください。私はさらにお手伝いします。お役に立てれば。

関連する問題