编译原理大家是怎么学习的?

2021-09-17 13:06:27 +08:00
 paranoiddemon

非科班,最近在看 Enginnering a compiler 。看第二章 scanner 部分讲正则和自动机还勉强能理解。 第三章 parser 讲 CFG 引出了一堆符号和概念,感觉完全看不明白。

不知道大家是怎么学的,有没有更基础的视频课程推荐或者其他更入门的书推荐的?

10747 次点击
所在节点    程序员
69 条回复
ipwx
2021-09-17 13:17:54 +08:00
楼主觉得不明白,是因为楼主假设这里的定义是别人用过的,肯定有更详细的定义。但其实。。。

这里就是完整定义了啦!
====

读过论文的都知道,论文里面对于新符号的定义也就这么点篇幅。
ipwx
2021-09-17 13:18:10 +08:00
顺便这里其实定义了这些符号。。。
ipwx
2021-09-17 13:18:40 +08:00
不同文献的定义其实各有不同的,没有 universally consistent 的定义。读这种文献的一个重要技能就是快速适应新的符号系统 2333
MeatIndustry
2021-09-17 13:42:04 +08:00
B 站搜索斯坦福编译原理。
这个确实抽象的一批,如果能亲自做个根据 CFG 解析的 Parser,则好理解的多。
zjsxwc
2021-09-17 13:48:02 +08:00
额,以前我是看中文教程, 裘巍《编译器设计之路 》设计 pascal 的书, 当时龙书我也看得头疼。
echo1937
2021-09-17 13:57:42 +08:00
楼主是学生还是工作了,学习编译原理是爱好还是工作需要

我学了好几次了,都没坚持下去。
Cola98
2021-09-17 14:01:09 +08:00
如果只是为了做东西的话,就可以跳过这些定义,直接上手做就行了
ch2
2021-09-17 14:04:35 +08:00
根据我的学习经验,编译原理你学学 LL(1)就行了,LR 的资料非常少
github 上能按教科书级别把 LR 语法分析器代码实现的稍微像点样的项目一只手就数的过来
学别的至少你都有很好的参考,编译原理到实际用的时候通常都是离底层词法跟语法分析器很远的库直接调就行了
是我去解决能用到编译原理的问题,我肯定直接正则表达式+yacc 就一把梭了,LALR(1)的算法跟原理细节学了你也没多少机会复盘,不像别的课程可以常学常新
paranoiddemon
2021-09-17 14:06:07 +08:00
@echo1937 工作了。属于是爱好吧,比较好奇高级程序语言是怎么变成机器指令的。确实要学下去难度比较大
paranoiddemon
2021-09-17 14:06:37 +08:00
@MeatIndustry 好的,感谢。我周末找来看下
paranoiddemon
2021-09-17 14:08:09 +08:00
@ipwx 感谢回复,就是以前没看过看 CS 理论的文献。突然很多符号,有点适应不了
Junzhou
2021-09-17 14:09:36 +08:00
我毕业了之后就再也没有看过编译原理了。。。
ch2
2021-09-17 14:10:31 +08:00
顺带提一句,排行榜里排得上号的编程语言的编译
为了追求灵活性跟性能,基本上都是用非常特化的方法处理的,一门语言一个 case
你在教科书上学的通用编程语言语法分析器的设计,在实际中只是非常基础并非不能不用的那种
不像你学网络那就绕不开 socket 、epoll 这些,基本上可以说学了就是屠龙
paranoiddemon
2021-09-17 14:10:58 +08:00
@ch2 其实我还不太清楚 LR LL 是什么,不过你的建议我先记着
paranoiddemon
2021-09-17 14:15:19 +08:00
@ch2 好的,非常感谢你提供的信息,工作中目前确实甚少用上编译器相关的知识,主要还是因为个人兴趣。加上本来本科也没上过相关课程,还是希望知识体系稍微完整一些。
misaka19000
2021-09-17 14:16:23 +08:00
有一本书叫做《自己动手写虚拟机》?具体名字不记得了,日本人写的,个人觉得还不错,相关的内容也做过一些笔记:
https://www.nosuchfield.com/2017/07/16/Talk-about-compilation-principles-1/
https://www.nosuchfield.com/2017/07/30/Talk-about-compilation-principles-2/

此外我之前写过一个解析四则运算的小玩意儿,楼主有兴趣可以看看:
https://www.nosuchfield.com/2018/10/22/Implementing-four-arithmetic-operations-with-golang-compiler/
misaka19000
2021-09-17 14:21:43 +08:00
再给楼主贴一些资料

https://pandolia.net/tinyc/index.html
paranoiddemon
2021-09-17 14:23:32 +08:00
@misaka19000 看了下这个似乎没那么理论化。谢谢!
Exin
2021-09-17 14:23:37 +08:00
动手做一个最简单的,就学会了
kuro1
2021-09-17 14:38:16 +08:00
写个 PL/0 编译器

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

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

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

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

© 2021 V2EX