我的.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书中描述的技术,用于将令牌放在不同的通道上。为什么我会收到这些警告?我应该担心吗?
答案 0 :(得分:3)
您没有收到错误;这是一个警告。特别是,它是UNKNOWN_LEXER_CONSTANT
警告,这是ANTLR 4.2的新内容。
编译器警告155。
规则' 规则'包含带有无法识别的常量值的词法分析器命令;词法分析器可能会产生错误的输出
词法分析器规则包含标准词法分析器命令,但该命令的常量值参数是无法识别的字符串。因此,lexer命令将被转换为自定义词法分析器操作,从而阻止命令在某些解释模式下执行。词法分析器的输出可能与生成的词法分析器的输出不匹配。
以下规则会产生此警告。
@members { public static final int CUSTOM = HIDDEN + 1; } X : 'foo' -> channel(HIDDEN); // ok Y : 'bar' -> channel(CUSTOM); // warning 155