我的 .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)
;
我收到以下错误:
warning(155): Shiro.g4:239:34:规则"WS"包含一个词法分析器命令,该命令具有无法识别的常量值;词法分析器解释器可能会产生不正确的输出
warning(155): Shiro.g4:243:38:规则"COMMENT"包含一个词法分析器命令,该命令具有无法识别的常量值;词法分析器解释器可能会产生不正确的输出
warning(155): Shiro.g4:247:42:规则"LINE_COMMENT"包含一个词法分析器命令,该命令具有无法识别的常量值;词法分析器解释器可能会产生不正确的输出
这是Terrence在ANTLR4书中描述的技术,将代币放在单独的通道上。为什么我会收到这些警告?我应该担心吗?
您没有收到错误;这是一个警告。特别是,它是ANTLR 4.2新增的UNKNOWN_LEXER_CONSTANT
警告。
编译器警告 155.
规则"rule"包含具有无法识别的常量值的词法分析器命令;词法分析器解释器可能会产生不正确的输出
词法分析器规则包含标准词法分析器命令,但该命令的常量值参数是无法识别的字符串。因此,词法分析器命令将被转换为自定义词法分析器操作,从而阻止命令在某些解释模式下执行。词法分析器解释器的输出可能与生成的词法分析器的输出不匹配。
以下规则将生成此警告。
@members { public static final int CUSTOM = HIDDEN + 1; } X : 'foo' -> channel(HIDDEN); // ok Y : 'bar' -> channel(CUSTOM); // warning 155