我刚刚开始使用Antlr,所以请在这里原谅noob问题。我迷路了。任何帮助表示赞赏。
这是我的语法脚本:
grammar test;
script :
'begin script' IDENT ':'
'end script' IDENT
;
IDENT : ('a'..'z' | 'A'..'Z') ('a'..'z'|'A'..'Z'|'0'..'9')*
;
这是我试图反对的脚本:
begin script spork:
end script spork
ANTLRWorks 1.3.1中的结果:
我做错了什么?
答案 0 :(得分:3)
你通常想告诉ANTLR用词法规则忽略空格:
WHITESPACE
: ( '\t' | ' ' | '\r' | '\n'| '\u000C' )+
{ $channel = HIDDEN; } ;
答案 1 :(得分:1)
我对AntLR没有太多经验,但我的猜测是词法分析器为换行符生成一个令牌,并且它与你的语法不匹配。
通常,在编写解析器时,必须明确告诉词法分析器忽略空格和行结尾。但我可能错了,这可能是AntLR应该为你做的事情。