2016-10-13 73 views
0

时,我有一个简单的规则,像这样:ANTLR - 句点字符不匹配匹配 “任何东西”

ifClause: 'if' '(' condition ')' '{' (structField)+ '}' ; 
condition: .*?; 

这适用于解析:

if (abc == def) { 
    <something> 
} 

但在错误的:

if (abc.xyz == def) { 
    <something> 
} 

与错误:

line NN:MM token recognition error at: '.' 

匹配时.*?

I am using Antlr 4.5.3 and Python output.

回答

1

首先为什么它不消耗字符'.',解析器规则

condition: .*?; 

消耗词法分析器,而不是原始字符生成令牌。其次,词法分析器会产生'token recognition'错误,因为在这里,一个字符不能被词法分析器规则匹配(默认情况下,词法分析器会跳过一个无法识别的字符,产生错误并且没有相应的标记解析器使用,并继续匹配输入流)。

要修复,请确保'。'将通过词法分析规则进行匹配。

+0

我将“条件”更改为“COND:。*?”,现在我遇到了与模糊不同的问题,这些问题与问题无关。谢谢! – shikhanshu

相关问题