即,是否有一个工具可以自动显示给定语法的完整语言,包括突出显示歧义(如果有的话)?
答案 0 :(得分:5)
BNF风格的语法可能有一些特殊性,但一般来说,决定给定的无上下文语法(如BNF)是否模糊是不可能的。
简而言之,没有工具,因为一般来说,该工具在数学上是不可能的。但是,可能会有一些特殊情况可以帮助您。
答案 1 :(得分:2)
一般来说,没有。
但是作为一种实用的方法,你可以做的,给出一个语法,是针对每个规则,枚举可能的有效终端/非终结字符串,看看是否有任何规则有两个或更多的等效派生(这将是一个模糊)。
我们的DMS Software Reengineering Toolkit是一个程序转换系统,用于任意计算机语言,由显式语法描述驱动。 DMS使用解析器生成器来驱动其GLR解析引擎。
DMS的解析器生成器可选择通过在所有语法规则中运行迭代加深搜索来勾画上面描述的歧义检查。这很实用,因为它有解析表来有效地指导选择的枚举。您可以告诉它将此检查运行到某个选定的深度。如果选择任何有趣大小的深度可能需要很长时间,但实际上深度为3或4就足以发现在大语法中引入的许多愚蠢的歧义。我们通常在初始语法调试期间执行此操作,并且我们认为我们的语法调整非常正确。