小原文学网
首页 > 都市言情 > 1977:从恢复高考到大国工匠 >

第177章 确实厉害

章节目录

  他脑子里飞快地转了一圈。

  栈是这个问题标准的、最直观的解。

  不用栈,还有什么办法?这他倒确实没想过。

  “我……没有想过这个问题。我一直用栈。”彭远征知道他一时半会儿肯定想不到答案,索性如实回答。

  “栈没问题。“陆怀民说,“栈确实是最直观、内存开销最小的方法。但如果我们面对的不是简单的数学表达式呢?如果我们要处理的是一种更复杂的加工描述语言呢?“

  他顿了顿,继续说道:

  “你想想,用栈来写的话,每加一种新的运算符,你就要改一次优先级表;每加一种新的语法结构,你就要在栈的弹出逻辑里加一堆分支判断。到最后,整个程序会变成一团乱麻,没人敢改,也没人能看懂。那时候你怎么办?“

  彭远征的眉头拧了起来。他隐约感觉到了陆怀民想说什么,但又抓不住那个点。

  毕竟这个时代的代码复杂程度和后世是不可同日而语的。

  很多后世的算法在这个时代极具有前瞻性。

  “有一种方法,叫递归下降。”陆怀民说着,在面前摊开的笔记本上刷刷写了几行伪代码,把笔记本转过来,推到彭远征面前:

  “不用栈,用函数的调用栈来代替数据栈。比如‘a加b乘c’,你可以定义一个解析函数,遇到加号的时候,先把左操作数输出,然后递归处理右操作数,最后再输出加号本身。”

  彭远征低头看去。

  那几行伪代码写得清清爽爽,递归的调用顺序标注得明明白白。

  他一行一行往下看,心里那层窗户纸哗一下就破了。

  “这……这不就是编译原理教材里讲的语法树后序遍历吗?怎么我一直没想到用递归来……”

  他差点想说“用递归来做表达式转换”,但话到嘴边,他自己先愣住了。

  因为他突然意识到,他不是“没想到”。而是他这些年来,从来只在“栈“这一个框架里打转。

  因为栈是这个问题公认标准解法,书上这么写,同行这么做,他在无线电厂写的每一个工控程序也都是这么写的。

  所以他从来没有想过,这件事可以不这么做。

  可眼前这个比他还小十几岁的年轻人,似乎压根就不觉得栈是唯一的路。

  彭远征忽然想起自己在无线电厂那十年,那本油印编译原理教材时,书里有一页专门讲了“递归下降法”。

  但那一页印得太模糊了,油墨糊成一团,只能勉强辨认出几个标题。当时他没在意,翻过去了。

  现在想来,他可能错过了一扇门。

  “递归下降解析法,是这几年国外在嵌入式编译器里应用得比较多的一种方法。”陆怀民说:

  “它比栈更灵活,能处理更复杂的语法结构,而且代码结构清晰,调试方便。如果我们课题组要做后处理编译器,这个方法可能用得上。”

  彭远征点点头,心里翻涌着说不清的滋味。

  “陆……”他抬起头,一时竟不知该怎么称呼,“陆师弟,我能问一个问题吗?”

  “请讲。”

  “在递归下降的基础上,如果要处理更复杂的语义——比如说,数控代码里的循环、跳转、宏定义这些指令,你准备怎么设计语法规则?”

  陆怀民笑了笑,反问:“彭师兄觉得呢?”

  彭远征陷入了沉思。

  陆怀民问的这个问题,他感受到的不是考较,而是一种邀请。

  邀请他一起来思考。

  “我觉得……”他思考了一会儿,斟酌着字句:

  “可以在词法分析阶段,先预定义一个关键字表。解析器读到循环指令L的时候,递归下降把循环体里面的所有G代码指令打包成一个中间表示子结构……”

  他顿了顿,忽然觉得这个思路很顺,继续说:

  “最后,把中间表示统一展开成目标机床的G代码。这样一来,如果目标机床换了G代码方言,只需要改最后展开那一步,前面的解析逻辑完全不用动……”

  说完,他自己都被这个想法的清晰度惊了一下。

  “对。这其实就是分层编译的思想。”陆怀民点点头:

  “把编译过程拆成前端和后端。前端解析语法,生成中间表示;后端把中间表示翻译成目标代码。这样一来,前端不变,后端可以适配任意一种数控系统的G代码方言。

  彭远征看着陆怀民,心里忽然有些复杂。

  他在编译这个行当里埋头啃了十年书,一直以为自己是懂编译的。

  可刚才陆怀民提到的那些东西,比如递归下降、分层编译、中间表示,这些东西也不是什么复杂前沿的东西。

  但从来没有人告诉他,这些零散的知识可以这样串起来,可以用在一个实实在在的工程项目里。

  就好像学拳的人练了十年基本功,却从来没打过一场真正的拳。

  现在,对练的对手站在他面前。比他年轻,比他资历浅,但一伸手他就知道,这人的功夫是真的。

  确实厉害。

  彭远征忽然笑了笑,笑容里有敬佩,也有服气。

  陆怀民继续说道:

  “彭师兄刚才提到,其实对应的是中间表示层的设计。但一个真正能用的后处理编译器,最复杂的往往不是语法,而是语义。比如,五轴联动的非线性误差补偿,在中间表示层怎么建模?”

  彭远征的呼吸微微一滞。

  五轴联动。非线性误差。

  这是数控机床领域真正的工程难题。

  “我……”彭远征斟酌着字句,“数控机床的运动学模型,我没有深入研究过。但如果只是从编译器设计的角度来看,误差补偿可以抽象成一种后端优化pass,在生成目标代码之前,对刀位轨迹做一次坐标变换……”

  他说到一半,自己停住了。

  因为他忽然意识到,他说的“坐标变换”,其实暗含了一个前提。

  编译器必须能精确理解机床的机械结构。而传统的编译原理,从来不教这个。

  陆怀民点了点头,说:

  “彭师兄说得对,那确实是一个优化pass。但这个pass的有效性,取决于你的中间表示能不能承载机床的运动学模型。”

  他顿了顿:

  “这恰恰是我们这个课题组要解决的核心挑战之一。传统的编译不涉及数控机床的运动学,而传统精密制造的教材又不会讲编译器怎么设计。我们这个课题,要把这两件看起来不相干的事,真正捏在一起。”

  “彭师兄刚才提的中层表示结构,如果能把运动学信息也建模进去,那这套编译器就不止是一个翻译工具,而是一个能理解物理规律的工程平台。”

  他顿了顿,合上了面前的笔记本,主动朝彭远征伸出手。

  “今天就聊到这里吧。彭师兄,感谢你来参加面试。”

  彭远征站起身,和陆怀民握了握手,又朝钱振华和沈一鸣的方向各鞠了一躬。

  他转身往外走时,脑子里翻涌得厉害。

  刚才那十分钟,确实让他有一种醍醐灌顶的感觉。

  他不确定自己能不能通过面试顺利加入课题组,但他确定一件事:今天的面试,来对了。

  如果错过这个课题组,他会后悔。

  走廊里的气氛有些微妙。

  彭远征走出来的时候没说话,脸上也看不出什么表情。

  朱明成第一个凑上去。

  “彭老大,怎么样?”

  “邪门。”彭远征想了想,吐出一个词。

  朱明成一愣:“怎么你也是邪门?题目太难?还是故意出偏题为难你?”

  “题目不难。”彭远征靠在墙上,想了想,补充道:

  “只能说他做出那么多成果,真不是凭空来的。确实厉害,盛名之下无虚士。”

  走廊里安静了一瞬。

  朱明成看着彭远征,忽然觉得这个平时什么场面都见过的老大哥,这会儿说这两个字时眼神里带着一种少有的服气。

  “面试来对了。”彭远征把帆布包往肩上一挎,“大家加油。这个课题组,值得进。”

章节目录
书友推荐: 给暴戾的他喂颗糖 斗罗:从签到女神开始 我的山寨系统真要命! 春厢秘史 前女友失忆了 禁区 铠甲勇士:开局奖励五行血脉 穿成万人迷猫崽[穿书] BT西汉采菊记 六个大佬是我哥 只想和你在一起 娇娇和猎户by 重生之醋夫总想独占我[现代女尊] 网游之重生毒莲 海贼之剑魔大将 系统让我兴国 从末世重生士兵突击 弃妃狐宠 国家机器[末世] 一梦钟情