ANTLR检查匹配的XML开始和结束标记

时间:2016-11-21 20:58:58

标签: parsing antlr antlr4

使用ANTLR解析XML时,ANTLR可以验证结束标记是否与其开始标记匹配? ANTLR书中的XML解析器不会检查这一点。

2 个答案:

答案 0 :(得分:1)

对于任意XML标记,无上下文解析器无法执行此操作。处于纯态的ANTLR基本上没有上下文。

您可以破解大多数解析器(可能包括ANTLR)来构建标记堆栈。当<tagname...被解析(或者你觉得方便的时候),你可以在堆栈上推送标签名称。解析/ lexed </tagname...时,您可以将标记名与堆栈顶部匹配,并在发生不匹配时进行投诉。

我在我的XML解析器中使用了lexer版本(参见bio),似乎工作得很好。

答案 1 :(得分:1)

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

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

如果标记部分不匹配,您将使用验证谓词来使整个规则失败。可能会为您提供错误报告方面的问题,但这可以解决。