编译器架构的王者LLVM——(3)用代码生成代码

LLVM平台,短短几年间,改变了众多编程语言的走向,也催生了一大批具有特色的编程语言的出现,不愧为编译器架构的王者,也荣获2012年ACM软件系统奖 —— 题记

用代码生成代码

LLVM的开发思路很简单,就是用C++代码去不断生成llvm字节码。

RedApple语言示例

这是我花了两周多的时间制作的一门实验型语言,主要是想验证一个编译器的设计思路,宏翻译系统。
它的架构和一般的编译器很不一样,首先,编译器前端会先将语法转换为很通用的AST语法树节点,一般的编译器,往往是直接在这些节点上进行语义分析,然后进行代码生成。
这次我采用了类似lisp的表示方法,将源文件转换为语法树,然后遍历整棵语法树,根据上面标注的宏提示,去按照各个宏的规则进行翻译工作。

整个编译器1500行左右的代码,非常的小巧,不过功能也比较有限,而且好多地方还不完善,主要支持的就是函数的定义,结构体的定义,函数调用,结构体访问,分配内存,基本逻辑控制语句这些基本的特性。

大家可以作为学习llvm的一个示例吧。
Github地址:https://github.com/sunxfancy/RedApple

同样,非常精品的示例还推荐大家看以下两位网友写的:

构建Toy编译器:基于Flex、Bison和LLVM
http://lesliezhu.github.io/public/write-your-toy-compiler.html

用LLVM来开发自己的编译器系列
http://my.oschina.net/linlifeng/blog/97457

当然,这些示例不是说要大家一下都看懂,那么也就没有教程的意义了,下面我会继续介绍各个关键的LLVM平台API以及相关工具链。大家可以将以上三个项目和LLVM官网example中的作为参考,在实践中加以印证。

工具链简介

工具 功能
clang -emit-llvm 指令,可以生成.bc的字节码文件
lli llvm解释器,直接执行.bc字节码文件
llc llvm编译器,将.bc编译成.o

以上三个最常用,其他小工具备用

工具 功能
llvm-as 汇编器
llvm-dis 反汇编器
llvm-ar 打包器
llvm-link 字节码链接器</
  • 6
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值