iOS Developer移动开发技术前沿程序员技术栈

iOS底层探索(二) - 写给小白看的Clang编译过程原理

2018-07-15  本文已影响50人  Developer_Yancy

iOS底层探索(一) - 从零开始认识Clang与LLVM

写在前面

编译器是属于底层知识,在日常开发中少有涉及,但在我的印象中,越接近底层是越需要编程基本功,也是越复杂的。但要想提升技术却始终绕不开要对底层原理的探究,很多资料都是直接抛出一堆函数概念和一顿操作,基础一般的小伙伴看了表示一脸懵逼。在此结合我自己的理解进行优化总结一下。毕竟知识水平有限,有问题或总结不妥的地方欢迎指出,多多学习,非常感谢!2018.2

入门起步

Clang的编译过程

1.预处理

*PS:还需要了解更多关于预编译的内容,还请自行百度*
[图片上传失败...(image-cf6f6f-1531632712782)][图片上传失败...(image-fd9112-1531632712782)]


`$clang -E main.m`

2. Lexical Analysis - 词法分析(输出token流)

Objective-C语言包含了关键字if、else、new等,那么在词法分析步骤时,遇到i与f或n与e与w组合在一起的时候,需要将这几个字母组合为关键字if或new这个词法单元。

编译指令: $clang -fmodules -fsyntax-only -Xclang -dump-tokens main.m

Snip20171231_7.png Snip20171231_4.png

3.Semantic Analysis - 语法分析(输出(AST)抽象语法树)

编译指令:$clang -fmodules -fsyntax-only -Xclang -ast-dump main.m

Snip20180122_2.png

未完待续 ...

这是上篇,为保证博客质量与阅读体验(个人感觉一次阅读过多文字有点影响阅读体验),先分享已完成的上半部分,下篇将继续介绍Clang编译过程中的剩下环节,欢迎持续关注,感谢理解与支持!2018.2

预告:下篇将继续介绍Clang与LLVM以下环节的相关知识。

下面是一些关键词,有兴趣的朋友先自行谷歌学习吧,下篇等我有闲情的时候再更新了,我也不知道什么时候。2018.7.15

4. CodeGen - (Intermediate Representation,简称IR)IR中间代码生成

5. Optimize - 优化IR

6. LLVM Bitcode - 生成字节码

7. Assemble - 生成Target相关汇编

8. Link生成Executable

参考文档

https://zh.wikipedia.org/wiki/C%E9%A2%84%E5%A4%84%E7%90%86%E5%99%A8
https://llvm.org/docs/tutorial/LangImpl2.html
https://www.objc.io/issues/6-build-tools/compiler/

上一篇下一篇

猜你喜欢

热点阅读