有没有一套确定语法歧义的方法?

Min*_*yer 6 grammar bnf context-free-grammar ambiguous-grammar

我们正在学习课堂上的歧义,并且给出了以下语法作为模糊语法的一个例子.我只是没有看到它是多么模糊.是否存在人们用来确定歧义的设定模式或方法,或者它就像一个逻辑谜题,你必须通过组合来找到语法中的歧义句子?我在网上看到的例子大多已经给出了含糊不清的句子,但是你怎么在第一时间找到这句话呢?我很感激任何帮助,谢谢.

< stmt_list> ==> < stmt>

               | < stmt> ; < stmt_list>

< var> ==> A | B | C

< stmt> ==> < var> + < var>

               | < var> - < var>

               | < var>
Run Code Online (Sandbox Code Playgroud)

DPe*_*er1 2

一般来说,确定语法是否二义性是不可判定的。所以,是的,在语法中找到一个模棱两可的句子会减少到一个非常困难的逻辑难题。解决具体案例并寻找启发式方法是一个活跃的研究领域。这是一个非常好的查找​​歧义的工具:http://www.brics.dk/grammar/。该网页包含一个链接,指向一篇解释其工作原理的论文,尽管老实说,这超出了我的理解范围。