如何定义不匹配任何内容的ANTLR4词法分析器规则?

时间:2020-07-29 15:22:40

标签: antlr antlr4 antlr4cs

我有词法分析器模式MESSAGESIZE_MODE,可以匹配“ 10 MB”类型的文件大小。我想将此令牌作为FILESIZE转发(在默认模式下),因此我可以在访问者中识别此值,因此知道我正在处理文件大小字符串。这在下面是可行的,但是我需要定义一个虚拟词法分析器规则FILESIZE,该规则在默认模式下不匹配任何内容。这是解决此问题的正确方法吗?如果是,如何定义不匹配的词法分析器规则?

df[:, Symbol.(vcat('A':'D', 'P':'Z'))]

1 个答案:

答案 0 :(得分:1)

不,有更好的方法可以做到这一点。您可以定义一个tokens { ... }部分,以便在type(...)调用中引用它们。

在您的情况下,看起来像这样:

lexer grammar YourLexer;

tokens {
  FILESIZE
}

...

mode MESSAGESIZE_MODE;

  MESSAGESIZE_MODE_FILESIZE
   : INT WS+ (K B|M B) -> type(FILESIZE), popMode
   ;

如果要定义的虚拟令牌更多,请用逗号分隔它们:

tokens {
  FILESIZE,
  SOME_OTHER_TOKEN,
  YET_ANOTHER_TOKEN
}