开发者社区> snsn1984> 正文

深入研究Clang(二)Abstract Syntax Tree

简介: 要想深入的研究Clang,抽象语法树是必须要完全理解的。关于抽象语法树的资料,wiki介绍的很详细:http://en.wikipedia.org/wiki/Abstract_syntax_tree 如果觉的这个英文文档不是太好理解,也可以找点别的中文资料,但是这个文档还是要认真读的。
+关注继续查看

要想深入的研究Clang,抽象语法树是必须要完全理解的。关于抽象语法树的资料,wiki介绍的很详细:http://en.wikipedia.org/wiki/Abstract_syntax_tree

如果觉的这个英文文档不是太好理解,也可以找点别的中文资料,但是这个文档还是要认真读的。AST作为语法分析的输出,是接下来的语义分析和生成中间代码所需要的基础。现在基于AST可以进行程序分析和程序转换,程序分析就不说了。程序转换,现在Clang下面已经有一些额外的工具:比如clang-modernize实现的就是对C++程序中可以使用C++11的地方进行转换,转换成在这些地方使用C++11特性的程序,等于直接在程序上进行的修改,是一个source-to-source的转换工具。

同时,AST也是编译器构建符号表的基础。

在这里先提出对AST一定要熟悉,因为它是编译器的几大基础之一,尤其是前端中的一个很重要的一部分,如果连AST也不熟悉,后续的所有工作都无法进行下去了。同时,也是为了后续从工具clang-modernize入手去深入研究Clang打下基础。在另外一篇博文中曾经提到过打算深入研究Clang的方法,就是从这些工具入手,不断的去挖掘Clang的源码。因为工具本身的代码量不大,方便阅读代码和调试,而从这些代码入手去挖掘Clang的代码,既不会觉的面对的东西太大无法入手,也比较容易看到成果。

这种方法的思路是不同的从外围去入手,然后渐进的向核心逼近,等于是农村包围城市的策略。如果能耐得住寂寞,同时也有大把的整块时间,可以直接去hack Clang的那些库的源码,这样更直接,但是会很累。

关于Clang AST,有一个官方文档:http://clang.llvm.org/docs/IntroductionToTheClangAST.html

通过对这个文档的阅读,可以熟悉Clang的AST是什么样的,它和其他的编译器产生的AST是有不同点的,这些需要在阅读文档的过程中进行把握。而不应该想当然的去以为AST都是相同的。




版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
+关注
snsn1984
多年研发和团队管理经验,熟悉LLVM、GPU等技术领域,具备公司层面技术管理能力。
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载