用户注册 登录
珍珠湾全球网 返回首页

岳东晓 -- 珍珠湾全球网 ... http://ydx.zzwave.com [收藏] [复制] [分享] [RSS] 岳东晓 -- 珍珠湾全球网

日志

学习经历 - COMPILER (1)

热度 3已有 6576 次阅读2015-9-21 03:47 |个人分类:往事|系统分类:教育| 理论物理, 明尼苏达, 计算机, 研究生, 免学费

明尼苏达大学有个非常开明之处,就是拿着TA或者RA的研究生可以自由选其他系的课程,或者注册其他系的学位,学校完全免学费。有一段时间,除了在做理论物理的研究之外,我同时在电机系与计算机系攻读学位。后来,电机系的学位我放弃了,集中精力研读计算机。计算机这东西,我经常说的,只要认字有一定的逻辑能力,都可以学,没有什么门槛,一般人都能拿着编程课本依样画葫芦,copy &  paste, trial and error,虽然辛苦,也能混。但是正宗计算机专业的与那种半路出家的有着关键区别,那就是 compiler  与 operating system。掌握了这两门,才能算是计算机专业人士。

所以,我选 COMPILER 课时相当投入。期末的 project 教授要求做一个 C++ subset 的 compiler,编译成汇编语言,在 DLX 模拟机器上运行。我动手之后,发现其实做一个完整的 compiler 也不见得就会多花多少时间(当然不包含代码优化等)。C++ Annotated Reference Manual 后面有完整的语法规则。于是我着手建立整个 C++ 的 parser。这一动不要紧,立刻遇到很多语法的歧义问题。我使用的是 LALR parsing,最常见的问题就是 shift-reduce conflict。相关核心问题突破之后,生成代码相对来说就简单些了 -- 因为没有优化的考虑,只需准确生成编译代码。

明尼苏达是Quarter 制,一个学期不到三个月。整个项目也就两三个星期时间,但是经过一阵高强度的工作之后,整个编译加上各种测试在 DLXSIM 上完全成功。当时的心情可以说相当的欣慰。润之曰:“世上无难事,只要肯登攀。” 信乎。

当然经过这个工作,获得的知识不仅是编译,也包括对C++/C 语言本身的理解。如果不懂一定的编译,对于这些语言中的一些 tricky 的地方是无法真正理解的。

我第一个工作是在一家 Startup 作为服务端的主要开发人员。该公司购买了某公司的一个中间件软件,价格相当昂贵,但存在很多问题。其所用的IDL (界面语言)编译器明显存在 hack 的现象,中间用 sed 之类进行了一系列简单的变换。当时,公司使用的客户端是 PowerBuilder,而这个中间件软件不能生成 PowerBuilder 的源代码,得由程序员自己手写,而这些程序员对服务端的东西不熟悉,很容易出错。我于是着手编写了一个编译器,完整地 parse 其IDL (因此能准确地指出输入的语法错误),而且直接生成 PB 代码。

在服务端,由于存在大量的类似重复的数据库调用(数以百计的数据表、有的数据表有上百个 column ),手写非常的 tedious ,也容易出错。我写了个简单的程序,自动生成 C 源代码,把我的工作量减少了一半不止,乐得悠哉悠哉。当然我也把这个程序给另外两名同事分享了,大家都轻松了不少。


路过

鸡蛋
2

鲜花

支持
1

雷人

难过

搞笑

刚表态过的朋友 (3 人)

 

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 用户注册

Archiver|手机版|珍珠湾全球网

GMT+8, 2024-4-26 03:28 , Processed in 0.018065 second(s), 8 queries , Apc On.

Powered by Discuz! X2.5

回顶部