ANTLR检查是否匹配XML启动和结束标签



当使用antlr解析XML时,antlr可以验证结束标签与其起点标签匹配吗?ANTLR书中的XML解析器未检查。

我可以想象这样的通用方法(但我自己从未真正尝试过):

tag: openTag = TAG_OPEN content closeTag = TAG_CLOSE { tagsMatch($openTag, $closeTag); }?;

如果标签零件不匹配,您将使用验证谓词使整个规则失败。可能会给您带来错误报告的问题,但可以解决。

对于任意XML标签,上下文免费解析器无法执行此操作。纯状态的antlr本质上是不含上下文的。

您可以破解大多数解析器(可能包括ANTLR)来构建标签堆栈。当<tagname...被解析时(或者找到方便),您可以在堆栈上按标签名称。解析</tagname...时,您可以将标签名与堆栈顶部匹配,并在发生不匹配时抱怨。

我在XML解析器中使用了Lexer版本(请参见Bio),似乎很好地工作。

相关内容

  • 没有找到相关文章

最新更新