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