为什么我在将令牌分配给通道时出现错误

  • 本文关键字:通道 错误 分配 令牌 antlr4
  • 更新时间 :
  • 英文 :


我的 .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

相关内容

  • 没有找到相关文章

最新更新