一、词法分析
词法分析生成Token : clang -fmodules -E -Xclang -dump-tokens main.m
二、语法分析
语法分析,生成语法树(AST, Abstract Syntax Tree):clang -fmodules -fsyntax-only - Xclang -ast-dump main.m
- FunctionDecl:方法描述
- ParmVarDecl:方法入参描述
- CompoundStmt:方法体结构
- DeclStmt:表达式描述
- VarDecl:声明变量描述
- BinaryOperator:操作符描述
- ReturnStmt:return表达式描述
三、语义分析
在语法树上的基础上进行检查。
四、生成中间代码
- LLVM IR有3种表示形式(但本质是等价的,就好比水可以有气体、液体、固体3种形态)
- text:便于阅读的文本格式,类似于汇编语言,扩展名.ll
- 查看命令:clang -S -emit-llvm main.m
- text:便于阅读的文本格式,类似于汇编语言,扩展名.ll
- memory:内存格式
- bitcode:二进制格式,扩展名.bc
- 查看命令:clang -c -emit-llvm main.m
4.1 IR基本语法
官方语法文档https://llvm.org/docs/LangRef.html
- 注释以分号; 开头
- 全局标识符以@开头,局部标识符以%开头
- alloca,在当前函数栈桢中分配内存
- i32,32bit,4字节的意思
- store,写入数据
- load,读取数据