V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
myJourney
V2EX  ›  程序员

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

  •  3
     
  •   myJourney · 2023-12-11 15:32:31 +08:00 · 3426 次点击
    这是一个创建于 375 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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
    - 龙书
    (还有些别的,但我觉得这些够看蛮久的,其他的方向就不懂了
    enchilada2020
        22
    enchilada2020  
       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   ·   实用小工具   ·   5294 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 08:52 · PVG 16:52 · LAX 00:52 · JFK 03:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.