鉴于语法
test : 'test' ID '\n' 'begin' '\n' 'end' '\n' -> ^(TEST ID);
ID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*
;
Run Code Online (Sandbox Code Playgroud)
和测试字符串
"test blah\n begin\n end\n"
Run Code Online (Sandbox Code Playgroud)
导致
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
>
Run Code Online (Sandbox Code Playgroud)
这里出了什么问题?
当您'\n'在语法规则中使用时,您不匹配backslash+n新行字符.看起来你的输入不包含换行符,但是backslash+n.
所以,我猜您需要将test规则更改为:
test
: 'test' ID '\\n' 'begin' '\\n' 'end' '\\n'
;
Run Code Online (Sandbox Code Playgroud)
导致解析树:

或保留您的test规则,但将您的输入更改为:
test blah
begin
end
Run Code Online (Sandbox Code Playgroud)
导致解析树:

如果不是这样,你可以发布一个SSCCE:一个小的,完整的工作演示,我(或其他人可以运行)显示此错误?