LLVM学习笔记
LLVM是一款比较新的编译器工具。网上对LLVM使用的相关文档比较少,大部分都是官方给的例子。翻译过后晦涩难懂。在次,写一篇心得,也是为了课程任务,也是为了自己的一个学习总结,总结一下LLVM的学习过程,以及LLVM的万花筒实例。
首先和大家说一说LLVM是干什么的。LLVM是一个编译器。一个帮助你更简单写编译器的一个框架。在LLVM中有很多文件,这些文件我们都看不懂,也不用管,需要什么,找什么就可以。我们需要看的就是里面的万花筒的例子,在Examples文件里面的。
这个万花筒实现了一个简单的函数式语言,前面几个例子都不是完整的,从第四个开始,你可以用例子将他的语言完整的运行起来。
估计很多初学者和我一样,看着这个LLVM有点摸不到头脑,不知道如何去做,没关系,继续向下看,下面帮大家梳理的一下LLVM框架,通过例子,帮大家更好的理解。
在开始之前,我想先请大家想一想,一个完整的编译器都需要什么?词法分析,语法分析,语义分析,中间代码生成。(语法制导和优化在LLVM中几乎已经被做了,初学者也不用管他)
- 词法分析。在这部,你肯定要把一个一个的词读出来,看看是否和你规定的语言一样。(比如说,C语言,整数声明是 int a,你写一个in a 肯定是错的)在这里,你就要读取字符,和你自己规定的对比一下,看看是否是正确的。
- 语法分析,当你分析出输入的东西是你规定的时候,就要考虑语法的正确性,还是C语言的例子(int , 要求后边是一个变量的名字,你肯定不可以写int 3 ,这种就是错误的。)在这一步,你可以给所有的类型标记为1,所有字母标记为2,所有数字标记为3.当年你识别到 1(类型标记)之后,你应该继续识别到2才正确,3不可以在1 的后面。(例子可能不是那么严谨,但是对于理解来说是没问题的)
- 语义分析,基本上就是检测一些函数调用啥的合不合理。
- 中间代码生成LLVM都帮你做了,我们几乎不需要做啥,只需要你遵守LLVM的接口,用他的一些类,就可以了。
万花筒是LLVM里面提供的一个实例,完成了一个比较简单地语言。通过学习这个语言,可以增强对LLVM的理解。首先说一下LLVM安装。首先下载LLVM以及Clang,将LLVM转化成VS2017可执行版。在这里不再赘述,网上有很多安装教程。
首先生成一下解决方案。大概半个多小时吧。LLVM是真的大。话不多说,直接点开Example文件。里面的Kaleidoscope便是LLVM自带的简单语言的例子。
Kaleidoscope2
万花筒一里面几乎什么都没有。我们直接从第二个开始看起。第二个主要完成的是词法分析和语法分析。我们从main函数开始看起。