ANTLR - 匹配"任何"时不匹配的句点字符

时间:2016-10-13 21:47:55

标签: antlr4 ebnf

我有一个简单的规则:

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

这适用于解析:

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

但是出错了:

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

错误:

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

为什么匹配'.'

时不会消耗.*?个字符
  

我正在使用Antlr 4.5.3和Python输出。

1 个答案:

答案 0 :(得分:1)

首先是解析器规则

condition: .*?;

消耗词法分析器产生的令牌,而不是原始字符。

其次,词法分析器会产生'令牌识别'错误,因为这里的词法无法与词法分析器规则匹配(默认情况下,词法分析器会跳过无法识别的字符,产生错误并且没有相应的令牌供使用由解析器,并继续匹配输入流)。

要修复,请确保'。'将与词法分析器匹配。