代码之家  ›  专栏  ›  技术社区  ›  Rune FS

任何具有测试功能的BNF IDE

  •  11
  • Rune FS  · 技术社区  · 16 年前

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

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

    • 文本编辑器生成功能
    • 语法/语义错误报告
    • 冲突报告
    • 语法测试功能(即 按预期语法编写代码 以验证 语法定义)

    一个叫做Irony的codeplex项目确实有一些与我所要求的类似的东西,但是不支持将语法作为bnf来编写,这是必需的。

    4 回复  |  直到 12 年前
        1
  •  7
  •   Kaleb Pederson    16 年前

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

    对于IDES,有一个Eclipse插件叫做 ANTLR IDE 一个独立的IDE ANTLRWorks 两种方法都很有效。

    但是,请注意,antlr使用的是ll(*)算法而不是lr(k)算法。尽管如此,这是非常好的和AntlWorks可以做大部分必要的左因子分解。

        2
  •  5
  •   Ira Baxter    12 年前

    当“使用一种新语言”并试图正确地获取一个引用BNF时,您可能不希望将引用语法偏向于任何特定的解析器生成器。为bison(lalr(1))或antlr(ll*)编写测试语法有一个问题,那就是您要做到这一点。您也不想被挂在“我如何以使BNF规则真正解析的方式对其进行编码”上,这大概是因为您对语法感兴趣,而不是对解析器生成器感兴趣。

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

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

    我们的 DMS Software Reengineering Toolkit 是商业化的,并且还提供了一个GLR解析器,它已经被用于实现一些30个+完整的语言,包括C、C++、COBOL等多种方言,以及更现代的语言,如Python、Ruby、PHP、……。

    DMS和BISON的区别在于,DMS的设计支持全语言分析器/转换器构造的各个方面(Unicode词法分析、带错误报告和恢复的GLR解析、自动树构造、符号表构造、控制和数据流分析、转换、预打印…)。如果你想认真地评价你的“新朗格”,你最终需要做所有这些事情,而野牛只是这条路的一小步。DMS将带你走完全程。

        3
  •  1
  •   Andrey Belyak    13 年前

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

    不幸的是,它只是一个窗口。

        4
  •  0
  •   Tom Young    16 年前

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

    推荐文章