我正在研究一种新语言,在编写语法时,我希望能够测试语法的完整性,冲突和类似性。我并不是真正关心底层解析器的生成器(但是,一个适合.NET的人)

因此,简单的功能列表将是:

  • 文本编辑器构建功能
  • 语法/半出错误报告
  • 冲突报告
  • 语法测试功能(即在预期语法中写代码的窗口以验证语法定义的正确性)

一个名为“讽刺”的Codeplex项目确实对我的要求有一些Simlar,但不支持将语法写为BNF。

有帮助吗?

解决方案

我会推荐的 antlr 作为解析器。这是非常完整的功能,并支持C#以及许多其他目标语言。

对于IDE,有一个eclipse的插件称为 antlr id 和一个独立的IDE称为 Antlrworks, ,两者都很好。

但是请注意,ANTLR使用LL(*)算法而不是LR(k)算法。尽管如此,它还是非常好的,而Antlrworks可以完成大部分必要的左侧保理。

其他提示

当“使用新语言”并试图正确获得参考BNF时,您可能不想将参考语法偏向任何特定的解析器生成器。为野牛(LALR(1))或antlr(ll*)编写测试语法的麻烦之一是您就是这样做的。您也不想以“如何使BNF规则编码为单位进行解析”,这大概是因为您有兴趣从事语法工作,而不是在Parser Generator上工作。

因此,我建议使用完整的上下文免费解析器生成器。这将使您以最自然的形式写出语法。这可能意味着放弃“文本编辑器”,“编辑器测试窗口”,...但是根据我的经验(检查我的堆栈溢出生物),使用上下文免费解析器生成器完全压倒了这些味道。编辑 - 赛车并不需要很多努力。

我了解Bison有一个GLR选项,它将提供无上下文的解析器生成,并且是开源的,因此它可以仅用于测试语法。

我们的 DMS软件重新设计工具包 是商业并且还提供了一个GLR解析器,该解析器已用于在许多方言以及更现代的语言中实现约30多个完整的Langauges,包括C,C ++和Cobol,例如Python,Ruby,PHP,...

DMS和野牛之间的区别在于,DMS旨在支持完整语言分析仪/翻译器的构建的各个方面(Unicode Lexing,GLR解析以及错误报告和恢复,自动树构建,符号表构建,控制和数据流量分析,转换,漂亮的印刷,...)。如果您想认真评估自己的“新Langauge”,最终您需要做所有这些事情,而野牛只是这条路迈出的一步。 DMS将全力以赴。

可能会发现此工具有用: 黄金解析器构建器

不幸的是,它仅是窗口。

看看可以生成工作代码的BNFC,并从labed bnf生成工作代码,以获取许多目标语言,例如:Haskell,Ocaml,C,C,C ++和Java。您将获得漂亮的打印机,抽象的语法检查器/打印机,您自己的编译器或解释器的骨架代码以及后录语言文档。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top