我的.g4文件中有以下代码。为什么在为频道分配标记时出现错误?
@lexer::members{
public static final int WHITESPACE = 1;
public static final int COMMENTS = 2;
}
WS : (' '|'\t'|'\f')+ -> channel(WHITESPACE)
;
COMMENT
: '//' ~('\n'|'\r')* -> channel(COMMENTS)
;
LINE_COMMENT
: '/*' .*? '*/' NEWLINE? -> channel(WHITESPACE)
;
我发现了以下错误:
警告(155):Shiro.g4:239:34:规则 'WS' 包含具有一个无法识别的恒定值的词法分析器命令;词法解释器可能产生不正确的输出
警告(155):Shiro.g4:243:38:规则'COMMENT'包含具有无法识别的常量值的词法分析命令;词法分析器可能产生不正确的输出
警告(155):Shiro.g4:247:42:规则'LINE_COMMENT'包含带无法识别的恒定值的词法分析命令;词法分析器可能产生不正确的输出
这是Terrence在ANTLR4书中描述的将令牌放在不同通道上的技术。为什么我会收到这些警告?我应该担心吗?
你是对的。这是我的错误。我应该叫它警告。什么是“词法解释器的输出可能与生成的词法分析器的输出不匹配”。意思? –
@ 280Z28如果我明确设置了'public static final int CUSTOM = 2;',我可以忽略这个警告吗? – petrbel
@petrbel不,在这种情况下,ANTLR代码生成器在代码生成时仍然不知道常量的值,这意味着警告仍然有效。当前抑制警告的唯一方法是在名为'CUSTOM'的词法分析器中定义一个标记(在'tokens {}'块中)或一个模式。在这些情况下,您无法控制分配给该常量的数字值。 –