编译原理到底该怎么学?

2019-04-12 09:17:49 +08:00
 Sanko

国防工业出版社 陈火旺前辈的教材实在是难懂

4593 次点击
所在节点    问与答
18 条回复
cyberCat
2019-04-12 09:27:25 +08:00
龙书、虎书
Mithril
2019-04-12 09:27:50 +08:00
如果觉得上来就怼理论比较难理解的话,可以先试试写一些小的 parser。
比如正则的 parser,或者 JSON parser。这样就能理解这门课程学的理论是做什么的了。
然后自己用 ANTLR 一类的东西看看怎么生成一个 parser,如何去描述语法和词法。
国内的理论教材基本不会考虑学这个东西到底有什么用,你自己结合一些实践可能会比较好理解。
Yapie
2019-04-12 09:28:24 +08:00
写一个小语言.教程很多
feather12315
2019-04-12 09:46:41 +08:00
程序员的自我修养,入门看这个就行了。
至于深入,做编译器相关的工作吧
wsyzzz
2019-04-12 09:46:42 +08:00
我现在也正在学编译,建议入门先别跟着教科书学,中国出的教材就不谈了,龙书我刚才是看也很头疼,根本看不下去。
我的建议是先跟着 CS143:Compilers 看视频和小测验(有字幕,需要英文读能力),楼上说的实践在这个课程的编程作业里也有,GitHub 上也很多答案。然后因为这里面倾向于给你梳理整体框架和概念,视频时长限制讲的也比较简单,并且英文可能也搞不清楚是哪些名词,所以就对照着龙书的章节,以书作为补充和名词翻译。
另外要搞清楚学编译原理要干什么,有所侧重、不求甚解,比如我是需要了解语法分析相关,可能后面的 Java 虚拟机我就不需要很深入的学习。

附课程网址: https://lagunita.stanford.edu/courses/Engineering/Compilers/Fall2014/course/
lincanbin
2019-04-12 10:04:20 +08:00
看公开课
letianqiu
2019-04-12 10:17:11 +08:00
龙书不适合入门,龙书对于前端虽然讲得很详细,但是内容安排有很大问题,不连贯,跳跃性很大。可以先看 engineering a compiler, 配合 http://www.craftinginterpreters.com/ 。谷歌的员工写的,代码质量很不错
hmzt
2019-04-12 10:55:49 +08:00
知道词法分析和语义分析咋回事就行了,不是做编译器的没必要太深入,后面中间语言的生成和优化都可以不看
EricXuu
2019-04-12 11:21:53 +08:00
可以用 flex 和 bison ( lec 和 yacc )写一个计算器,就能疏通一遍了
CTO
2019-04-12 11:35:44 +08:00
同上,写个小 demo 理解编译器大致的流程就可以了
scalaer
2019-04-12 12:16:27 +08:00
之前学习逆向的时候看过王爽的汇编语言, 没有坚持下去。。
svenFeng
2019-04-12 12:29:38 +08:00
人家是想学编译原理,不是想学 parser 原理,都答的啥啊。。。去看 eopl,在写各式各样的解释器就懂不少东西了,再挑喜欢的方向深入,比什么各种编译器书高多了
seraphv3
2019-04-12 12:49:58 +08:00
大学时学过虎书 C 语言版本第一部分,在书的指导下做了一个 C 语言子集的编译器,架构都是按书上来的。按书上写了一个实现寄存器分配的后端,之后再没有遇到过什么程序比这个后端更复杂的。
虎书 C 语言版的特色在于它的函数式风格的 C 语言代码,不管什么都用链表或树,完全不用数组;而且完全不使用变量,也就是说不会对一个标识符进行初始化赋值之外的赋值
hakono
2019-04-12 12:51:57 +08:00
如果我这时候说从计算机原理的自动机开始学会不会被打。。。。
FrankFang128
2019-04-12 12:52:41 +08:00
神书:《计算的本质》
你看了第一章就会回来谢我了。
FrankFang128
2019-04-12 12:53:07 +08:00
前面有一章讲 Ruby,那个不算第一章~
Heanes
2019-04-12 15:04:52 +08:00
之前大学学编译原理,没学懂。。现在也想好好学一下
agagega
2019-04-12 16:51:58 +08:00
陈火旺那个书就 tm 不是中文

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

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

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

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

© 2021 V2EX