2017-06-28 23 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_])*; 

生成的解析器接受輸入文本「IDX.SELECT訂單LIMIT 30」沒有任何錯誤,與令牌「LIMIT 30」忽略。

但是我想檢測並報告這樣的信息,以便用戶可以修改他們的輸入爲絕對正確的。

回答

2

query規則與內置EOF令牌:

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

迫使解析器消耗整個令牌流。

相關問題