跨平台解析器开发 - 有哪些选择?

时间:2013-06-29 17:26:13

标签: parsing cross-platform

我目前正在开发一个项目,该项目使用简单context-free grammar的自定义语言。

由于项目的特点,必须在多个平台上使用相同的语言,尤其是移动平台。目前,我正在使用我的小手写 Java 解析器(适用于Android平台)。很快,我必须为 JavaScript 编写基本相同的解析器,稍后也可能编写 C#(Windows Phone)和 Objective C (iOS) )。还有一个机会,我还必须为 PHP 编写它。


我的问题是:有哪些选项可以简化解析器开发过程?我是否真的必须为每个平台编写基本相同的解析器,或者工作密集程度较低?


从开发过程的角度来看,最好的选择将使我能够编写一个语法定义,然后自动编译成一个解析器。

然而,基本上我到目前为止发现的唯一的跨平台解析器生成器GOLD Parser支持我的两个目标平台(Java和C#)。如果你能指出我的其他选择,那真是太棒了。

如果您不了解其他跨平台编译器编译器:您是否有提示如何构建未来语言可扩展性的代码?

3 个答案:

答案 0 :(得分:3)

我建议您注意https://en.wikipedia.org/wiki/Comparison_of_parser_generators:如果我们将域限制为Java和C / C ++,它会将APG,GOLD,SableCC和SLK(以及其他)建议为跨语言,足以实现您的既定目标。 (我还要求将动作代码与语法分开而不是内联,因为后者会破坏目的。)如果你也需要JavaScript,看起来你的选择是APG(GPL许可) )和WaxEye(麻省理工学院授权)。

如果您的语言相当简单,那么我会说,只要您认为最容易融入您的构建环境中,并与您的思维方式完全匹配。除非解析时间是应用程序总工作量的很大一部分,否则解析速度不应成为问题 - 尽管表大小和内存使用情况在移动环境中可能很重要。如果你的语法“足够简单”(例如,不是Perl),我希望这些工具能够正常工作。

答案 1 :(得分:2)

看看Antlr,我正在使用它来转换java代码,它真的很棒。此外,您可以找到不同的语法here

答案 2 :(得分:1)

REx parser generator支持所需的目标,但Objective C和PHP除外(可能是代码生成器)。它尚未作为开源发布,并且没有合适的文档,只是示例语法。但有些项目正在成功使用它,例如xqlintHere是一篇描述该项目经验的论文。