问题 任何具有测试功能的BNF IDE


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

所以功能列表简称为:

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

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


4105
2018-01-11 22:22


起源

有关: stackoverflow.com/questions/1800199/... - dmckee


答案:


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

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

但请注意,ANTLR使用LL(*)算法而不是LR(k)算法。不过,它非常好,ANTLRWorks可以完成大部分必要的左分解。


7
2018-01-11 22:36





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

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

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

我们的 DMS软件再造工具包 是商业性的,还提供了一个GLR解析器,它已被用来实现大约30多个完整语言,包括C,C ++和COBOL等多种方言以及更现代的语言,如Python,Ruby,PHP,....

DMS和Bison之间的区别在于DMS旨在支持构建全语言分析器/翻译器的所有方面(Unicode lexing,具有错误报告和恢复的GLR解析,自动树构建,符号表构建,控制和数据流分析) ,转换,漂亮,...)。如果你想认真评估你的“新语言”,你最终需要做所有这些事情,而Bison只是沿着这条路迈出的一小步。 DMS将带您全程前进。


4
2018-01-16 09:41



一个非常翔实的答案谢谢你。我结束了针对特定解析器生成器(fsyacc)的一部分,我在我之前设置的任务是学习F#,因为我必须编写一个编译器,我认为这将是学习函数的完美项目语言(虽然f#严格来说是多范式而不仅仅是功能),所以我实际上期待着做其他人提供的东西。 fsyacc ius LALR(1)所以ANTLRworks最后只是帮助不大但是自动完成仍然比简单的文本编辑器更快 - Rune FS


可能你会发现这个工具很有用: 黄金分析器生成器 

不幸的是它只是窗户。


1
2017-09-29 13:37





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


0
2018-01-21 02:12