描述一些东西,我应该使用Backus-Naur表格吗?

时间:2009-02-13 12:00:02

标签: bnf scripting-language

我想描述一个复杂的脚本和可能的编程语言。在做任何事情之前我想用Backus-Naur形式描述它(不包括虚拟/样本脚本代码)

还有另一种形式来描述Backus-Naur形式的语言吗?我应该考虑哪些替代方案?

5 个答案:

答案 0 :(得分:7)

显而易见的替代方案是extended Backus-Naur form,但是很少有其他方法可以使用,我找到了一些快速搜索的链接:

Augmented BNF

Wirth syntax notation

Van Wijngaarden grammar

就个人而言,我会坚持使用BNF / EBNF,因为在某种形式下使用它的信息和工具很普遍。像bisonyacc这样的工具可以帮助从这样的语法生成解析器,并使生成解释器变得非常简单。

答案 1 :(得分:5)

这取决于你想要描述语言的正式程度。 Backus-Naur Form用于描述无上下文的语法。因此,如果你想描述一个无上下文的语法Backus-Naur Form可能是要走的路,因为它是最广为人知的描述形式。

但是,如果您希望描述语义或更复杂的语法,则需要使用其他方法。如果你想描述你的语义,你需要根据语言特征(如使用递归)在小步或大步语义之间进行选择。

请注意,如果您的语法不能使用无上下文语法表达,那么BNF根本不足以表达您的语言,您可能需要考虑用上下文敏感的语法来描述您的语言。

答案 2 :(得分:1)

BNF是一个好的开始,有几个解析器生成器可以将它用作输入。 Boost.Spirit是一个很好的例子,如果你打算使用C ++。

答案 3 :(得分:0)

您可能希望查看Microsoft的“M”。这是一种语言/语法,允许您描述另一种语言(BNF也是如此)。这被用作开发自己的域驱动语言的基础。

"M" from Microsoft

答案 4 :(得分:0)

您还可以考虑使用ANTLR,它使用接近BNF的语法/形式语言。 它将帮助您构建解释器/编译器。