它不知道,这个PRINT,是属于IF语句的一部分呢,还是一个新的,独立的语句的开始?
这就是“语法歧义”!
一个,足以让整个编译过程,彻底崩溃的,致命的妖怪!
“完了……”
黄建功的手,开始颤抖。
那份设计规范,在他手里,不再是智慧的结晶,而像一个潘多拉的魔盒。
钱学敏他们,出于好心,为了让语言变得更“自由”,更“简单”。
却在无意中,释放出了一个,名为“歧义”的,逻辑上的妖怪!
他们亲手,为自己,也为编译器组,挖了一个,深不见底的巨坑!
“黄老?黄老!您没事吧?”
周围的专家,看到黄建功脸色惨白,额头冒汗,都吓了一跳。
“快!快去把钱老请过来!”黄建功的声音,嘶哑而急促,“出大事了!”
他知道,这门“华夏”语言,从它诞生的那一刻起。
就已经走上了一条,逻辑的岔路。
而这条路的尽头,不是通往神国的天梯。
是一个,由他们自己创造出来的,万劫不复的,逻辑深渊!
半小时后。
“编译器”攻关组的会议室,气氛紧张到了冰点。
钱学敏和几位“神谕语言”设计组的核心成员,匆匆赶到。
他们看到黄建功和一众编译器专家,个个脸色铁青,都感到有些莫名其妙。
“老黄,怎么了?火急火燎地把我们叫过来?”钱学敏笑着问道,脸上还带着一丝创造出完美作品的得意,“是不是被我们的设计,给惊艳到了?”
黄建功没有说话。
他只是拿起一支粉笔,走到黑板前,写下了一行,他们规范里定义的,“合法”代码。
IF A > B IF C > D PRINT "1" ELSE PRINT "2"
写完,他转过身,用一种极其压抑的目光,看着钱学敏。
“钱老,请问,这行代码,是什么意思?”
钱学敏看了一眼,不假思索地回答:“很简单啊。如果A大于B,那么,就再判断C是不是大于D。如果C也大于D,就打印‘1’。否则,就打印‘2’。”
“是吗?”
黄建功的嘴角,扯出一个比哭还难看的笑容。
“那为什么,不能是这样理解呢?”
“如果A大于B,那么,就执行后面的IF C > D PRINT "1"这个判断。”
“但是,如果A不大于B,那么,就执行ELSE PRINT "2"。”
他用粉笔,重重地在ELSE这个词上,画了一个圈。
“请问,这个ELSE,它到底是跟第一个IF配对的,还是跟第二个IF配对的?”
钱学敏脸上的笑容,瞬间凝固了。
他张了张嘴,想反驳。
可他发现,自己竟然,无从反驳。
从人类的阅读习惯来说,ELSE通常是和最近的那个IF配对。
但是,从语法的可能性上来说,它跟第一个IF配对,也完全说得通!
一句话,两种截然不同的解释!
这就是,赤裸裸的,无法回避的“歧义”!
“这……这……”
钱学敏的额头,也开始冒汗了。
他和其他几位语言组的专家,面面相觑,都从对方的眼中,看到了震惊和慌乱。
他们之前,光顾着追求语言的“灵活性”,完全没有考虑到,这种嵌套结构下,会产生如此致命的问题!
“这只是其中一个问题!”
黄建功的声音,变得严厉起来。
他擦掉黑板上的代码,又写下了另一行。
A = B + C * D;
“这句,很简单,先算乘法,再算加法,对吧?这是我们小学就学过的‘运算符优先级’。”
“但是!”
他话锋一转,又写了一行。
A = B + C++;
“这句呢?钱老,您告诉我,是先算B+C,再让C自增1?还是先让C自增1,再算B加上那个新的C?”
钱学敏,彻底说不出话了。
他发现,他们引以为傲的,那个简洁的++运算符,在这里,也成了一个“歧义”的源头!
“还有这个!”
黄建功几乎是在咆哮了。
PRINT A B C;
“你们说,为了方便,函数调用可以省略括号!”
“那这句话,编译器怎么知道,你是想调用一