我有一个简单的规则:
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输出。
答案 0 :(得分:1)
首先是解析器规则
condition: .*?;
消耗词法分析器产生的令牌,而不是原始字符。
其次,词法分析器会产生'令牌识别'错误,因为这里的词法无法与词法分析器规则匹配(默认情况下,词法分析器会跳过无法识别的字符,产生错误并且没有相应的令牌供使用由解析器,并继续匹配输入流)。
要修复,请确保'。'将与词法分析器匹配。