给出语法
test : 'test' ID '\n' 'begin' '\n' 'end' '\n' -> ^(TEST ID);
ID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*
;
和
的测试字符串"test blah\n begin\n end\n"
导致
line 1:0 mismatched input 'test blah\\n begin\\n end\\n' expecting 'test'
<mismatched token: [@0,0:21='test blah\\n begin\\n end\\n',<12>,1:0], resync=test blah
begin
end
>
这里出了什么问题?
答案 0 :(得分:6)
在语法规则中使用'\n'
时,您不匹配backslash+n
,而是匹配换行符。看起来您的输入不包含换行符backslash+n
。
所以,我猜您需要将test
规则更改为:
test
: 'test' ID '\\n' 'begin' '\\n' 'end' '\\n'
;
导致解析树:
或将您的test
规则保留为,但将输入更改为:
test blah
begin
end
导致解析树:
如果情况并非如此,您是否可以发布SSCCE:我(或其他人可以运行)的小型完整工作演示,显示此错误?