“用‘华夏-核心’,敲出‘鲁班神斧’的第一行代码!”
黄建功的这句话,像一道,开启新纪元的,神圣号角,在“鲁班神斧”计划的,总指挥部里,吹响。
所有人的脸上,都,洋溢着一种,难以言喻的,自豪和激动。
他们,不再是,在,冰冷的,二进制世界里,匍匐前行的,苦力。
他们,是,第一批,掌握了“火种”的,新人类!
虽然,这个“火种”,还很,微弱。
他们,手中的“蜗牛解释器”,运行效率,极其低下。
执行,一段,简单的,循环代码,都需要,好几秒钟的时间。
在,后世的程序员看来,这,简直,慢到,令人发指。
但是!
对于,已经,在,手摇机器码的,地狱里,挣扎了,几个月的,黄建功他们来说。
这,已经,是,从,地狱,到,天堂的,飞跃!
“好了,同志们,安静一下!”
黄建功,拍了拍手,将,众人,从兴奋中,拉了回来。
“庆祝,到此为止!”
“我们,没有时间,可以浪费!”
“从现在开始,‘鲁班神斧’(YACC)的,正式,开发工作,全面启动!”
他,走到,那张,巨大的,工程蓝图前,拿起了,红色的粉笔。
“根据,我们之前的,战略规划。”
“‘鲁班神斧’,要做的,第一件事,就是,解析,我们,用BNF范式写成的,《神之宪法》。”
“所以,我们的,第一个,要攻克的,模块,就是——”
他,在蓝图的,第一个方框上,重重地,画了一个圈。
“‘BNF文法解析器’!”
“这个模块,就是,我们‘神斧’的,‘眼睛’和‘嘴巴’!”
“它,必须,能够,准确无误地,读懂,‘宪法’的,每一个字,每一个符号!”
黄建功,转过身,目光,落在了,钱学敏的身上。
“老钱,这个任务,就,交给你了。”
“你是,我们这里,对,形式化文法,理解最深的人。”
“由你,来,主导,这个,核心解析器的,算法设计,我,最放心。”
钱学敏,郑重地,点了点头。
“放心吧,老黄。”
“这一次,我们,有了,‘华夏-核心’这个,武器。”
“如果,再,出任何问题,我,提头来见!”
他的话语里,充满了,前所未有的,自信。
曾几何时,他们,还在为,如何,手动实现一个,最简单的,语法分析器,而,愁白了头。
而现在,他们,已经可以,开始,用,一门,虽然简陋,但,五脏俱全的,高级语言,去,设计和编写,一个,更加复杂的,解析器了!
这种,站在,巨人肩膀上的感觉,实在是,太美妙了!
“好!”黄建功,又,看向了,另一位,负责,硬件和底层逻辑的,年轻天才,林逸博士。
“林逸!”
“到!”
“你的任务,是,带领,‘算法实现组’!”
“将,钱老他们,设计出的,算法,用,最快的速度,转化成,‘华夏-核心’的,可执行代码!”
“我,不管,你们,用什么方法!”
“熬夜也好,三班倒也好!”
“一个月!我只要,一个月的时间!”
“我要看到,一个,能够,完整,吃下,我们整部《神之宪法》,并且,成功,构建出,语法树的,‘BNF文法解析器’的,第一个,可用版本!”
“是!保证完成任务!”
林逸,挺直了胸膛,眼中,燃烧着,熊熊的,战意。
任务,分配完毕。
一场,全新的,战斗,立刻,打响。
钱学敏,带领着,他那群,最顶尖的,数学和逻辑学大脑,把自己,关进了,算法设计室。
他们,开始,为,BNF文法,这门,“元语言”,设计,它的,专属语法分析器。
这一次,他们,没有再,犯任何,经验主义的错误。
他们,严格,遵循着,黄建功,和他们,共同确立的,最稳妥的,“递归下降”的分析思路。
“BNF文法,它的结构,是,天生,就适合,递归下降的。”
在设计室里,钱学敏,在白板上,写下了一条,BNF规则。
“::=‘|’”
“这条规则,定义了,‘规则体’,可以由,一个‘表达式’,或者,由,一个‘规则体’,加上一个‘|’,再加上一个‘表达式’,构成。”
“你看,它的,递归部分,在,左边。”
“这,又是一个,‘左递归’!”
一名,年轻的,研究员,立刻,指出了问题。
他,对,这个,曾经,烧毁了,他们,三台原型机的,妖怪,心有余悸。
“没错。”钱学敏,赞许地,点了点头。
“但是,我们,现在,怕它吗?”
他,神秘地,笑了笑。
“我们,之前,之所以,怕‘左递归’,是,因为,我们的,‘函数调用’,是,直接,在,硬件层面,实现的。”
“每一次调用,都会,消耗,宝贵的,硬件‘堆栈’资源。”
“一旦,陷入,无限递归,硬件堆栈,就会,立刻,被撑爆,导致,系统崩溃。”
“但是,现在,我们,有了,‘华夏-核心’!”
“我们,是在,一个,更高的,‘软件’层面,来,实现,我们的,递归函数!”
钱学敏,拿起笔,在白板的另一边,写下了一段,伪代码。
FUNCTION ParseRuleBody():
// 先尝试解析一个“表达式”
result = ParseExpression();
// 检查下一个符号,是不是‘|’
IF next_token == ''|'' THEN
// 如果是,那么,就说明,这是一个递归的定义
// 我们,消耗掉‘|’
ConsumeToken();
// 然后,再去,递归调用,我们自己!
recursive_result = ParseRuleBody();
// 最后,将两次的结果,组合起来
RETURNbine(result, recursive_result);
ELSE
// 如果,不是‘|’,说明,规则体,到此结束
RETURN result;
END IF
END FUNCTION
“看!”钱学敏,指着这段,逻辑清晰的,伪代码。
“我们,完全可以,通过,一个,简单的,IF判断,来,将,‘左递归’,转换成,一个,‘尾递归’,或者,一个,简单的,‘循环’!”
“我们,不再,受限于,硬件的,束缚了!”
“在,软件的世界里,我们,有,无数种,巧妙的方法,可以,绕过,这个,所谓的,‘陷阱’!”
钱学敏的这番话,让,在场的所有,年轻研究员,都,听得,茅塞顿开!
是啊!
他们,已经,不再是,带着,镣铐,跳舞的,硬件工程师了!
他们,是,手握,高级语言的,软件架构师!
他们,可以用,更抽象,更灵活的,逻辑,去,构建,他们的,程序大厦!
思路,一旦,打通。
整个,算法设计的,进程,就,如同,装上了,火箭助推器。
仅仅,一周的时间。
一套,完整的,包含了,词法分析,和,递归下降语法分析的,“BNF文法解析器”的,详细算法设计,就,新鲜出炉了。
当,这份,厚达,上百页的,算法设计文档,被,送到,林逸,所带领的,“算法实现组”时。
整个实现组,都,沸腾了。
“太漂亮了!”
林逸,翻看着,那,一份份,逻辑清晰,结构优美的,函数流程图,忍不住,发出了,由衷的,赞叹。
“钱老他们,简直,就是,神!”
“每一个,可能出现的,边界条件,他们,都,考虑到了!”
“我们,要做的,就是,把,这些,完美的,‘思想’,翻译成,‘华夏-核心’的,代码!”
“同志们!”
林逸,将,文档,分发给,他手下的,几十名,编程精英。
“‘蓝图’,已经有了!”
“现在,开始,‘施工’!”
“让我们,用,我们的,双手,敲出,‘鲁班神斧’的,第一行,真正的,高级代码!”
整个,实现组的,实验室,立刻,进入了,一种,前所未有的,紧张而有序的,编码状态。
一台台,连接着,“蜗牛解释器”的,测试终端前。
一名名,年轻的,程序员们,正,聚精会神地,敲击着,键盘。
他们的屏幕上,不再是,令人,头皮发麻的,“0”和“1”。
而是一行行,他们,又熟悉,又陌生的,全新的,代码。
LET current_token_type = 0;
LET current_token_value = "";
FUNCTION GetNextToken():
// ... 这里是,词法分析器的,复杂逻辑
END FUNCTION
FUNCTION ParseRule():
// ... 这里是,解析一条BNF规则的,递归逻辑
END FUNCTION
……
他们,在,创造。
他们,在,用,一门,由他们,自己,定义的,语言。
去,编写一个,能够,解析,这门语言的,“祖先”的,程序。
这种感觉,奇妙,而,神圣。
他们,感觉自己,就像,一群,正在,书写,自己,族谱的,神明。
每一行代码,都,充满了,一种,寻根溯源的,庄严感。
时间,在,键盘的,敲击声中,悄然流逝。
两周后。
当,林逸,将,最后一个,函数的,最后一个,分号,敲下时。
他,长长地,舒了一口气。
整整,五万行,‘华夏-核心’代码。
构成了,这个,人类历史上,第一个,用,高级语言编写的,“编译器前端”。
“编译……哦不,解释,执行!”
林逸,颤抖着,在,控制台上,输入了,执行指令。
“蜗牛解释器”,开始,慢吞吞地,工作起来。
它,开始,逐行,读取,这,五万行,源代码。
然后,将它们,一句一句地,翻译成,机器码,交给,“盘古之心”,去执行。
这个过程,很慢。
慢到,所有,围观的人,都能,清晰地,看到,屏幕上,代表着,解释器进度的,光标,在,一点一点地,向前挪动。
所有人都,屏住了呼吸。
他们,在等待。
等待,那个,由他们,亲手创造的,“神斧之刃”,被,一个,更加高级的,灵魂,所,附体。
终于。
在,经过了,长达,十分钟的,漫长等待后。
光标,走到了,最后一行。
整个程序,解释,完毕!
屏幕上,跳出了一行,全新的,提示符。
“BNF Parser V1.0 Ready.”
“BNF语法分析器,1.0版本,准备就绪。”
然后,屏幕,开始,闪烁,等待着,用户的,输入。
“成功了……”
林逸,喃喃自语。
他的声音,不大。
但是,整个实验室,却,瞬间,爆发出,比,以往,任何一次,都,更加,热烈的,欢呼!
因为,他们知道!
这,不仅仅是,一个,程序的,成功!
这,是,一个,时代的,终结!
和一个,全新的,时代的,开启!
从,这一刻起。
他们,将,彻底,告别,那个,刀耕火种的,“机器码石器时代”!
他们,将,迈入一个,可以用,高级语言,去,随心所欲地,创造,和,表达的,全新的,“软件青铜时代”!
“快!”
黄建功,在,巨大的喜悦中,保持着,最后的,冷静。
“把,《神之宪法》的,文本文件,喂给它!”
“让,我们,看看,我们,亲手打造的,这把‘斧头’,究竟,有多么,锋利!”
“快!把《神之宪法》的文本文件,喂给它!”
黄建功的声音,因为激动而微微颤抖,却带着不容置疑的命令。
整个实验室的气氛,瞬间,从狂喜的庆祝,转变为一种,即将见证历史的,极度紧张和肃穆。
一名测试员,双手颤抖地,将一份,早已准备好的,存储在打孔纸带上的,文本文件,装入了,光电读取设备。
那份文件,就是他们,之前,耗费了无数心血,制定出的,《华夏语言V2.0形式化文法定义》。
是,他们“仓颉”计划的,根本大法。
今天,这部“宪法”,将第一次,被一个,由它自己的子民,所创造出来的,“法官”,进行“审阅”。
这,是一场,跨越了,逻辑维度的,自我审判!
“开始输入!”
随着测试员,按下按钮。
打孔纸带,开始,匀速转动。
纸带上的,一个个小孔,所代表的,二进制信息,被,转化成,光信号,涌入了,“盘古之心”的内存之中。
屏幕上,那行,“BNF Parser V1.0 Ready.”的提示符,消失了。
取而代之的,是,一片,安静的,黑暗。
所有人都知道,这意味着什么。
那个,由五万行“华夏-核心”代码,构成的,“BNF文法解析器”,已经,开始,工作了!
它,正在,以一种,虽然,在“蜗牛解释器”的拖累下,显得,有些“慢吞吞”,但,在逻辑上,却,无比,精准和严谨的方式。
去,读取,和,分析,那,一百零八条,“神之宪法”。
时间,一分一秒地,流逝。
实验室里,落针可闻。
所有人的目光,都,死死地,盯着,那块,漆黑的屏幕。
他们的心脏,随着,“盘古之心”内部,那,无声的,数据流转,而,剧烈地,跳动着。
一分钟……
五分钟……
十分钟……
屏幕,依旧,一片黑暗。
一些,年轻的专家,开始,变得,有些,焦躁不安。
“怎么……这么久?”
“不会是,又,出什么问题了吧?”
“不可能!”林逸,立刻,低声,反驳道,“钱老他们设计的算法,是完美的!我们写的代码,也经过了上千次的,单元测试!”
“它,只是,需要时间!”
“它,正在,我们,看不见的地方,进行着,一场,无比,浩瀚的,逻辑构建!”
黄建功,和钱学敏,没有说话。
他们,只是,静静地,站着。
他们的脸上,没有,丝毫的,怀疑。
只有,一种,如同,等待,自己的孩子,降生般的,充满了,期盼和信任的,平静。
他们,相信,自己的“作品”。
就像,他们,相信,老师的“神谕”一样。
终于!
在,经过了,长达,一刻钟的,漫长,而又,令人窒息的,等待之后。
“嘀——”
一声,比,之前,任何一次,都,更加,清脆,更加,悦耳的,蜂鸣声,突然,响起!
紧接着!
漆黑的屏幕,瞬间,被,点亮了!
上面,没有,复杂的,语法树。
也没有,任何,多余的,提示信息。
只有,两个,由,无数个,绿色光点,组成的,巨大的,汉字。
和一个,同样,巨大的,感叹号!
合法!
这两个字,像,两颗,绿色的,太阳,瞬间,照亮了,整个,死寂的实验室!
也,照亮了,每一个,人的,眼眸!
合法!
这意味着,他们,亲手编写的,“BNF文法解析器”,成功地,完整地,并且,是,完美无误地,解析了,他们,自己制定的,那部,复杂的《神之宪法》!
它,读懂了!
它,理解了!
它,用,最简洁,也,最震撼的方式,宣告了自己的,胜利!
“噢噢噢噢噢噢噢噢噢噢!!!!!”
短暂的,死寂之后。
整个实验室,爆发出了,一场,比,以往,任何一次,都,要,猛烈,一万倍的,狂欢!
人们,疯狂地,将,手中的,文件,草稿,帽子,一切,可以,抛向空中的东西,都,扔了起来!
纸片,像,雪花一样,在,灯光下,漫天飞舞!
“我们成功了!”
“神斧!开刃了!”
“哈哈哈哈!我们,真的,造出了,一个,会,读‘法律’的,程序!”
黄建功,再也,控制不住,自己的情绪。
他,一把,抱住,身旁的,钱学敏,像个,两百斤的,孩子一样,又蹦又跳!
钱学敏,也,放下了,所有的,矜持和稳重,任由,浑浊的,喜悦的泪水,在,自己,那,布满皱纹的,脸上,肆意流淌。
这,太不容易了!
从,最初的,迷茫,到,第一次的,失败。
从,第二次的,绝望,到,如今的,浴火重生。
他们,这群,华夏,最顶尖的,大脑。
在,老师的,一次次,点化,和,一次次,考验中。
终于,用,自己的,智慧和汗水,攀上了,一座,前人,从未,企及过的,高峰!
他们,不仅,创造了,一门,语言。
他们,更是,创造了,一套,能够,自我诠释,自我验证的,完整的,“方法论”!
这,才是,这次成功,最伟大的,意义!
“还没完!还没完!”
林逸,这位,年轻的,算法实现组的组长,在,狂喜之中,依旧,保持着,一丝,工程师的,清醒。
他,冲到,控制台前,大声喊道:“解析,只是,第一步!”
“‘神斧之心’的,计算,才,刚刚开始!”
他的话,让,所有人,都,安静了下来,目光,再次,聚焦到了,屏幕上。
只见,屏幕上,“合法!”那两个,巨大的绿字,消失了。
取而代之的,是,一行,不断,跳动的,进度条。
进度条下方,显示着一行小字:
“LALR(1)分析表,状态生成中……”
“状态数量:128……”
“状态数量:256……”
“状态数量:512……”
数字,在,以一种,肉眼可见的,惊人的速度,疯狂地,向上,飙升!
这,意味着,“鲁班神斧”的,第二个,核心模块——“项目集构建与自动机生成”程序,已经,接管了,工作!
它,正在,利用,“盘古之心”那,恐怖的,计算能力,去,疯狂地,推演和计算,那,曾经,让他们,手动计算到,崩溃的,天文数字般的,状态组合!
“快看!速度!”
“天哪!这才,几秒钟,状态数量,就,已经,超过,一千了!”
“我们,之前,用手,算了一周,才,勉强,算到,三百多个状态!”
“这就是……这就是,‘工业化’的力量吗?”
所有,参与过,那场,悲壮的,“手动计算”的专家们,都,目瞪口呆地,看着,屏幕上,那,疯狂跳动的,数字。
他们的心中,充满了,一种,被,自己,亲手创造的,新时代,无情碾压的,巨大的,震撼和荒谬感。
他们,感觉自己,就像,一群,刚刚,发明了,蒸汽机的,工匠。
然后,亲眼,看着,自己,发明的,火车,以,百倍于,马车的速度,从,自己身边,呼啸而过!
那种,被,自己,开启的,新世界,彻底,抛弃的,感觉。
既,荒诞,又,无比的,幸福!
“状态数量,1589……”
“状态数量,2145……”
“状态数量,3217!”
最终,当,状态数量的,数字,定格在,“3217”这个,和,他们,之前,手动计算出的,最终结果,完全,吻合的,数字上时。
进度条,走到了,百分之五十。
屏幕上的提示,再次,变化。
“DFA自动机构建完成!”
“开始生成LALR(1)分析表……”
又是一阵,肉眼,几乎,无法捕捉的,疯狂的数据,刷新!
那张,曾经,铺满了,整个篮球场,需要,几十个专家,耗费,数周时间,才能,勉强,绘制完成的,巨大的,“逻辑迷宫”。
此刻,在,“盘古之心”的,眼中。
不过是,一道,可以在,几分钟内,就,轻松求解的,数学题!
“分析表,生成完毕!”
“开始,进行,代码生成……”
进度条,冲向了,百分之九十!
“鲁班神斧”,进入了,它,最后,也是,最神奇的,一个环节!
它,将,那张,新鲜出炉的,巨大的,分析表,和,一套,黄建功他们,提前,编写好的,“编译器驱动骨架”程序,完美地,融合在了一起!
它,在,创造!
它,在,用,代码,创造,代码!
它,在,用,一个,程序,去,组装,另一个,更加,强大的,程序!
这,就是,神迹