黄建功又惊又喜。
这才一周时间,“华夏”语言的规范就出来了?
钱学敏他们,是什么效率!
“快!拿来我看看!”
黄建功迫不及待地从联络员手中,接过了那份厚厚的,还散发着油墨香气的《华夏语言第一版设计规范》。
实验室里,所有的专家,也都好奇地围了过来。
他们也想看看,自己未来要“翻译”的,究竟是一门怎样的“神谕语言”。
黄建功翻开了第一页。
“华夏语言设计总则:以人为本,大道至简,优雅清晰……”
看到这十二个字,黄建功赞许地点了点头。
没错,这完全符合老师的点化。
他继续往下看。
“第一章:数据类型。本语言定义四种基本数据类型:整数(INTEGER)、浮点数(FLOAT)、字符串(STRING)、布尔(BOOLEAN)……”
“嗯,不错,严谨!”黄建功抚了抚眼镜。
“第二章:循环结构。本语言推荐使用FOR循环与WHILE循环,不推荐使用GOTO语句,以保证代码的结构化与可读性……”
“好!有远见!”黄建功的脸上,露出了笑容。
他仿佛已经看到,未来用“华夏”语言写出来的程序,会是何等的赏心悦目。
然而,当他翻到第三章,“运算符与表达式”时,他的眉头,微微皱了起来。
“第三点一节:自增与自减运算符。为简化代码,本语言引入++与--运算符。A++等价于A = A + 1,A--等价于A = A - 1……”
“嗯?”黄建功发出了一声轻咦。
A++?
这个设计,确实很简洁。
但是,对于编译器来说,这意味着,要增加一个全新的,对++这个双字符运算符的,特殊识别逻辑。
他隐隐感觉,事情好像没有那么简单。
他压下心中的一丝疑虑,继续往下看。
“第三点二节:复合赋值运算符。本语言引入+=、-=、*=、/=等复合赋值运算符。A += 10等价于A = A + 10……”
黄建功的眉头,皱得更深了。
又是一堆,新的双字符运算符。
这会大大增加他们“词法分析器”的复杂程度。
钱老他们,为了追求所谓的“简洁”,是不是有点……走得太远了?
但真正让他感到不安的,是接下来的一个章节。
“第四章:语句结构。第四点三节:表达式语句。本语言允许将一个独立的表达式,作为一个完整的语句。例如,A + B;本身就是一句合法的语句,尽管它可能没有实际意义……”
“什么?!”
黄建功失声叫了出来。
一个独立的表达式,也能算一个语句?
那A + B;和A = A + B;,编译器该如何区分?
这……这不是在给编译器,制造混乱吗?
“黄老,怎么了?”旁边的人,好奇地问道。
黄建功没有回答,他的脸色,变得无比凝重。
他有种非常不好的预感。
他翻到了最后一章,附录。
“附录A:关于IF语句的说明。本语言的IF语句,可以省略THEN关键字。例如,IF A > B PRINT "A更大"是合法的。”
“附录B:关于函数调用的说明。本语言的函数调用,可以省略括号。例如,PRINT "你好"等价于PRINT("你好")。”
“附录C……”
黄建功越看,手心越是冰冷。
他终于明白,问题出在哪里了。
钱学敏他们,这群搞理论的,为了追求所谓的“人性化”和“灵活性”,在语言里,加入了太多太多,模棱两可的,有歧义的语法!
在人看来,PRINT "你好"和PRINT("你好"),意思是一样的。
IF A > B PRINT "A更大"和IF A > B THEN PRINT "A更大",意思也是一样的。
人类的大脑,可以很轻松地,根据上下文,理解其中的含义。
但是,机器不行!
机器是死板的!
它的“语法分析器”,在解析IF A > B PRINT "A更大"这句代码时,会遇到一个致命的问题。
当它读到IF A > B之后,它期望下一个读到的,是一个明确的THEN关键字。
但是,它读到的,却是一个PRINT。