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

时间:2016-04-14 02:56:02

标签: parsing c#-4.0 antlr3

我有一个要求,其中我已将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令牌。 请帮助。 注意:由于某些限制,我无法为其创建解析器规则 以上情况。

1 个答案:

答案 0 :(得分:1)

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

ANY: .*?;

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