如何判断ANTLR4解析器是否消耗了TokenStream的所有令牌?

时间:2017-06-28 07:49:00

标签: parsing antlr4

我遵循ANTLR4语法定义。请注意,规则“查询”以可选的子规则“orderLimit”结束:

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”。

但是,我想检测并报告此类信息,以便用户可以将其输入修改为绝对正确的输入。

1 个答案:

答案 0 :(得分:3)

使用内置query令牌锚定EOF规则:

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

强制解析器使用整个令牌流。