3

我正在考虑使用基于 W3C 的XML 1.1规范的编译器生成器来实现 XML 转换器的想法,该规范包括完整的 EBNF 语法。

更准确地说,我打算使用Qi-YACC,因为我想学习这个工具。这将是我第一次尝试使用任何编译器-编译器。

我计划实现的第一种翻译非常简单: XML 到S-EXPRs。之后,我打算概括我的翻译,但这不是我问题的重点。

您预计此类项目有什么重大缺陷吗?我读过使用它的 EBNF 翻译 XML 是一个坏主意。我想知道为什么。而且 Qi 语言并不是已经有了 XML 解析器,所以我绝对不想在这里重新发明轮子。

4

2 回答 2

3

我现在不知道解析 XML 需要上下文的原因。

但是 QiYacc 可以使用全局变量来使用上下文。如果你可以在解析器中传递一个状态S,例如或类似的东西,它会更干净。这不在 Qi 中,但我计划为 Shen 实现这样的功能。

所以可以做到。

/斯蒂芬

于 2009-09-05T09:41:10.983 回答
1

我对 QiYACC 一无所知,但是将 XML 的 EBNF 转换为递归下降 (RD) 解析器或多或少是直截了当的。只需要记住这样一个事实,即在某些地方对语法进行一些小的调整会对解析器产生很大的性能影响。这是因为语法的编写考虑到了简洁明了,而不是试图避免遵循规则。

我曾经在 C++ 中做过类似的事情,将 XML 的语法写成一组类型。你可以在Code Project上看到我写的一篇文章。相同的基本原则可以应用于任何语言。

我还建议您查看 PEG 语法。它们通过允许您引入零宽度断言来扩展 EBNF,并且是为解析器增加 EBNF 语法的好方法。

于 2009-10-15T02:55:45.400 回答