3

我目前正在开展一个项目,该项目使用具有简单上下文无关语法的自定义语言。

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


我的问题是:有哪些选项可以简化解析器开发过程?我真的必须为每个平台编写基本相同的解析器还是有一种工作强度较低的方法?


从开发过程的角度来看,最好的选择是让我编写一个语法定义,然后自动编译到解析器中。

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

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

4

3 回答 3

3

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

如果您的语言相当简单,那么我会说只使用您认为最容易集成到您的构建环境中并且与您的想法有合理匹配的任何一种。除非解析时间占应用程序总工作量的很大一部分,否则解析速度应该不是问题——尽管表大小和内存使用在移动环境中可能很重要。如果您的语法“足够简单”(例如,不是 Perl),我希望这些工具中的任何一个都可以工作。

于 2013-07-22T02:47:02.373 回答
2

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

于 2013-07-16T01:46:43.330 回答
1

REx 解析器生成器支持所需的目标,Objective C 和 PHP 除外(这些目标的代码生成器可能是可能的)。不过,它还没有作为开源发布,也没有像样的文档,只有示例语法。但是有些项目正在成功使用它,例如xqlint是一篇描述该项目经验的论文。

于 2013-07-22T10:59:13.210 回答