我将我的Antlr4语法简化为:
grammar test;
many:
('[' INT ']')*;
INT: '-'? '0'..'9'+;
在ANTLRWorks 2.1中,它给了我关于' ['和']'
Implicit token definition in parser rule
为什么他们是警告?
我不应该在解析器规则中使用直接字符或字符串吗?
答案 0 :(得分:2)
隐式标记引用是解析器规则中的字符串文字,其中包含由ANTLR4隐式创建的词法分析器标记。这是一种不好的做法,在使用隐式令牌时会导致意想不到的结果(并且它们仍被允许的唯一原因可能是非常简单的情况下的便利)。因此,我建议您在词法分析器规则中明确定义您的令牌。这不仅避免了隐含令牌的陷阱,而且还允许您提供令牌代号(规则名称),而不必使用通用名称(由ANTLR4生成)。
答案 1 :(得分:1)
您应该创建令牌:
LBRACK:'[';
RBRACK:']';
并替换每个']'和'['。这是因为'['可能最终被识别为字符串文字,并且匹配某种字符串*搜索,当它实际上是一个特殊符号时。