我正在尝试在 EBNF 中编写语法(除非有很好的理由,它必须是 EBNF)并且正在为它寻找一些实用程序 - 如果有一个可以制作的 GUI 界面,那就太好了,但是我最想找的是可以检查语法的东西,例如看它是否是 LALR( n ),如果是,n的值是多少。是否存在这样的实用程序?还有其他我应该知道的有用的语法编写工具吗(我不是在寻找解析器生成器)。
5 回答
使用TinyPG!它是一个具有轻量级 GUI 的令人惊叹的一体化编译器编译器,您可以在其中使用RegEx、EBNF构建解析器,并编写C#/VB代码来使用解析树做一些事情!
这是我之前所做的简短且内容丰富的摘要,它还将您链接到下载。
我对 TinyPG 的理解:
TinyPG允许您编写和开发:
它有一个内置的 IDE,仅限 Windows (在 C#.NET 中创建,开源)。
它允许您使用内置的RegEx 工具试用和预览正则表达式。.NET 支持 RegEx 语法,这意味着即使您输出的解析器代码也使用 .NET 的正则表达式。
您编写 EBNF 来描述您选择的语言 (这里有一些免费提供的BNF 语法描述现代编程语言(C、Java、JavaScript、C#、VB.NET、SQL-89)
使用 TinyPG,您的RegEx和您的EBNF会输出一个解析树 (参见此图)。
现在你用解析树做什么?你为你的编译器/解释器/翻译器编写C#/VB 代码 (在 TinyPG 中,根据 BNF 语法规则) 。(在 TinyPG 中,打开提供的示例中的“simple expression2.tpg”文件以查看计算器“编译器”的演示)
TinyPG 允许您在 TinyPG IDE 中编译和测试您的标记器+解析器+编译器,并最终以 C#.NET 或 VB.NET (您的选择)输出解析器源代码,并带有现成的类。
适合大众的优秀多合一编译器编译器。享受!
PS:如果我在这方面有任何错误,请纠正我。
将 Steven Dee 的建议更进一步,您可能想要查看ANTLRWorks,这是一个用于 ANTLR 语法的交互式 GUI 开发工具。
要检查语法是否允许某种解析器算法,只需将其放入解析器生成器即可。在 LALR(1) 的情况下,将语法传递给 YACC 以查看它是否检测到冲突。
列表中缺少CoCo/R C#。它使用简单,用途广泛,特别有用,具有适用于多种语言的代码生成器
Coco/R for C#, Java, C++, F#, VB.Net, Oberon, 其他语言
ANTLR是 Java 中的 GUI 解析器生成器,具有广泛的语法分析和分解功能。检查常见问题;它可能支持你正在寻找的东西。