zoukankan      html  css  js  c++  java
  • 深入研究Clang(二)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都是相同的。




  • 相关阅读:
    MySql(六)单表查询
    MySql(五)
    MySql(四)
    MySql(三)
    MySql(二)
    2016高管必看的五大互联网营销方法
    昨日股市暴跌熔断 赵薇亏3.3亿赔惨了(如何预测今年股市走向)
    何炅加入阿里音乐预示“互联网+”三大发展走向
    《老炮儿》的江湖道义就是互联网创业的规矩?
    世界互联网大会三大看点 传递什么信号?
  • 原文地址:https://www.cnblogs.com/ainima/p/6331940.html
Copyright © 2011-2022 走看看