首页 > 代码库 > 闲聊Backus Naur Form

闲聊Backus Naur Form

我们程序员,每天都享受着巴科斯-诺尔(BNF范式)范式,给我们带来的程序语言世界。


但,大多数人,对他们二人知之甚少。我也不例外。



我也不想引用任何文献,就自己所了解的,这里做个小笔记。


先说一下ENIAC小组。

冯。诺依曼由ENIAC机研制组的戈尔德斯廷中尉介绍参加ENIAC机研制小组。

之后,冯。诺依曼写了他的著名论文,为当代计算机体系打下基础。



冯。诺依曼发明了许多东西,但冯。诺依曼是个数学家,他对计机算虽然热情相当高,因为他要用计算机来计算,说白了,他还是一个数学家,只是需要计算机进行巨量计算。

所以,冯。诺依曼发明用定点数来算浮点数据的一系列算法。


在这个小组中,还有一个狂人,就是巴科斯。

他希望能够制作出编译器,自动完成浮点数的设定。


所以,先要定义一门语言,这门语言就叫: Fortran  (源自于“公式翻译”:FormulaTranslation)

虽然说,谁都明白,如果有纯浮点数该有多好呢?不用每次计算前,进行仔细的设定(学过算法的人都理解啊,小数点设置不对,计算机可是什么也算不出来)。

从心里而言,哪个科学家,都梦想有这个东西出现。


可是,毕竟现实是残酷的。那时候,才是50年代初。那时的计算机,只是一个吞吐纸带的怪物。

所以,冯。诺依曼反对这个根本不现实的想法。当时,什么语言啊,编译器这些东西,都是全新的概念。


冯。诺依曼认为,这种设定,完全超出了现有的计算机的能力。会白白浪费科研经费。

客观来说,冯。诺依曼是对的。


不过,这里我们举一个例子:为什么哥仑布是西班牙资助的?因为西班牙当时,刚建国,不懂航海,而葡萄牙的航海已很成熟了,他们经过计算,认为,既使地球是园的,哥仑布的想法也根本不现实。


而哥仑布到死也不承认自己搞错了。事实上是他搞错了,但这不耽误他是一个伟人。


因为多数人,都有梦想,不象冯.诺依曼那么现实,巴科斯的提案最终还是获得通过。冯.诺依曼也就不反对了。


然而,现实的发展,的确是残酷的——光是有梦想是不成的。Fortran这个世界上第一个编译器(还不是计算机语言,要注意),里不其然啊,直到1960年,还是无尽的bug。


不过,就象美洲救了哥仑布,一个与计算机无关的人,偏偏在这个时候,救了整个计算机行业。

这个人,许多人,肯定想到了,就是著名的乔姆斯基。他的论文《语法结构》拯救了这个行当。


巴科斯不是全凭幸运,现在人们也搞不清楚,他是如何得知这个消息,以及,他怎么读懂了乔姆斯基那么难懂的论文。

总之,狂人,都不是一般的聪明和运气好。


巴科斯立即明白,这就是他要的。所以,他发表了巴科斯范式。是在1959年。1960年诺尔发布了他的范式,二人的有所不同。我也不清楚,但我知道,我们目前用的,更像巴科斯的。


总之,当时乔姆斯基的发现,可能是在西方世界,还是有许多人知道。事实上的确如此,乔姆斯基的《语法结构》,刚发行不久,就有人写了比他还厚的反驳他的论文,而且与之名气相当——这的确是一个有趣的事情。

反正,现实世界和程序员世界完全不同,但程序界,还是完全接受了。


前面我提到过,先有了编译器,也就是FORTRAN 第一版,来自于是IBM的,对了,当时这些科学家都被IBM招去了。

FORTRAN前面我也说了,让巴科斯泥潭深陷,一堆解决不完的BUG.


但现在不同了,有了巴科斯范式,也就真正有了计算机语言,然后基于这种语言编写编译器,这就是第二版FORTRAN。


程序员们都应当记住这个历史性事件,语算机语言第一次被实现,第一次真正有了编译器的概念,就是第二版FORTRAN。

从此,计算机世界,再也没有人能拦得住了。


巴科斯范式直到今天,仍然是个迷,巴科斯是如何想到的,我们谁也不清楚,但请大家记住这个计算机世界的真正伟人吧


参考一些文章如下:

http://en.wikipedia.org/wiki/Backus%E2%80%93Naur_Form

http://blog.csdn.net/begtostudy/article/details/6026806