学完编译原理你有什么收获?

2016-01-09 17:19:09 +08:00
 Zeahoo

这个学期选了编译原理这门课,但是我只有学会了几种语法分析的方法,比如 LR(0), LR(1), SLR(1) 等……想问大家学了这门课都了解了一些什么?这些语法分析的方法对我们实际写代码或者理解代码有什么用处?

15467 次点击
所在节点    程序员
74 条回复
SPACELAN
2016-01-09 17:38:20 +08:00
用来装逼,逼格还是挺高的
fy
2016-01-09 18:18:43 +08:00
用来装逼: https://github.com/fy0/tinyre
这门课赋予了你构建软件行业基石的能力。
xiandao7997
2016-01-09 18:23:37 +08:00
上次看到在 v2 有人在写 markdown 解析器时用到了编译原理里的一点知识
codesun
2016-01-09 18:28:43 +08:00
如果只是讲解了文法分析,那还叫编译原理吗?至少有语义制导,三地址码翻译吧?就是没有学优化和 codegen 的内容,光用这些内容,也够你写个玩具语言了,难道这对你理解现存的语言没有任何帮助?
Zeahoo
2016-01-09 18:42:27 +08:00
@codesun 好吧,你说的我都听不懂,文法分析这一部分也是很吃力的学下来了,至于你说的语义制导,三地址码翻译我刚才看了目录才发现有这些东西。这门课学的时候也是迷迷糊糊的ˊ_>ˋ,看来还是要继续往下看~
fetich
2016-01-09 18:42:57 +08:00
保研要用的……
EchoChan
2016-01-09 18:57:11 +08:00
我们老师在最后一节又苦口婆心地跟同学们说,你们丫,不要每次遇到一些需要学习的东西就问有什么用?你让我怎么说呢?一个东西的用途不仅仅因为它的性质,更多的是它应用的潜在价值。你了解了它的产生背景,你就知道人们当初发明、发现、研究它的原因了,但是我跟你说它的当初的作用你也不会感兴趣的 。
他举了几个例子,想说明的无非就是我们这一代人的浮躁以及功用主义。
holulu
2016-01-09 18:59:24 +08:00
能玩的东西多了。
EchoChan
2016-01-09 19:04:14 +08:00
诚然我是认为教材的内容编得不好,提高了学生对课程的理解。

很多地方如果有图表影音来降低学生对知识理解的门槛,然而都是干巴巴的文字。并不是每个人都智商超群,也并不是每个人都能做到时刻专注。对于很多学生来说,这门课确实就是艰涩难懂。

你说到对于码代码有什么用,我觉得这门课主要让人认识到不一样的思维模式。具体而言就是使得在未来进行问题求解时能有不一样的思路。
aisk
2016-01-09 19:11:14 +08:00
@EchoChan 我觉得他要是能说清楚到底有啥用也就不用这么废话了。
EchoChan
2016-01-09 19:28:12 +08:00
@aisk TM 的要怎么说清楚,既然说不清楚那还不如引导那些有意愿学好的人去了解产生原因
aisk
2016-01-09 19:31:02 +08:00
@EchoChan 你他妈的你老师自己就说不清楚,然后只能装逼绕过来说,你他妈的懂了吗?
ljcarsenal
2016-01-09 19:35:07 +08:00
对于调调 api 填填框架来说的程序员确实没什么用。
EchoChan
2016-01-09 19:38:10 +08:00
@aisk 你确定你看懂我的话?
aisk
2016-01-09 20:00:08 +08:00
@EchoChan 你的大意就是“虽然 XXX 看上去没什么用,但是你在 XXX 的过程中一定有些什么收获,所以 XXX 还是值得的。”

一句永远正确但却没有任何意义的废话罢了。

不过你这人一上来说话就“他妈的”是什么意思,难道你他妈的没好好教你礼貌?
SonicY
2016-01-09 20:06:42 +08:00
@aisk 别人说的是 ta 妈的,而你直接说 @EchoChan 的妈妈,不太好吧。
虽说我感觉 TMD 这种口头禅算不了多大点事。
还是不要歪楼了。。。
woai110120130
2016-01-09 20:06:46 +08:00
光一个状态机就受益无穷
shyling
2016-01-09 20:32:47 +08:00
前几天有人跟我说学了编译原理得能写出来个编译器才行。
jsyangwenjie
2016-01-09 20:49:03 +08:00
编译原理前端那部分真的 P 用没有过。。事实上大部分学校也就讲了前端那点东西,有的老师甚至连 syntax analysis 都讲不清楚。。编译真正好玩有用的从语义分析才正式开始,语义分析中怎么去检查类型,这个类型系统该怎么搞。中间代码该怎么生成,生成以后怎么加 Pass 去优化,然后生成机器码又该怎么去分配指令和寄存器,又要涉及到结构方面的东西。
然而这个论坛的人只会告诉你,有用的,也不管自己有没有用过,反正他们只知道递归下降 LL LR 。

顺便贴个论文, http://arxiv.org/abs/1010.5023
大学里教你的前端那部分,早就在 UNIX 里面用 YACC 和 lex 实现好了,现在又有新的方法出来了。
大部分人学编译都是龙书吧?手写递归下降或者语法分析有什么意义呢?早就是老的技术了(注意是技术), 并且有人家实现好了工具。其实说白了就是 DP 能解决的问题,讲了那么多什么都学不通。
Wonicon
2016-01-09 20:49:09 +08:00
前端虽然有那么多强大的算法和工具,但最后还是人肉递归下降分析器更易控制……我觉得中间代码的优化要比语法分析有意思,然而学力有限,没能掌握静态单赋值……要说收获,应用的场景没有遇到,不过对这个领域倒是更加感兴趣了……

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

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

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

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

© 2021 V2EX