字体:大 中 小
护眼
关灯
上一章
目录
下一章
第629章 石器时代终结!第一行高级代码!
第(1/3)页
“用‘华夏-核心’,敲出‘鲁班神斧’的第一行代码!”
黄建功的这句话,像一道,开启新纪元的,神圣号角,在“鲁班神斧”计划的,总指挥部里,吹响。
所有人的脸上,都,洋溢着一种,难以言喻的,自豪和激动。
他们,不再是,在,冰冷的,二进制世界里,匍匐前行的,苦力。
他们,是,第一批,掌握了“火种”的,新人类!
虽然,这个“火种”,还很,微弱。
他们,手中的“蜗牛解释器”,运行效率,极其低下。
执行,一段,简单的,循环代码,都需要,好几秒钟的时间。
在,后世的程序员看来,这,简直,慢到,令人发指。
但是!
对于,已经,在,手摇机器码的,地狱里,挣扎了,几个月的,黄建功他们来说。
这,已经,是,从,地狱,到,天堂的,飞跃!
“好了,同志们,安静一下!”
黄建功,拍了拍手,将,众人,从兴奋中,拉了回来。
“庆祝,到此为止!”
“我们,没有时间,可以浪费!”
“从现在开始,‘鲁班神斧’(YACC)的,正式,开发工作,全面启动!”
他,走到,那张,巨大的,工程蓝图前,拿起了,红色的粉笔。
“根据,我们之前的,战略规划。”
“‘鲁班神斧’,要做的,第一件事,就是,解析,我们,用BNF范式写成的,《神之宪法》。”
“所以,我们的,第一个,要攻克的,模块,就是——”
他,在蓝图的,第一个方框上,重重地,画了一个圈。
“‘BNF文法解析器’!”
“这个模块,就是,我们‘神斧’的,‘眼睛’和‘嘴巴’!”
“它,必须,能够,准确无误地,读懂,‘宪法’的,每一个字,每一个符号!”
黄建功,转过身,目光,落在了,钱学敏的身上。
“老钱,这个任务,就,交给你了。”
“你是,我们这里,对,形式化文法,理解最深的人。”
“由你,来,主导,这个,核心解析器的,算法设计,我,最放心。”
钱学敏,郑重地,点了点头。
“放心吧,老黄。”
“这一次,我们,有了,‘华夏-核心’这个,武器。”
“如果,再,出任何问题,我,提头来见!”
他的话语里,充满了,前所未有的,自信。
曾几何时,他们,还在为,如何,手动实现一个,最简单的,语法分析器,而,愁白了头。
而现在,他们,已经可以,开始,用,一门,虽然简陋,但,五脏俱全的,高级语言,去,设计和编写,一个,更加复杂的,解析器了!
这种,站在,巨人肩膀上的感觉,实在是,太美妙了!
“好!”黄建功,又,看向了,另一位,负责,硬件和底层逻辑的,年轻天才,林逸博士。
“林逸!”
“到!”
“你的任务,是,带领,‘算法实现组’!”
“将,钱老他们,设计出的,算法,用,最快的速度,转化成,‘华夏-核心’的,可执行代码!”
“我,不管,你们,用什么方法!”
“熬夜也好,三班倒也好!”
“一个月!我只要,一个月的时间!”
“我要看到,一个,能够,完整,吃下,我们整部《神之宪法》,并且,成功,构建出,语法树的,‘BNF文法解析器’的,第一个,可用版本!”
“是!保证完成任务!”
林逸,挺直了胸膛,眼中,燃烧着,熊熊的,战意。
任务,分配完毕。
一场,全新的,战斗,立刻,打响。
钱学敏,带领着,他那群,最顶尖的,数学和逻辑学大脑,把自己,关进了,算法设计室。
他们,开始,为,BNF文法,这门,“元语言”,设计,它的,专属语法分析器。
这一次,他们,没有再,犯任何,经验主义的错误。
他们,严格,遵循着,黄建功,和他们,共同确立的,最稳妥的,“递归下降”的分析思路。
“BNF文法,它的结构,是,天生,就适合,递归下降的。”
在设计室里,钱学敏,在白板上,写下了一条,BNF规则。
“::=‘|’”
“这条规则,定义了,‘规则体’,可以由,一个‘表达式’,或者,由,一个‘规则体’,加上一个‘|’,再加上一个‘表达式’,构成。”
“你看,它的,递归部分,在,左边。”
“这,又是一个,‘左递归’!”
一名,年轻的,研究员,立刻,指出了问题。
他,对,这个,曾经,烧毁了,他们,三台原型机的,妖怪,心有余悸。
“没错。”钱学敏,赞许地,点了点头。
“但是,我们,现在,怕它吗?”
他,神秘地,笑了笑。
“我们,之前,之所以,怕‘左递归’,是,因为,我们的,‘函数调用’,是,直接,在,硬件层面,实现的。”
“每一次调用,都会,消耗,宝贵的,硬件‘堆栈’资源。”
“一旦,陷入,无限递归,硬件堆栈,就会,立刻,被撑爆,导致,系统崩溃。”
“但是,现在,我们,有了,‘华夏-核心’!”
“我们,是在,一个,更高的,‘软件’层面,来,实现,我们的,递归函数!”
钱学敏,拿起笔,在白板的另一边,写下了一段,伪代码。
FUNCTION ParseRuleBody():
// 先尝试解析一个“表达式”
result = ParseExpression();
// 检查下一个符号,是不是‘|’
IF next_token == '|' THEN
// 如果是,那么,就说明,这是一个递归的定义
// 我们,消耗掉‘|’
ConsumeToken();
// 然后,再去,递归调用,我们自己!
recursive_result = ParseRuleBody();
// 最后,将两次的结果,组合起来
RETURN Combine(result, recursive_result);
ELSE
// 如果,不是‘|’,说明,规则体,到此结束
RETURN result;
END IF
END FUNCTION
“看!”钱学敏,指着这段,逻辑清晰的,伪代码。
“我们,完全可以,通过,一个,简单的,IF判断,来,将,‘左递归’,转换成,一个,‘尾递归’,或者,一个,简单的,‘循环’!”
“我们,不再,受限于,硬件的,束缚了!”
“在,软件的世界里,我们,有,无数种,巧妙的方法,可以,绕过,这个,所谓的,‘陷阱’!”
钱学敏的这番话,让,在场的所有,年轻研究员,都,听得,茅塞
(本章未完,请翻页)
记住手机版网址:m.lewenwx.cc
上一章
目录
下一章