11

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

因此,简而言之,功能列表将是:

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

一个名为 Irony 的 CodePlex 项目确实有一些与我所要求的类似的东西,但不支持将语法编写为所需的 BNF。

4

4 回答 4

7

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

对于 IDE,有一个名为ANTLR IDE的 Eclipse 插件和一个名为ANTLRWorks的独立 IDE ,两者都运行良好。

但是请注意,ANTLR 使用 LL(*) 算法而不是 LR(k) 算法。尽管如此,它还是非常棒的,并且 ANTLRWorks 可以完成大部分必要的左因子分解。

于 2010-01-11T22:36:23.387 回答
5

当“研究一门新语言”并试图获得正确的参考 BNF 时,您可能不希望将参考语法偏向任何特定的解析器生成器。为 Bison (LALR(1)) 或 ANTLR(LL*) 编写测试语法的麻烦之一就是你就是这样做的。您也不想纠结于“我如何以使其真正解析的方式编码 BNF 规则”,大概是因为您对处理语法感兴趣,而不是处理解析器生成器。

所以我建议使用一个完整的上下文无关解析器生成器。这将使您以最少的努力以最自然的形式编写语法。这可能意味着放弃“文本编辑器”、“编辑器测试窗口”……但根据我的经验(检查我的堆栈溢出生物),使用上下文无关的解析器生成器完全压倒了这些细节。编辑-保存-解析并不需要太多的努力。

我知道 Bison 有一个 GLR 选项,可以提供上下文无关的解析器生成,并且是开源的,所以它可能只用于测试语法。

我们的DMS Software Reengineering Toolkit是商业的,还提供了 GLR 解析器,它已被用于实现大约 30 多种完整语言,包括多种方言中的 C、C++ 和 COBOL 以及更现代的语言,如 Python、Ruby、PHP , ....

DMS 和 Bison 的区别在于 DMS 旨在支持构建完整语言分析器/翻译器的所有方面(Unicode 词法分析、带有错误报告和恢复的 GLR 解析、自动树构造、符号表构造、控制和数据流分析,转换,漂亮的打印,...)。如果你想认真评估你的“新语言”,你最终需要做所有这些事情,而 Bison 只是这条道路上的一小步。DMS 将带您一路走来。

于 2010-01-16T09:41:38.717 回答
1

也许你会发现这个工具很有用:Gold Parser Builder

不幸的是,它只是窗户。

于 2012-09-29T13:37:11.010 回答
0

看看 BNFC,它可以从标记的 BNF 生成工作代码和 makefile,用于多种目标语言,例如:Haskell、OCaml、C、C++ 和 Java。您将获得一台漂亮的打印机、抽象语法检查器/打印机、您自己的编译器或解释器的框架代码,以及 postcript 语言文档。

于 2010-01-21T02:12:45.853 回答