3

我发现只有一次尝试创建这样的编译器 - http://sourceforge.net/projects/xsltc/。但是这个项目已经死了十年了。还有其他例子吗?开源还是商业?

构建此类软件是否存在任何基本的技术难题?使用原生编译 XSLT 的整个方法?

我想使用它有很好的用例——我们不需要更改 XSLT 但仍希望获得更高性能(可能还有更低的内存要求)的地方。

这个软件可能没有看起来那么高效,还有其他原因吗?- 解释 XSLT 处理器是否与编译时一样高效?

4

3 回答 3

2

据我了解,XSLT 不再流行了。通常,使用您最喜欢的 XML 库作为您选择的语言、解析您的 XML 数据并编写代码以按照您想要的方式格式化输出会更容易、更强大。

另一方面,您似乎已经取得了一些成功。在某些情况下它很有用。查看这个 SO question以了解有关 XSLT 优缺点的更多详细信息。

无论如何,软件开发人员一般都不是 XSLT 的忠实拥护者,这可以解释为什么在 C++ 中编写优化的 XSLT 解析器没有大动作。

于 2010-02-23T13:33:21.303 回答
2

Michael Kay 博士刚刚宣布了 Saxon/C http://www.saxonica.com/saxon-c/index.xml

从产品主页:

Saxon/C 是 Saxon-HE 在 C/C++ 编程平台上的 alpha 版本。目前提供的 API 用于从 C/C++ 或 PHP 应用程序运行 XSLT 2.0。

执照

该产品是开源的。主要许可证是 Mozilla 公共许可证 2.0 版。在大多数情况下,源文件被标记为“与二级许可证不兼容”,这意味着该代码不能与根据 GPL 许可证发布的代码相结合(原因是难以联系所有过去的贡献者以获得他们的同意.)

某些组件在 Apache 2.0 版许可或 BSD 样式许可下获得许可。有关许可的更多信息,请参阅许可

下载

请单击下面的链接下载 Saxon-C 安装程序。

libsaxon-HEC-setup.zip (30 MB)

于 2013-11-28T21:41:30.133 回答
0

XSLT 是一种带有一些模式匹配的函数式语言。

可以说,您可以将其编译为一组模式导向的规则,使用元匹配确保所有瞬间适用的模式都得到有效处理。

编译模式导向的规则语言很好理解;参见 80 年代初 Charles Forty 的 Rete 网络以及过去 20 年的衍生产品。

因此,如果有人想这样做,他们可以。经济刺激在哪里?

如果您确实想要这样做,那么您需要一个可以将 XSLT 作为一组模式进行处理的工具,而不是使用 XML 处理器将其视为看起来不正确的 XML 文档。并且您希望能够操作/组合模式并生成目标机器代码。您需要一个旨在操纵符号结构的工具。

LISP 会很好,但在解析 XML 时不是特别好(可以用汗水修复),并且不是特别擅长处理生成的 C++ 代码(只能用大量汗水修复,所以不太可能)。

我们的DMS Software Reengineering Toolkit是一个系统,旨在将正式文档视为部分,其方式与编译器将源代码视为一组语言结构的方式基本相同。它具有 XML 解析器,可以部分、组合地操作 C++ 代码片段,并且可以通过应用 C++ 优化源到源程序转换规则来优化结果。(大量的汗水已经投入到 C++ 操作中)。

我们使用 DMS 完成了模式导向的规则编译器,不是针对 XSLT,而是通过元匹配模式和跟踪诱导变化的状态来编译那些源到源程序转换规则。你会得到可以实现翻译的非常大的自动机(有点像 LR 解析表变大的方式)。

不过,还没有为 XSLT 做过这个。

于 2010-02-24T00:08:08.310 回答