2

我是 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 来引用以前匹配的标记吗?(如在正则表达式中)。在这种情况下,通过前一个匹配的开始标签来决定结束标签中的标签名。谢谢大家的回复!

4

1 回答 1

1

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

我没有改变你的语法或输入,这是解释器产生的:

在此处输入图像描述

调试器产生了这个:

在此处输入图像描述

于 2012-11-01T07:25:30.690 回答