我遵循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”。
但是,我想检测并报告此类信息,以便用户可以将其输入修改为绝对正确的输入。
答案 0 :(得分:3)
使用内置query
令牌锚定EOF
规则:
query: 'IDX.SELECT' indexName orderLimit? EOF;
强制解析器使用整个令牌流。