我有词法分析器模式MESSAGESIZE_MODE,可以匹配“ 10 MB”类型的文件大小。我想将此令牌作为FILESIZE转发(在默认模式下),因此我可以在访问者中识别此值,因此知道我正在处理文件大小字符串。这在下面是可行的,但是我需要定义一个虚拟词法分析器规则FILESIZE,该规则在默认模式下不匹配任何内容。这是解决此问题的正确方法吗?如果是,如何定义不匹配的词法分析器规则?
df[:, Symbol.(vcat('A':'D', 'P':'Z'))]
答案 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
}