[讨论] 按由浅入深的顺序阅读哪些书籍来学习编译原理

colin4124 2014-05-19
当看到图灵出版的《自制编程语言》(原版「プログラミング言語を作る」)、《自制脚本语言》(原版「2週間でできる! スクリプト言語の作り方」),我觉得玩编译器/解释器,并且能实现自己的编程语言是一件非常有趣的事情。 经常听到对龙书的赞誉,所以希望能够有一定基础才去看这本“圣经”。 我目前只有 C 语言的基础,如果会 Java的话,第一本可以换成《自制脚本语言》。所以打算阅读的顺序是: 《自制编程语言》、《编译器设计》(Engineering a Compiler)虎书、龙书。 首先选择的这些书合理吗?会不会重叠的部分太多,降低实用性? 其次这个学习顺序是由浅入深的吗? 我的目的是想掌握编译原理这门课程,把这个基础打牢了。
subchen 2014-05-19
如果只有 C 语言的基础的,建议找本大学编译原理课程的书来看看,龙书太深奥了,很难懂。

《自制编程语言》写的真不咋的,建议看 《Language Implementation Patterns》 这本书。

其他两本没看过,不发表意见。
beanLam 2014-05-19
自制编程语言不需要基础?
colin4124 2014-05-19
subchen 写道
《自制编程语言》写的真不咋的,建议看 《Language Implementation Patterns》 这本书.


谢谢,《自制编程语言》写的是太浅显了,还是怎么样呢?能简单说说它的缺点吗
ZHH2009 2014-05-19
这是我学编译原理的书单,https://github.com/codefollower/My-Blog/issues/1

直接转到 <1.8 程序语言理论与编译原理>


说实话,编译原理并不好学,
如果只是一时兴起只想玩玩,还是别玩了,别给自己添堵。
colin4124 2014-05-19
ZHH2009 写道
这是我学编译原理的书单,https://github.com/codefollower/My-Blog/issues/1

直接转到 <1.8 程序语言理论与编译原理>


说实话,编译原理并不好学,
如果只是一时兴起只想玩玩,还是别玩了,别给自己添堵。


谢谢,目前确实是一时兴起,但是真心想试试,比较这门课学校是要学的,与其被动的按老师的安排学习,不如先自己预习
RednaxelaFX 2014-05-20
我得码点字来回复楼主的问题。请耐心等待一阵…

但我想先简短回应subchen的评论。《自制编程语言》跟《编程语言实现模式》覆盖的知识点相当不同,使用的实现语言也不同。在它们之间选择哪本“更好”很大程度取决读者自己的知识背景、需求以及个人偏好。对我来说,后者的作者Terence Parr在实现编程语言的领域更专业更靠谱,但就书本身而言我更喜欢前者。
Terence Parr之前写的ANTLR3书和后来写的ANTLR4书我都很喜欢。就是中间那本语言实现模式我不太喜欢…内容太跳跃。

等我慢慢码字说明原因…
rink1969 2014-06-03
其实有另外一条路可以走。
学习scheme,然后看SICP。
学习一点lambda演算相关的东西。
看 http://matt.might.net/articles/ 上面的文章。
你会发现搞C和java之类的,其实很多精力都放在语言的琐碎细节上了。其实实现个parser或者解释器是很简单的事情。
如果要考虑一个比较完整的函数式编程语言的实现,可以看 http://research.microsoft.com/en-us/um/people/simonpj/papers/slpj-book-1987/

如果没有历史包袱,也没有很强的功利目的,研究着玩的,这条路其实相对要好走。
_wzq_ 2014-06-03
rink1969 写道
其实有另外一条路可以走。
学习scheme,然后看SICP。
学习一点lambda演算相关的东西。
看 http://matt.might.net/articles/ 上面的文章。
你会发现搞C和java之类的,其实很多精力都放在语言的琐碎细节上了。其实实现个parser或者解释器是很简单的事情。
如果要考虑一个比较完整的函数式编程语言的实现,可以看 http://research.microsoft.com/en-us/um/people/simonpj/papers/slpj-book-1987/

如果没有历史包袱,也没有很强的功利目的,研究着玩的,这条路其实相对要好走。


用工具实现确实不算太难,手写词法语法分析器,或者手写词法语法分析器生成器,就没那么简单了。现实计算机体系就是基于side effect的计算模型,过程式语言就是因此而流行。函数式语言内部实现要绕个圈子,至少我没觉得有什么好处。
budao 2014-06-04
_wzq_ 写道
rink1969 写道
其实有另外一条路可以走。
学习scheme,然后看SICP。
学习一点lambda演算相关的东西。
看 http://matt.might.net/articles/ 上面的文章。
你会发现搞C和java之类的,其实很多精力都放在语言的琐碎细节上了。其实实现个parser或者解释器是很简单的事情。
如果要考虑一个比较完整的函数式编程语言的实现,可以看 http://research.microsoft.com/en-us/um/people/simonpj/papers/slpj-book-1987/

如果没有历史包袱,也没有很强的功利目的,研究着玩的,这条路其实相对要好走。


用工具实现确实不算太难,手写词法语法分析器,或者手写词法语法分析器生成器,就没那么简单了。现实计算机体系就是基于side effect的计算模型,过程式语言就是因此而流行。函数式语言内部实现要绕个圈子,至少我没觉得有什么好处。

额,难道你没听说过在大型并发软件系统当中,因副作用导致的各种恐怖问题么?
Global site tag (gtag.js) - Google Analytics