ANTLR 中是否有可用的默认令牌,以防它与任何已定义的令牌不匹配?

Is there a default token available in ANTLR in case it doesn't match any of the already defined Tokens?

我有一个要求,其中我将 Lexer 标记写为:

 IF_LEXER_TOKEN: ('I')('F') (.)* ('E')('N')('D')_('I')('F')
 ANY :(options {greedy=true;}: .)* ;

但如果输入为:

IF a>b then a=b END_IF
IF c>d then c=d

在这种情况下,预期的行为是它应该对第一行使用令牌 IF_LEXER_TOKEN,对第二行使用 ANY 令牌,而是考虑对两行使用 ANY 令牌。 请帮忙。 Note:Due 由于某些限制,我无法为 以上场景。

不,没有这样的默认令牌。但您可以轻松创建它:

ANY: .*?;

最好是使它成为非贪婪的,以允许在该输入之后匹配其他标记。顺便说一句:在词法分析器中定义一个完整的序列有几个缺点,例如如果词法分析器规则失败,错误报告不能给你一个很好的理由。您必须显式处理所有空格。而且你放弃了这样的原则,通常在标记之间有多少空格(包括换行符)并不重要。