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 供解析器使用,并继续匹配输入流)。
要修复,请确保“.”将由词法分析器规则匹配。
我有一个简单的规则:
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 供解析器使用,并继续匹配输入流)。
要修复,请确保“.”将由词法分析器规则匹配。