有没有一种方法来确定语法中的歧义?

问题描述:

我们正在学习课堂中的歧义,下面的语法是作为一个模糊语法的例子给出的。我只是没有看到它是如何模糊的。有没有一种人们用来确定歧义的模式或方法,还是它就像一个逻辑谜题,你必须通过组合来找到语法中含糊不清的句子?我在网上阅读的例子大多都给出了模棱两可的句子,但是你怎么首先找到这个句子呢?我会很感激任何帮助,谢谢。有没有一种方法来确定语法中的歧义?

< stmt_list> ==> < stmt> 

       | < stmt> ; < stmt_list> 

< var> ==> A | B | C 

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

       | < var> - < var> 

       | < var> 
+0

我在我的答案中犯了错误,那就是为什么我删除你现在的语法并不含糊。 – 2013-03-02 16:04:12

+0

@GrijeshChauhan我明白了。谢谢。这非常令人困惑,因为我们的教授告诉我们这是模棱两可的。 – 2013-03-02 16:06:51

+0

但是你的语法对于数学表达式的目的也是不正确的:(查看正确的例子http://stackoverflow.com/questions/14554752/how-can-i-add-parentheses-as-the-highest-level 14569166#14569166 – 2013-03-02 16:07:58

一般来说,determining whether a grammar is ambiguous or not is undecidable.所以,是的,在语法找到一个歧义句降低到一个非常困难的逻辑谜题。尽管如此,解决特定病例并找到启发式方法是一个活跃的研究领域。这是一个相当不错的工具:http://www.brics.dk/grammar/。该网页包含一篇文章链接,解释它的工作方式,尽管说实话,这篇文章覆盖了我的脑海。