21分钟学会写编译器

本文介绍了如何在21分钟内学会编写编译器的基本思路。通过简化源语言和目标语言,使用Haskell的ParseC库来快速构建Parser,生成抽象语法树(AST),并进行代码生成。虽然不能在短时间内掌握完整的编译器实现,但这种方法提供了一个快速上手的途径。
摘要由CSDN通过智能技术生成


本文来自网易云社区


知乎上有一种说法是「编译器、图形学、操作系统是程序员的三大浪漫」。


先不管这个说法是对是错,我们假设一个程序员在国内互联网公司写代码,业余时间不看相关书籍。那么三年之后,他的这些知识会比在校时损耗多少?


很显然,损耗的比例肯定非常高,毕竟国内互联网公司日常开发工作中,程序员基本很少接触这三块知识。大部分程序员工作几年后对编译原理相关的概念只能生理上起反应,脑海里很难再串联起相关概念了。


编译原理的概念有让人看到就头痛的特质,学校里要死记硬背,考试过了巴不得赶紧全忘掉,相信不少同学现在看到下面概念还会觉得蛋疼:


  • 非确定性有限自动机/确定性有限自动机

  • 四元式序列

  • 上下文无关文法/BNF

  • 终结符/非终结符

  • LL(1)/LR(1)

  • 特设语法制导转换

  • 局部优化


如果要按照课程来,光是背下这些名词和释义别说21分钟了,21天都搞不定。更何况背下来这些名词之后如何写编译器又是另一个问题。


我们很多时候,都只是想快速上手写一个编译器,有可能是因为好奇,有可能是想实现自己的玩具DSL(领域特定语言),或者有可能是为了在约架时候防身。


今天,我们就来看看如何用21分钟的时间学会写编译器,上面的废话大概花费1分钟,接下来还剩20分钟。


正式开始做编译器之前,先以问答的形式对接下来的内容做个简单介绍:


  • 什么是编译器

广义的编译器可以指任意把一种语言代码转为另一种语言代码的程序。


  • 做编译器实际上都需要做什么

编译器是一整套工具链,从前端的词法分析、语法分析,到中间表示生成、检查、分析、优化,再到代码生成。


如果是编译器从业者,大部分时间在做中间这块;如果是业余爱好者,大部分时间在做前端和代码生成。


    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值