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

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

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

15468 次点击
所在节点    程序员
74 条回复
aisk
2016-01-09 20:54:04 +08:00
@SonicY 是的,对熟人说话带口头禅,爆粗口啥的,真不是多大点事儿。
可你跟一陌生人张口就是 TMD ,这他妈的不是有病吗?
lifanxi
2016-01-09 21:10:18 +08:00
如果你只是记住了 LL(1)、 LR(0)这些名词,而没有理解它们的内在,那么短期内可能除了考试没有别的什么用。

但是如果理解了内在,就能让它们在相关的领域发挥出作用了。比如,理解了 DFA ,你会发现有很多情况下程序的逻辑都可以建模成一个 DFA ,然后按 DFA 的方式去实现,既简洁又不容易出错。
initialdp
2016-01-09 21:18:22 +08:00
我是非科班出身,倒是想学习一些这类基础知识,至少对 C 、 Python 等语言会有更深入的理解吧。
aitaii
2016-01-09 21:19:13 +08:00
收获了一次补考 然后意识到我学的是编译原理。。。
secondwtq
2016-01-09 21:39:04 +08:00
刚看到标题,学完?编译原理能学完?给跪了


@initialdp 貌似编译原理一开始习惯性的用 C , Pascal 之类的做背景,到后面要是点类型系统之类的技能的话就奇葩辈出了..
Zeahoo
2016-01-09 21:41:27 +08:00
@lifanxi
@Wonicon
@jsyangwenjie
感谢各位的回复!
Zeahoo
2016-01-09 21:41:57 +08:00
@secondwtq 措辞不当,下次发帖会注意的^ _ ^
codesun
2016-01-09 21:50:19 +08:00
@Zeahoo 如果你对编译感兴趣,可以继续花时间自学,这一块内容实在太多太大,一般的老师也没精力或者说是能力,来上优化,形式化自动验证之类的更深层次的内容。相比之下,前端是编译中最成熟,也是相对简单的一部分,因此大部分课程都将重心偏向于这一部分。

如果你纯粹是为了学分而选这门课,那我觉得你还是别在这块花时间了,无论是工作还是学术,这一块普通人很难有所成就,当然大牛除外。
loryyang
2016-01-09 22:18:18 +08:00
大学的课程很多时候就是讲解理论,编译原理课上讲的东西就是比较老的,而且也是都有现成实现的东西了。而这些用编译原理实现的工具或者软件比如 yacc 和 lex 则有着非常强大的功能,使用很广泛。这些东西只能靠自己课外去学习了。
其实这也是大学课程比较尴尬的地方,很多东西讲的太基础或者偏理论,学了也不知道有什么用,而且大部分情况确实没什么用。那种理论课加实验课组合的形式其实很不错。但是现在的实验课往往偏鸡肋,效果并不好。
SonicY
2016-01-09 22:43:26 +08:00
@aisk 哈哈因人而异吧,别太放心上。
ltrans
2016-01-09 22:45:55 +08:00
噗。。。编译原理的实验课用 php 实现了词法分析器 23333
noli
2016-01-09 22:47:41 +08:00
觉得编译原理没有实际用处?

来,我们来实现一个 Web url 路由,支持动态绑定资源处理方法,譬如模仿一下 flask restful ?

什么?你不知道什么叫做 web url 路由?

那跟你说这些有什么用……
orafy
2016-01-09 23:07:26 +08:00
游戏程序员,工作中撸了个自定义的 Shading Language ,和 3 个后端: GLSL , HLSL , PSSL 。

不仅减少了重复,
还扩展了预处理(可以选择某个 define 是生成新 shader 或 dynamic branching ),
也实现了反射(不再需要在运行时 glGetUniformIndices 之类的)。

编译原理就是这些很有趣的事情的基础。
forrestchang
2016-01-09 23:44:59 +08:00
还没学编译原理,不过倒是写了个 Scheme 的解释器: https://github.com/forrestchang/Charon
strwei
2016-01-09 23:48:18 +08:00
000000100000000100000011
fashioncj
2016-01-10 00:03:57 +08:00
这些东西都是以后不知道什么时候就会用到的知识,不过考试周学习能力就是爆表
Khlieb
2016-01-10 00:08:45 +08:00
@EchoChan @aisk 决定这些教学内容的,是一群官僚,官僚不但武断的要把这些内容安排到课堂上,而且这些内容还被安排和学业挂钩。同样的内容,有些觉得对自己有用,有些人学了却发现根本就派不上用场,然而他们全然不顾这些。
congeec
2016-01-10 00:10:17 +08:00
我没学过这个,但我感觉王银的博客你一定要看,学习也好撕逼也罢,看完肯定有收获。 Yinwang.org
kaichen
2016-01-10 00:33:30 +08:00
你如果知道了一个语言从源代码到可执行程序的过程(当然也有可能是编译结果是另外的编程语言,比如 Babel 做的事情)后,会更容易理解现在市面上流行语言为什么会设计成这样,为什么会具有某些行为。在你选择一个编程语言去做某件事时会更加有理有据。

并且当你了解各种流行的语法特性怎么实现,例如说闭包,那么在写程序用到的时候就能知道,为什么某种写法就会导致内存泄漏,以及如何才能避免。
RitzoneX
2016-01-10 01:23:29 +08:00
恩,写个操作系统

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

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

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

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

© 2021 V2EX