我想描述一个复杂的脚本和可能的编程语言.我想在做任何事情之前用Backus-Naur形式描述它(不包括虚拟/样本脚本代码)
还有另一种形式来描述Backus-Naur形式的语言吗?我应该考虑哪些替代方案?
显而易见的替代方案是扩展Backus-Naur形式,但是很少有其他可以使用的形式,我发现了一些快速搜索的链接:
增强的BNF
Wirth语法表示法
Van Wijngaarden语法
我个人会坚持使用BNF/EBNF,因为在某种形式下使用它的信息和工具很普遍.像bison或yacc这样的工具可以帮助从这样的语法生成解析器,并使生成解释器变得非常简单.
这取决于你想要描述语言的正式程度.Backus-Naur Form用于描述无上下文的语法.因此,如果你想描述一个无上下文的语法,Backus-Naur Form可能就是这样,因为它是描述这些语言最广为人知的形式.
但是,如果您希望描述语义或更复杂的语法,则需要使用其他方法.如果您还想描述您的语义,则需要根据语言特征(如使用递归)在小步或大步语义之间进行选择.
请注意,如果您的语法不能使用无上下文语法表达,那么BNF根本不足以表达您的语言,您可能需要考虑用上下文敏感语法描述您的语言.