2016-06-13 4 views
0

SQL文を解析する文法を書いています。私は以下のルールを持っています:入力に余分なトークンがあっても、ANTLR 3.5.2はルールに一致します

show_databases : 
    SHOW DATABASES { System.out.println("Showing databases");  
; 

私の入力がshow databasesのとき、私はメッセージを受け取ります。しかし、入力がshow databases nowのときは、メッセージが表示されます。私はREPLを構築しており、すべての行は;で終わります。構文が間違っているのでエラーを出したい。何か案は?

答えて

2

マッチだけでなく、入力の終わり:あなたはそれを持って

SHOW DATABASES ';' 

または

SHOW DATABASES EOF 

方法は、パーサは、後に別のステートメントの一部として「今」があることはできませんわかりません。実際には、ルールと正常に一致すると停止し、必要がない場合は次のトークンを調べません。

+0

私はちょうど質問を編集しましたが、私は一度に1行ずつ読み込み、すべての行は ';'で終わります。 –

+0

その後、 'EOF'の代わりにセミコロンもマッチします。 –

+0

それはうまくいった!どうもありがとうございました。 –

関連する問題