怎么开始动手自己写一个编译器,编译器的理论学习该从何处下手?

2017-07-03 09:47:28 +08:00
 pythonee
当初不好好学习,基础性的东西还是太少,想补回来
现在还是想 from scratch 的学一下,想实现把一份源代码到可执行文件串起来
不知各位有什么好的学习路径,有哪些好的视频或教学系列吗
8032 次点击
所在节点    程序员
29 条回复
keelii
2017-07-03 09:52:50 +08:00
tuteng
2017-07-03 09:54:08 +08:00
josephpei
2017-07-03 10:01:47 +08:00
斯坦福大学幕课 编译器,理论加编程作业,实现一个教学语言编译器,从词法分析到代码生成与优化(需要学习汇编呦)
https://lagunita.stanford.edu/courses/Engineering/Compilers/Fall2014/about
johnlui
2017-07-03 10:17:41 +08:00
给一楼跪了。。。。

奉劝新人不要第一门语言选 js,会走上邪路的。。。。
atempcode
2017-07-03 10:22:33 +08:00
SuperMild
2017-07-03 10:33:01 +08:00
最经典的是龙书吧
lyram
2017-07-03 10:41:57 +08:00
小叶子?~
Pyjamas
2017-07-03 10:44:10 +08:00
我看着 LLVM 的教程写了个前端,还没优化
[LLVM 教程_CN]( http://llvm-tutorial-cn.readthedocs.io/en/latest/chapter-1.html)
[LLVM 教程_EN]( http://llvm.org/docs/tutorial/LangImpl01.html)

还有这个我没怎么看过的 http://compilers.iecc.com/crenshaw/
zdkmygod
2017-07-03 10:49:20 +08:00
入门难度的话就《自制编译器》,日本人的书很多细节都描述到了,适合入门。
Kilerd
2017-07-03 10:49:54 +08:00
编译器最好不要用脚本语言写,虽然很舒服。 不过学不到什么东西的。

我的编译原理课程就是全部用 python 写的,写起来贼快。

可是,思路完全跟 用 C 艹 写出来的不一样。
Shura
2017-07-03 10:50:26 +08:00
onemach
2017-07-03 10:58:33 +08:00
左鲸右虎中恶龙
bombless
2017-07-03 10:59:59 +08:00
以前莱斯大学编的一本编译器工程不错的
前端后端都有
lrxiao
2017-07-03 11:11:20 +08:00
怎么感觉都是前端...求后端优化 /字节码生成的教程
aidchow
2017-07-03 11:15:26 +08:00
明天编译原理期末考试
Pyjamas
2017-07-03 11:17:18 +08:00
Pyjamas
2017-07-03 11:17:37 +08:00
@aidchow 距离考试还有 2 小时 13 分
miaoever
2017-07-03 11:28:50 +08:00
以下的书都是我自己看过的:

1.纯入门的话,推荐 <自制编译器> 作者: [日] 青木峰郎
这本书用  Java 完整实现一个类C语法的可生成汇编代码的编译器。好处在于非常注重实战,但是又适度的介绍了相关的理论知识,对形成编译器整体的概念有很好的帮助。更好的是,对于大部分程序员日常的需求(比如工作中写个 DSL, 写特定格式文件的 Parser 等等)来说,掌握本书所讲的内容及工程实践基本能够应对了。

2.<编译原理及实践> 作者: Kenneth C.Louden
这本是我们的教材。这本书最大的缺点在于中文翻译极其差。但是就书本身来说,实现了一个简化的 C 语言编译器, 理论部分也讲得通俗易懂,特别是对于前端相关的知识相对于龙书来说详略得当,对初学者相当友好。相对于上一本来说,由于是编译原理教材,会更多的涉及相关的理论知识,适合为深入的学习编译器相关内容做理论铺垫。

3.<编译器设计> 作者: Keith Cooper / Linda Torczon
这本书对编译器后端的知识覆盖的非常好,我是通过这本书开始比较完整系统的入门了后端相关的内容(之前看过龙书没怎么看懂)。作为<编译原理及实践>之后的学习材料,我个人认为非常合适。

根据我个人的感受,按照以上三本书的路径循序渐进的入门是比较合适的。另外,以上的内容看着很多,其实真正入门后学起来很快,特别是前两本书的内容(更偏重前端),我相信如果是在校学生的话,一个暑假的时间搞定前两本不是不可能的。
gomars
2017-07-03 12:34:05 +08:00
洗洗睡了吧,基础不好还写编译器?
daimao
2017-07-03 12:48:06 +08:00
建议跟着这几门课学一下

15-213 还有 15-411

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/372589

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX