Antlr初学者不匹配的问题

时间:2010-01-27 16:56:59

标签: antlr

我刚刚开始使用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中的结果:

我做错了什么?

2 个答案:

答案 0 :(得分:3)

你通常想告诉ANTLR用词法规则忽略空格:

WHITESPACE
    :   ( '\t' | ' ' | '\r' | '\n'| '\u000C' )+
        { $channel = HIDDEN; } ;

答案 1 :(得分:1)

我对AntLR没有太多经验,但我的猜测是词法分析器为换行符生成一个令牌,并且它与你的语法不匹配。

通常,在编写解析器时,必须明确告诉词法分析器忽略空格和行结尾。但我可能错了,这可能是AntLR应该为你做的事情。