antlr解析xml丢失的令牌匹配或重复匹配

时间:2012-10-30 13:44:52

标签: xml antlr antlrworks

我是ANTLR的新手,并在ANTLRWorks1.4.3中尝试遵循语法。

grammar TextGra;
element :   starttag (element)* endtag
;
starttag:   '<' TAGNAME '>';
endtag  :   '</' TAGNAME '>';
TAGNAME :   ('a'..'z')|('A'..'Z')|('0'..'9');
WS  :   (' '|'\r'|'\n')+ {skip();} ;

当试图像这样解析简单的xml片段时

<a><b><c></c></b></a>

丢失了最后两个endtag元素,如何处理这种情况?或者这是错误的方式? 在我的情况下,标签名称不能被限制与其他xml解析代码比较。 或者语法可以使用$ 0来引用先前匹配的令牌?(例如在regexp中)。 在这种情况下,通过上一个匹配的启动标签确定endtag中的标记名。 谢谢大家的回复!

1 个答案:

答案 0 :(得分:1)

我猜你正在使用ANTLRWorks的解释器:不,它是错误的。始终使用ANTLRWorks中包含的调试器(按 CTRL + D 启动调试器)。

我没有改变你的语法或输入,这就是译员的作品:

enter image description here

调试器产生了这个:

enter image description here