ANTLR - 匹配 "anything" 时句点字符不匹配

ANTLR - Period character not matched when matching "anything"

我有一个简单的规则:

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.

首先,解析器规则

condition: .*?;

使用词法分析器生成的标记,而不是原始字符。

其次,'token recognition' 当一个字符不能被词法分析器规则匹配时,词法分析器会产生 'token recognition' 错误(默认情况下,词法分析器将跳过无法识别的字符,产生错误并且没有相应的token 供解析器使用,并继续匹配输入流)。

要修复,请确保“.”将由词法分析器规则匹配。