.net 任何具有测试功能的BNF IDE

.net 任何具有测试功能的BNF IDE,.net,language-design,bnf,parser-generator,.net,Language Design,Bnf,Parser Generator,我正在研究一种新的语言,在写语法的同时,我希望能够测试语法的完整性、冲突性和相似性。我并不真正关心底层语法分析器生成器(但对于.NET来说更可取) 因此,简而言之,功能列表是: 文本编辑器构建功能 语法/语义错误报告 冲突报告 语法测试功能(即 使用预期语法编写代码 验证 语法定义) 一个名为Irony的CodePlex项目确实有一些类似于我所要求的东西,但不支持将语法编写为所需的BNF。我建议将其作为解析器生成器。它的功能非常完整,支持C#以及许多其他目标语言 对于IDE,有一个Eclip

我正在研究一种新的语言,在写语法的同时,我希望能够测试语法的完整性、冲突性和相似性。我并不真正关心底层语法分析器生成器(但对于.NET来说更可取)

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

  • 文本编辑器构建功能
  • 语法/语义错误报告
  • 冲突报告
  • 语法测试功能(即 使用预期语法编写代码 验证 语法定义)
一个名为Irony的CodePlex项目确实有一些类似于我所要求的东西,但不支持将语法编写为所需的BNF。

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

对于IDE,有一个Eclipse插件和一个独立的IDE,两者都很好地工作

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

当“使用新语言”并试图获得正确的引用BNF时,您可能不希望将引用语法偏向于任何特定的解析器生成器。为Bison(LALR(1))或ANTLR(LL*)编写测试语法的一个麻烦就是您正是这样做的。您也不想被“如何以实际解析的方式编写BNF规则”所困扰,这大概是因为您对语法感兴趣,而不是对解析器生成器感兴趣

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

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

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


DMS和Bison之间的区别在于,DMS设计用于支持全语言分析器/转换器构造的所有方面(Unicode词法分析、GLR解析和错误报告与恢复、自动树构造、符号表构造、控制和数据流分析、转换、预打印等)。如果你想认真评估你的“新语言”,你最终需要做所有这些事情,而野牛只是这条道路上的一小步。DMS将为您提供整个路径。

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

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


不幸的是,它仅适用于windows。

相关:一个非常有用的答案,谢谢。我的最终目标是开发一个特定的解析器生成器(fsyacc)。我自己设定的任务的一部分是学习F#,由于我必须编写一个编译器,我认为这将是学习函数式语言的完美项目(尽管严格说来F#是多范式而不仅仅是函数式的),所以我真的很期待做DMS提供的东西。fsyacc ius LALR(1)因此ANTLRworks最终帮助不大,但自动完成等仍然使其比简单的文本编辑器更快