普通生活中的二义性,二义性的一个例子
地理教过,中国产煤最多的地方是辽宁省抚顺,产铁最多是辽宁省鞍山,所以抚顺被称为中国的“煤都”,鞍山称为“铁都”。
某次月考试题:中国的煤都是( ),中国的铁都是( )。
结果某张试卷上:中国的煤都是(黑的),中国的铁都是(硬的)。
考完还说:这次老师怎么出那么简单的题目?
数理逻辑中的二义性,如何理解二义性? - 知乎 (zhihu.com))
选令狐冲或任我行为武林盟主
这里的或
不清除是排它或
还是相容或
?
排它或
如意思是武林盟主只能是令狐冲、任我行两者之一时,或为排斥或,此时选令狐冲为盟主句子为真、选任我行为盟主句子为真,但选两者一起为盟主为假
相容或
如果允许令狐冲、任我行同时为盟主,则为相容或,此时选令狐冲为盟主、选任我行为盟主,选两者一起为盟主都为真。
上述二者都是二义性
表达,在离散数学
上来看都不具有唯一表示。在《编译原理(第二版)》中对二义性有这样的定义
一个文法可能有多棵语法分析树能够生成同一个给定的终结符号串,这样的文法称为具有二义性(ambiguous)。
注:ambiguous,在英文中是模糊
的意思。
那么反言之,如果表达式不具有二义性则应为
一个文法如果有且只有一棵语法分析树可以生成给定的终结符号串,那么该文法不具有二义性。
有关语法分析树的内容参见语法分析树(先看例子再看定义)-CSDN博客
如果将9-5+2
的文法产生式改写为
string -> string + string | string - string |0|1|2|3|4|5|6|7|8|9
那么其对应的语法分析树可以为
或者
根据上述两棵语法分析树产生的结果分别式6
和2
,很明显,一条计算表达式是不可能产生2个不同的结果的。这证明该文法产生式
是有问题的,因为它可以使用2棵语法分析树
产生同一条终结符号串
。
我们再来看看下面的文法产生式
list -> list + digit | list - digit | digit
digit -> 0|1|2|3|4|5|6|7|8|9
如果对9-5+2
会不会使用像上面一样的2棵语法分析树生成终结符号串
?
很明显不能,因为list
不能直接为0|1|2|3|4|5|6|7|8|9
,这就导致了list -> list -digit
必须是list - 数字
而不能是string - string
。
说话要说明白,意思表达要唯一,不要没事装X!
各位记住了,有人在你面前说话不清楚,讲东扯西,非奸即盗!