使用XML的EBNF实现XML转换器

我正在考虑使用编译器生成器实现XML转换器的想法,该生成器基于W3C的XML 1.1规范,其中包括完整的EBNF语法。 更准确地说,我打算使用Qi-YACC,因为我想学习这个工具。这是我第一次尝试使用任何编译器编译器。 我计划实现的第一种翻译非常简单:XML到S-EXPR。之后,我计划推广我的翻译,但这不是我的问题。 您是否预计此类项目会出现任何重大缺陷?我读过使用EBNF翻译XML是一个坏主意。我想知道为什么。而且它不像Qi语言已经有了一个XML解析器,所以我绝对不想在这里重新发明轮子。     
已邀请:
我现在不知道解析XML需要上下文的原因。 但是QiYacc可以使用全局变量来利用上下文。它会更清洁 如果你可以在解析器中传递状态,例如或类似的东西。 这不是齐,但我打算为沉实现这样的功能。 所以可以做到。 /斯特凡     
我对QiYACC一无所知,但是将XML的EBNF转换为递归下降(RD)解析器或多或少是直截了当的。需要记住的是,有些地方对语法进行一些小的调整会对解析器产生很大的性能影响。这是因为语法写得简洁明了,而不是试图避免追逐规则。 我在C ++中做了类似的事情,将XML的语法写成一组类型。您可以在Code Project上看到我在其上写的文章。相同的基本原则可以应用于任何语言。 我还建议你看看PEG语法。它们通过允许您引入零宽度断言来扩展EBNF,并且是扩展解析器的EBNF语法的好方法。     

要回复问题请先登录注册