我正在尝试在EBNF中编写语法(除非有一个很好的理由,它必须是EBNF)并且我正在为它寻找几个实用程序 - 如果有一个GUI界面可以制作一个,这将是伟大的,但我最需要的东西是可以检查语法的东西,例如看它是否是LALR( n ),如果是,那么 n <的值是什么/ em>是。这样的工具存在吗?有没有其他有用的语法编写工具我应该知道(我不是在寻找解析器生成器)。
答案 0 :(得分:9)
使用 TinyPG !它是一个令人惊叹的一体化编译器编译器,具有轻量级GUI,您可以使用 RegEx , EBNF 构建解析器,并写入 C#/ VB 代码用解析树做一些事情!
这是我之前做过的简短而翔实的摘要,它也链接到了下载。
我对TinyPG的理解:
TinyPG允许你写&amp;开发:
它有一个内置IDE,Windows Only (在C#.NET中创建,开源)。
它可以让你试试&amp;使用内置的 RegEx工具预览正则表达式。 .NET支持RegEx语法,这意味着即使输出的解析器代码也使用.NET的正则表达式
您编写EBNF来描述您选择的语言 (以下是一些免费提供的BNF Grammers that describe modern programming languages(C,Java,JavaScript,C#,VB.NET,SQL-89 )
使用TinyPG,您的 RegEx 以及 EBNF 会输出解析树 (see this diagram)。
现在你用解析树做什么?您为编译器/口译员/翻译器编写 C#/ VB代码 (在TinyPG内,根据BNF语法规则)。 (在TinyPG内部) ,在提供的示例中打开“simple expression2.tpg”文件以查看计算器'编译器'的演示)
TinyPG允许您在TinyPG IDE中编译和测试您的 tokenizer +解析器+编译器,并最终输出解析器源代码在C#.NET或VB.NET (您的选择)中,使用可立即使用的类。
为群众提供优秀的一体化编译器编译器。享受!
PS:如果我错了,请纠正我。
答案 1 :(得分:3)
将Steven Dee的建议更进一步,您可能需要查看ANTLRWorks,它是ANTLR语法的交互式GUI开发工具。
答案 2 :(得分:1)
要检查语法是否允许某种解析器算法,只需将其放入解析器生成器即可。在LALR(1)的情况下,将语法传递给YACC以查看它是否检测到冲突。
答案 3 :(得分:1)
CoCo/R列表中缺少C#。它使用简单,功能多样,特别适用于各种语言的代码生成器
Coco,R for C#,Java,C ++,F#,VB.Net,Oberon,其他语言
答案 4 :(得分:0)
ANTLR是Java中的GUI解析器生成器,具有广泛的语法分析和分解功能。查看常见问题;它可能会支持您正在寻找的东西。