编写antlr4语法并想计算规则内的令牌数量

时间:2013-09-16 20:12:23

标签: antlr4 bnf

我的语法符合以下规则 - >动词和动词有3个令牌值get,put change见下文。如果我要读取一个超过3个动词的文件(获取,放置和更改),我希望解析器打印错误消息。将它嵌入到监听器中是否最好还是在语法内部有一个简洁的方法吗?

有没有办法可以计算动词内的标记值?

    verb    : 
       GET    |   
       PUT    |   
       CHANGE    ;

1 个答案:

答案 0 :(得分:0)

如果我明白你要问的是什么,这将把输入限制为不超过三个动词。它有点俗气,不能很好地扩展,但取决于你想要做什么它可能对你有用:

grammar Verb;

verb
 : option option? option? EOF
 ;

option
 : GET
 | PUT
 | CHANGE
 ;

GET    : 'get';
PUT    : 'put';
CHANGE : 'change';

SPACE
 : [ \t\r\n] -> skip
 ;

如果您想要更通用的内容,请使用谓词查看此SO答案:In ANTLR, is there a shortcut notation for expressing alternation of all the permutations of some set of rules?。它是为ANTLR 3编写的。