V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Sanko
V2EX  ›  问与答

编译原理到底该怎么学?

  •  
  •   Sanko · 2019-04-12 09:17:49 +08:00 via Android · 4614 次点击
    这是一个创建于 2078 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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