2017-06-28 2 views
1

次のANTLR4文法定義があります。そのルール「クエリ」は、オプションのサブ規則「orderLimit」で終わる注意:ANTLR4パーサーがTokenStreamのすべてのトークンを消費したかどうかを確認する方法は?

query: 'IDX.SELECT' indexName orderLimit?; 
indexName: IDENTIFIER; 
orderLimit: 'ORDERBY' order ('LIMIT' limit)?; 
order: property; 
property: IDENTIFIER; 
limit: INT; 
INT: '0' | [1-9] [0-9]*; 
IDENTIFIER: [a-zA-Z_]([a-zA-Z0-9_])*; 

生成されたパーサは、入力テキスト黙って無視トークン「LIMIT 30」で、エラーなし「IDX.SELECTの注文は30 LIMIT」を受け入れます。

しかし、私はそのような情報を検出して報告して、ユーザーが入力を絶対的に正しいものに修正できるようにしたいと考えています。

答えて

2

アンカーにqueryルール内蔵EOFトークン:

query: 'IDX.SELECT' indexName orderLimit? EOF; 

全体トークンストリームを消費するパーサーを強制します。

関連する問題