如何解决ANTLR不匹配输入的问题

时间:2010-12-22 03:02:05

标签: antlr antlr3

给出语法

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
>

这里出了什么问题?

1 个答案:

答案 0 :(得分:6)

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

所以,我猜您需要将test规则更改为:

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

导致解析树:

alt text

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

test blah
begin
end

导致解析树:

alt text

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