如何修复警告:解析器规则中的隐式标记定义

时间:2017-11-17 20:03:24

标签: antlr4 antlrworks

我将我的Antlr4语法简化为:

grammar test;

many:
    ('[' INT ']')*;
INT: '-'? '0'..'9'+;

在ANTLRWorks 2.1中,它给了我关于' ['和']'

 Implicit token definition in parser rule

为什么他们是警告?

我不应该在解析器规则中使用直接字符或字符串吗?

2 个答案:

答案 0 :(得分:2)

隐式标记引用是解析器规则中的字符串文字,其中包含由ANTLR4隐式创建的词法分析器标记。这是一种不好的做法,在使用隐式令牌时会导致意想不到的结果(并且它们仍被允许的唯一原因可能是非常简单的情况下的便利)。因此,我建议您在词法分析器规则中明确定义您的令牌。这不仅避免了隐含令牌的陷阱,而且还允许您提供令牌代号(规则名称),而不必使用通用名称(由ANTLR4生成)。

答案 1 :(得分:1)

您应该创建令牌:

LBRACK:'[';
RBRACK:']';

并替换每个']'和'['。这是因为'['可能最终被识别为字符串文字,并且匹配某种字符串*搜索,当它实际上是一个特殊符号时。