V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
pythonee
V2EX  ›  程序员

怎么开始动手自己写一个编译器,编译器的理论学习该从何处下手?

  •  
  •   pythonee · 2017-07-03 09:47:28 +08:00 · 7728 次点击
    这是一个创建于 2486 天前的主题,其中的信息可能已经有所发展或是发生改变。
    当初不好好学习,基础性的东西还是太少,想补回来
    现在还是想 from scratch 的学一下,想实现把一份源代码到可执行文件串起来
    不知各位有什么好的学习路径,有哪些好的视频或教学系列吗
    29 条回复    2017-07-04 12:41:09 +08:00
    josephpei
        3
    josephpei  
       2017-07-03 10:01:47 +08:00   ❤️ 1
    斯坦福大学幕课 编译器,理论加编程作业,实现一个教学语言编译器,从词法分析到代码生成与优化(需要学习汇编呦)
    https://lagunita.stanford.edu/courses/Engineering/Compilers/Fall2014/about
    johnlui
        4
    johnlui  
       2017-07-03 10:17:41 +08:00
    给一楼跪了。。。。

    奉劝新人不要第一门语言选 js,会走上邪路的。。。。
    atempcode
        5
    atempcode  
       2017-07-03 10:22:33 +08:00
    SuperMild
        6
    SuperMild  
       2017-07-03 10:33:01 +08:00
    最经典的是龙书吧
    lyram
        7
    lyram  
       2017-07-03 10:41:57 +08:00
    小叶子?~
    Pyjamas
        8
    Pyjamas  
       2017-07-03 10:44:10 +08:00
    我看着 LLVM 的教程写了个前端,还没优化
    [LLVM 教程_CN]( http://llvm-tutorial-cn.readthedocs.io/en/latest/chapter-1.html)
    [LLVM 教程_EN]( http://llvm.org/docs/tutorial/LangImpl01.html)

    还有这个我没怎么看过的 http://compilers.iecc.com/crenshaw/
    zdkmygod
        9
    zdkmygod  
       2017-07-03 10:49:20 +08:00
    入门难度的话就《自制编译器》,日本人的书很多细节都描述到了,适合入门。
    Kilerd
        10
    Kilerd  
       2017-07-03 10:49:54 +08:00   ❤️ 1
    编译器最好不要用脚本语言写,虽然很舒服。 不过学不到什么东西的。

    我的编译原理课程就是全部用 python 写的,写起来贼快。

    可是,思路完全跟 用 C 艹 写出来的不一样。
    Shura
        11
    Shura  
       2017-07-03 10:50:26 +08:00 via Android
    onemach
        12
    onemach  
       2017-07-03 10:58:33 +08:00 via iPhone
    左鲸右虎中恶龙
    bombless
        13
    bombless  
       2017-07-03 10:59:59 +08:00
    以前莱斯大学编的一本编译器工程不错的
    前端后端都有
    lrxiao
        14
    lrxiao  
       2017-07-03 11:11:20 +08:00
    怎么感觉都是前端...求后端优化 /字节码生成的教程
    aidchow
        15
    aidchow  
       2017-07-03 11:15:26 +08:00 via Android
    明天编译原理期末考试
    Pyjamas
        16
    Pyjamas  
       2017-07-03 11:17:18 +08:00   ❤️ 1
    Pyjamas
        17
    Pyjamas  
       2017-07-03 11:17:37 +08:00
    @aidchow 距离考试还有 2 小时 13 分
    miaoever
        18
    miaoever  
       2017-07-03 11:28:50 +08:00   ❤️ 1
    以下的书都是我自己看过的:

    1.纯入门的话,推荐 <自制编译器> 作者: [日] 青木峰郎
    这本书用  Java 完整实现一个类C语法的可生成汇编代码的编译器。好处在于非常注重实战,但是又适度的介绍了相关的理论知识,对形成编译器整体的概念有很好的帮助。更好的是,对于大部分程序员日常的需求(比如工作中写个 DSL, 写特定格式文件的 Parser 等等)来说,掌握本书所讲的内容及工程实践基本能够应对了。

    2.<编译原理及实践> 作者: Kenneth C.Louden
    这本是我们的教材。这本书最大的缺点在于中文翻译极其差。但是就书本身来说,实现了一个简化的 C 语言编译器, 理论部分也讲得通俗易懂,特别是对于前端相关的知识相对于龙书来说详略得当,对初学者相当友好。相对于上一本来说,由于是编译原理教材,会更多的涉及相关的理论知识,适合为深入的学习编译器相关内容做理论铺垫。

    3.<编译器设计> 作者: Keith Cooper / Linda Torczon
    这本书对编译器后端的知识覆盖的非常好,我是通过这本书开始比较完整系统的入门了后端相关的内容(之前看过龙书没怎么看懂)。作为<编译原理及实践>之后的学习材料,我个人认为非常合适。

    根据我个人的感受,按照以上三本书的路径循序渐进的入门是比较合适的。另外,以上的内容看着很多,其实真正入门后学起来很快,特别是前两本书的内容(更偏重前端),我相信如果是在校学生的话,一个暑假的时间搞定前两本不是不可能的。
    gomars
        19
    gomars  
       2017-07-03 12:34:05 +08:00
    洗洗睡了吧,基础不好还写编译器?
    daimao
        20
    daimao  
       2017-07-03 12:48:06 +08:00
    建议跟着这几门课学一下

    15-213 还有 15-411
    neoblackcap
        21
    neoblackcap  
       2017-07-03 16:15:48 +08:00
    推荐 18 楼的书,不过我觉得《自制编译器》还是省略了一部分,比如他们是用 JavaCC 跳过了手写 parser 这些内容,所以我建议读《编译器设计》,很不错的一本书。
    araraloren
        22
    araraloren  
       2017-07-03 16:32:48 +08:00
    mark 一下,看起来挺有意思的。。
    halfcoder
        23
    halfcoder  
       2017-07-03 17:03:52 +08:00
    感觉你需要的不只是一个编译器,而是一整套:
    《自制编程语言》 前桥和弥 (Maebasi Kazuya)
    wshcdr
        24
    wshcdr  
       2017-07-03 19:13:27 +08:00
    关注一下
    exiahan
        25
    exiahan  
       2017-07-03 19:35:07 +08:00 via Android
    当然是看龙虎豹啦( ・ิω・ิ)(雾,其实是龙虎鲸),不过我感觉虎好点,龙看得话太抽象了,而且中文版翻译很渣。另外有本叫编译器设计( compiler engineer )也很不错,和虎的讨论很像但是讲的更细。
    exiahan
        26
    exiahan  
       2017-07-03 19:43:05 +08:00 via Android
    @exiahan 写错了书名,编译器设计( Engineering a compiler )
    caokeck
        27
    caokeck  
       2017-07-03 19:58:24 +08:00 via Android
    可以先看 sicp,然后撸个解释器
    kuno1
        28
    kuno1  
       2017-07-04 08:12:01 +08:00
    http://www.craftinginterpreters.com/

    Java 和 C 的两个版本,来自 google Dart 语言作者 Bob Nystrom

    代码在
    https://github.com/munificent/craftinginterpreters
    laihaotao
        29
    laihaotao  
       2017-07-04 12:41:09 +08:00
    给一个我的编译器课的项目地址: https://github.com/LAIHAOTAO/COMP6421/
    这是我老板的课,上得还挺好的,作业是撸一个 compiler。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   977 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 21:46 · PVG 05:46 · LAX 14:46 · JFK 17:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.