- 论坛徽章:
- 2
|
本帖最后由 剑魂箫心 于 2016-08-10 10:18 编辑
1. 你平常用哪种语言编写程序?用什么编译环境?
我工作中主要使用C语言,因为我是做gnome开发的。编译环境就是gcc和gtk+函数库了,也会用到glib函数库。自己写的小工具如果要界面就用Java,不要界面的话就用Python。我还会AT&T汇编语言,不过现在很少直接动手写汇编,只是看汇编代码而已。C++这门语言一直是我的痛,太难了,大学学的现在忘得干干净净,而且如果工作不需要的话我是永远不会学C++的......
2. 你熟悉编译原理吗,了解词法分析、语法分析、上下文无关文法、IR、LL(k)文法、LR(k)文法等术语吗?
大学学编译原理那会儿我可是费尽心机啊,学校的教材是国防科大出版的那本《程序设计语言编译原理》,真的是很难懂,看这本书简直找虐。大名鼎鼎的龙书《编译原理》看起来也是很有难度,后来从图书馆借出了《编译器设计》这本书,那看的是相当爽,思路清晰还有伪代码,堪称天下奇书,而且这本书在我们本科校区图书馆没有,我专门坐车40分钟跑到研究生校区借来的。我还从孔夫子旧书网买了本上个世纪出版的绝版书——Kenneth C.Louden的《Compiler Construction: Principles and Practice》,这本书估计已经成孤本了。不过一学期时间毕竟有限,也没深入学习多少,学完中间代码生成那部分基本就要期末考试了,而且考试内容比较死板,还要抽出时间复习。
词法分析、语法分析、上下文无关文法、IR、LL(k)文法、LR(k)文法这些术语是每本编译原理书里都会讲到的,在《编译器设计》这本书里讲的尤其清楚,我当时的感觉我现在还记得,简直是醍醐灌顶!!!不过,现在早已忘得差不多了,毕竟工作内容和编译器没有什么交集。
当时做课程作业我还用C语言写了一个简单的计算器语法的词法分析器+语法分析器,直接在文本文档里写上一系列3/4+(1+12/6*7)=?这样的算式,然后经过词法分词、语法分析、文法分析后就可以算出结果,还是很有成就感的。
3. 你了解过lex/yacc吗?使用它们做过分析吗?
这两个工具当年学编译原理时学过,但是也就当时做作业用了下,后来再也没用过。据说这两个工具可以直接用来构建出编译器的词法分析和语法分析部分,也就是说编译器前端靠这俩工具就能完成很大一块功能。
4. 你想过自己设计一种语言,并为之设计编译器吗?如果你想设计,那你该如何一步步的做呢?
我非常想实现一下c语言编译器,即使是一个小的子集。《Compiler Construction: Principles and Practice》这本书就是在最后实现了一个小编译器,不过和c语言还是有点区别的。我想,学习做编译器的过程会加深对已存在编译器的理解,比如gcc编译优化的原理等等。实现编译器的全过程我只知道个大概,编译器前端里面的词法分析、语法分析这两步可以借助lex/yacc,不必完全自己重复造轮子,语义分析开始就要自己做了,经历了中间代码生成之后就要进入编译器后端了,后端包括代码优化和目标代码生成以及优化,这会涉及与机器架构相关的部分,那就是相当麻烦的事情了。我对汇编层很感兴趣,曾经还专门找资料学习过二次遍历汇编器(Two-pass assembler)的原理,那会儿在学一些关于内核底层的东西,所以就顺带看了下,对理解汇编指令转化为机器码的过程很有帮助。
最重要的是!!!编译器/操作系统/计算机图形学 这三者并称为计算机领域的三座大山,如果能有机会攀登一下那对于自身来说将会是非常大的提高!!! |
|