以前没有学习过编译原理,最近想了解一下请问有什么推荐的书吗,最好能够跟着写的 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
myJourney
V2EX    程序员

以前没有学习过编译原理,最近想了解一下请问有什么推荐的书吗,最好能够跟着写的

  •  3
     
  •   myJourney 202-12-11 15:32:31 +08:00 4242 次点击
    这是一个创建于 673 天前的主题,其中的信息可能已经有所发展或是发生改变。
    28 条回复    2023-12-12 20:42:53 +08:00
    546L5LiK6ZOt
        1
    546L5LiK6ZOt  
       2023-12-11 15:46:28 +08:00   2
    timewarp
        2
    timewarp  
       2023-12-11 15:51:51 +08:00
    《编译器设计》
    Jeff710
        3
    Jeff710  
       2023-12-11 16:14:12 +08:00   2
    书没啥用,基本概念了解下直接学 LLVM, 可以跟着多伦多大学 CSCD70 这门课学,https://uoft-ecosystem.github.io/CSCD70/
    aminobody
        5
    aminobody  
       2023-12-11 16:19:03 +08:00
    学编译原理
    学 LLVM
    zen1
        6
    zen1  
       2023-12-11 16:21:56 +08:00
    记得上学的时候比较有名的是:龙书、虎书、鲸书。具体对应名字 google 下应该就有
    MoYi123
        7
    MoYi123  
       2023-12-11 16:29:44 +08:00
    《 WritingAnInterpreterInGo 》 可以跟着写的, 只有英文版.
    asm
        9
    asm  
       2023-12-11 16:51:02 +08:00
    同没学过,就是想大概了解下不求多深的深度,搜过什么龙书,看厚度都头疼。最近看《用 go 语言自制解释器》,刚开头,感觉还不错。
    ninjashixuan
        10
    ninjashixuan  
       2023-12-11 16:58:11 +08:00
    @MoYi123 这个中文版也出了
    jones2000
        11
    jones2000  
       2023-12-11 17:02:56 +08:00
    编译原理 机械工业出版社

    计算机专业都“编译原理”课程的。
    hitmanx
        12
    hitmanx  
       2023-12-11 17:06:36 +08:00
    <Brich Hansen on Pascal Compilers>
    <Stack Computers>
    <Crafting Interpreters>
    <Engineering a Compiler>
    <Writing Compilers and Interpreters>
    <Write Yourself a Scheme in 48 Hours>

    有几本是上古的书,但是比起新的书写得都很好,很详细很入门,实操性强。
    还有个日本人写的书,名字忘了。也是从头开始写 interpreter 。图灵出版社的。

    另外推一下 Stanford 的 CS143(编译原理)这门课,b 站有公开课的视频。可能是最入门的资料了:https://www.bilibili.com/video/BV1NE411376V/?p=4
    hitmanx
        13
    hitmanx  
       2023-12-11 17:08:07 +08:00
    @hitmanx 日本人写的这本找到了: https://book.douban.com/subject/25908672/ <两周自制脚本语言>
    xtreme1
        14
    xtreme1  
       2023-12-11 17:29:54 +08:00
    主要是你想侧重前端还是后端(对大部分人来说最有用的也是前端), 前者你就看楼上推荐那些书, 后者就学 LLVM.
    jorneyr
        15
    jorneyr  
       2023-12-11 17:30:07 +08:00
    编译原理:搜索 龙书
    SmiteChow
        16
    SmiteChow  
       2023-12-11 18:09:18 +08:00
    不用看书,直接看库,如果你的目标是脚本语言,那只看编译前端的 antlr4 就够了,如果需要编译成二进制可执行文件在额外看 llvm
    ShadowPower
        17
    ShadowPower  
       2023-12-11 18:53:44 +08:00
    《两周自制脚本语言》
    xuedishang
        18
    xuedishang  
       2023-12-11 18:57:24 +08:00
    这个 blog https://ruslanspivak.com/lsbasi-part1/ 挺好的,可以作为入门,了解编译原理的基本概念,自己动手实现一个简单的编译器
    slack
        20
    slack  
       2023-12-11 19:16:28 +08:00
    不推荐看《编译原理》,可以看看《编程语言实现模式》,结合 antlr ,yacc 之类的做一个 parser 差不多了
    dianqk
        21
    dianqk  
       2023-12-11 19:24:19 +08:00 via Android
    建议好好看书,入门 https://craftinginterpreters.com/ 。这里有很多可以做的事情,接下来看啥得看你想做什么。如果是感兴趣了解,前面入门我觉得也够了。
    我的目标是贡献 LLVM/Rust ,我看的是:
    - 南京大学的程序分 https://tai-e.pascal-lab.net/lectures.html
    - LLVM Techniques, Tips, and Best Practices Clang and Middle-End Libraries
    - 龙书
    (还有些别的,但我觉得这些够看蛮久的,其他的方向就不懂了
    KMpAn8Obw1QhPoEP
        22
    KMpAn8Obw1QhPoEP  
       2023-12-11 19:31:01 +08:00 via Android
    一个问题 这种屠龙技学完用来干什么呢?或者说是出于什么目的才去学的
    leave8426
        23
    leave8426  
       2023-12-11 19:58:14 +08:00
    essentials of compilation, 有 Python 版本, 写一个 mini Python, 基本不太讲前端的内容. https://github.com/IUCompilerCourse/Essentials-of-Compilation
    sbw
        24
    sbw  
       2023-12-12 08:20:41 +08:00 via Android
    我司在招传统编译器开发、测试,base 西安深圳苏州南京有意可 sbw at sbw dot so
    milanxiaoge
        25
    milanxiaoge  
       2023-12-12 09:18:54 +08:00
    @sbw #24 汇川是不是要求比较高 T_T
    sbw
        26
    sbw  
       2023-12-12 11:49:36 +08:00 via Android
    @milanxiaoge 主要工作方向上满足要求即可,也是根据能力定级的
    liyafe1997
        27
    liyafe1997  
       2023-12-12 20:41:53 +08:00   1
    这是我们学校的一门课,叫 Compiler construction ,挺有意思的,去年刚上过。所有课程资料包括实验都在这个 github repo 里: https://github.com/TDA283-compiler-construction/project
    大概就是老师 YY 了一种语言叫 Javalettet (别误会,跟 Java 没半毛钱关系,实际我感觉更像个简化的 C ),语法规则啥的里面都介绍有,bnfc 的 cf 语法文件也给你写好了
    按着实验要求做就行,就是实现这个 Javalettet 的编译器,最低要求是输出 LLVM 的代码(及格分)。如果想加分,得整点花活,比如生成其它平台比如 x86 的代码,或者加入面向对象功能,等等等等。
    我当时做这个感觉收获颇多,至少是第一次自己完整实现一个编译器,知道了这些东西大概怎么一回事。如果你有兴趣也可以按着这个 project 要求跟着做。
    liyafe1997
        28
    liyafe1997  
       2023-12-12 20:42:53 +08:00
    @liyafe1997 如果你有兴趣,我也可以把我当时 project 的代码 share 给你
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5578 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 33ms UTC 01:24 PVG 09:24 LAX 18:24 JFK 21:24
    Do have faith in what you're doing.
    ubao 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