2

给定语法

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
>

这里出了什么问题?

4

1 回答 1

6

当您'\n'在语法规则中使用时,您匹配的不是backslash+n换行符而是换行符。看起来您的输入不包含换行符,而是backslash+n's.

因此,我的猜测是您需要将test规则更改为:

test    
  : 'test' ID '\\n' 'begin' '\\n'  'end' '\\n'
  ;

导致解析树:

替代文字

或保留您的test规则但将您的输入更改为:

test blah
begin
end

导致解析树:

替代文字

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

于 2010-12-22T08:56:06.220 回答