LLVM 入门教程之 frontend 介绍

前言

clang

icc(Intel C++ Compiler)

  • 实现词法分析器
  • 定义抽象语法树
  • 实现语法分析器
  • 解析简单表达式
  • 解析二元表达式
  • 为解析编写驱动

定义抽象语法树

AST 的使用集中在语义分析阶段,在这个阶段,编译器会检查程序和语言元素是否正 确使用。

http://clang.llvm.org/docs/IntroductionToTheClangAST.html

实现语法分析器

语法分析器(parser)根据语言的语法规则来解析代码,解析阶段决定了输入的代码是 否能够根据既定的语法组成token流 5。在此阶段会构造出一棵解析树,而语法分析器则会 定义一些函数来把代码组织成一种被称为AST的数据结构

解析简单的表达式

生成 LLVM IR

实现 codegen 函数,

这一函数返回值是 LLVM Value 对象,它表示了静态单赋值(SSA)对象。在 Codegen 过程中还需要定义几个静态对象。

Module_Ob模块包含了代码中的所有函数和变量。

Builder对象帮助生成 LLVM IR 并且记录程序的当前点,以插入 LLVM 指令。另外, Builder对象有创建新指令的函数。

Named_Values map 对象记录当前作用域中的所有已定义值,充当符号表的功能。

codegen

Codegen()函数使用了LLVM内建的函数调用来生成IR