怎么开始动手自己写一个编译器,编译器的理论学习该从何处下手? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
pythonee
V2EX    程序员

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

  •  
  •   pythonee 2017-07-03 09:47:28 +08:00 8579 次点击
    这是一个创建于 3073 天前的主题,其中的信息可能已经有所发展或是发生改变。
    当初不好好学习,基础性的东西还是太少,想补回来
    现在还是想 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  
      &bsp;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     Solana     3862 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 34ms UTC 04:13 PVG 12:13 LAX 20:13 JFK 23:13
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86