如何判断 ANTLR4 解析器是否消耗了 TokenStream 的所有标记?
How to tell if ANTLR4 parser consumed all tokens of the TokenStream?
我有以下 ANTLR4 语法定义。请注意,规则 "query" 以可选子规则 "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 orders LIMIT 30" 没有任何错误,标记 "LIMIT 30" 被静默忽略。
但是我想检测并报告此类信息,以便用户可以将他们的输入修改为绝对正确的。
使用内置 EOF
令牌锚定 query
规则:
query: 'IDX.SELECT' indexName orderLimit? EOF;
强制解析器使用整个令牌流。
我有以下 ANTLR4 语法定义。请注意,规则 "query" 以可选子规则 "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 orders LIMIT 30" 没有任何错误,标记 "LIMIT 30" 被静默忽略。
但是我想检测并报告此类信息,以便用户可以将他们的输入修改为绝对正确的。
使用内置 EOF
令牌锚定 query
规则:
query: 'IDX.SELECT' indexName orderLimit? EOF;
强制解析器使用整个令牌流。