我有一个具有以下规则的语法 - > 动词和动词有 3 个标记值,请参阅下面的更改。如果我要读取一个包含 3 个以上动词(get、put 和 change)的文件,我希望解析器打印一条错误消息。最好将它嵌入到听众中,还是在语法内部有一种巧妙的方法?
例如,有没有办法可以计算动词内的标记值?
verb :
GET |
PUT |
CHANGE ;
如果我理解您的要求,这将限制输入不超过三个动词。它有点俗气,不能很好地扩展,但取决于你想要做什么,它可能对你有用:
grammar Verb;
verb
: option option? option? EOF
;
option
: GET
| PUT
| CHANGE
;
GET : 'get';
PUT : 'put';
CHANGE : 'change';
SPACE
: [ \t\r\n] -> skip
;
如果您想要更通用的东西,请查看这个 SO 答案:在 ANTLR 中,是否有一种快捷表示法来表示某组规则的所有排列的交替?使用谓词。不过,它是为 ANTLR 3 编写的。