实践计算机系统要素—编译器(1)

 

2009.11.08    晚上  于浦东家中

 

每当有所收获,便欣喜若狂,每每这时都非常渴望能够将这份喜悦与大家一起分享。我读过计算机书籍不能算多,但也不少,给我冲击最大的有三本书,游戏编程大师技巧(3D版),道法自然,计算机系统要素,大师技巧让我感慨怎么能有人将游戏开发讲解的如此透彻,让人感觉直击理论本质;道法自然让我感觉到了软件工程和设计模式在实际中是如何被应用的,计算机系统要素这本书,我个人认为,所有希望在计算机方面有所建树的人都该读的一本书。

 

大学毕业的时候,我虽然写过几个程序,但我自己内心明白,自己是经不起推敲的,自己对计算机有太多的不解,我不了解计算机怎么就能运算,我不了解计算机芯片结构对程序有什么影响,我不了解操作系统到底是怎么开发出来的,最可悲的是,我不了解我该如何去了解我所不了解的东西。当我第一次在书店看到计算机系统要素的时候,我一下子兴奋了,这是什么!!这不就是我苦苦寻找的很多问题的答案吗。我第一个反应就是,这本书的作者太厉害了,太XX了。接下来时对这本书详细的阅读,我可以很负责的说,这本书从第一页到最后一页包括封面上的广告都至少看了两遍,但现在对其中有很多地方还是不甚解,自我反省了一下,觉得造成我现在看上去懂了,其实还没有懂的本质原因是没有真正动手去实践!这本书作者非常强调的一个阅读过程就是实践,实践,再实践,现在也明白了作者的良苦用心了,所以我打算彻彻底底的将这本书实践一次,虽然实践的结果基本在我们的工作中用不上,但我相信,总有一天它会提升我们的价值的。

 

这本书介绍了从电路到OS的整个一个过程,我该如何实践呢?从前到后,我怕我中途停止,因为前边好长一个阶段都很难让我兴奋,我比较偏好软件开发,所以选择了我最觉得有意思的部分开始,也就是编译器的开发。编译器的开发一方面我觉得非常有意思,可以构建自己的程序语言,另一方面,这个任务在很多工作中都间接的被用到,当然还有一个方面就是,我前段时间在工作中写了一些简短的脚本分析工作,具体内容就不详细说了。所以最后我定下的实践流程是:编译器,VM翻译器,汇编翻译器,基本电路设计,计算机系统模块构建,OS构建,Demo设计。

 

编译器设计这里,我将完全按照书中JACK语言的规范来进行,在没有完成书中的编译器之前,不会考虑为JACK添加其它特性。

 

虽然编译器这里我按照自己的设计逻辑来进行设计,但我知道,我的设计很多都来源于书中,即使不是直接来源于书中,我相信那也是间接来源于书中。从整体上来看,编译器分为两个模块来构造,书中对这种设计提出了很多优点,我认为最为重要的一条就是,它将理解程序与翻译程序进行了剥离,减少了耦合,增强了扩展性。因为要对理解程序模块的正确性进行验证,我需要能够显示的看到理解结果,书中在这个问题上采用了将结果写入XML文件的方式,我觉得这是个好的方法,也将准备这么处理,但书中并没有将这个XML做为第二个阶段翻译程序的输入,但我认为将XML文件作为第二个阶段的输入虽然降低了处理效率,但它却更好的减少了耦合,方便我们以后为JACK加入一些新的特性。

 

编写JACK语言的理解程序,我这里分成了几个大的步骤:

1、整理JACK语言规范、特性;

2、编写字元处理程序,将输入程序翻译为有意义的字元序列

3、按照JACK语言规范,理解字元序列,并输出为响应XML数据文件

 

举个简单的例子:

假如JACK语言规范规定,JACK语句形式为:Set var = 整数;

现在输入语句:set t1=20;

字元化操作将得到:

Set(动作标识)t1(变量)=(运算符)、20(常量整数)、;(结束符)

理解字元序列模块将生成如下数据:

<语句>

<动作>set</动作>

<变量>t1</变量>

<赋值符>=</赋值符>

<常量>20</常量>

</语句>

 

以上仅仅是个示意性的例子,具体的处理结果内容,格式都将在后边的文章中给出详细描述。我预计后边将分为三篇文章来完成上诉三个方面,字元处理结果格式,以及理解内容XML的格式都在下一篇文章中给出。

 

希望每一个阅读我文章的人都能有所收获,真诚推荐大家阅读计算机系统要素这本书。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值