结构化编译器前端 Clang 介绍

转载 2016年11月10日 10:41:06


http://www.ibm.com/developerworks/cn/opensource/os-cn-clang/

RecursiveASTVisitor,这是一个重要的函数模板。通过介绍这个模板,我们将向您简单介绍遍历抽象语法树的一些基本概念。

RecursiveASTVisitor 是一个深度优先遍历 AST 和访问节点的类。对于一个已经构造好的语法树,它将完成以下三方面的工作:

  1. 遍历 AST 的每个节点;
  2. 在某一个节点,访问这个节点的层次结构 ( 每个节点也是一个树 );
  3. 如果某一个节点是一种类型的动态类别 ( 比如是一个子类等 ),调用一个用户重载的函数来访问这个节点;

上述工作由下面三组方法完成,分别是:

  1. TraverseDecl(Decl *x) 完成工作 1,它是遍历 AST 的入口。这个方法是用来访问有关变量和函数的声明。TraverseDecl 只是简单的根据节点的类型来调用相应的 TraverseFoo(Foo *x),然后递归访问 x 的子节点。TraverseStmt(Stmt *x) 和 TraverseType(QualType x) 则是用来访问一条语句和一个类型的(如结构体),它们的工作方式和 TraverseDecl 类似。
  2. WalkUpFromFoo(Foo *x) 完成工作 2。它不会尝试访问 x 的任何子节点,而是先调用 WalkUpFromBar(x),其中 Bar 是 Foo 的直接父类(除非 Foo 没有父类), 然后调用 VisitFoo(x)。
  3. VisitFoo(Foo *x)完成工作 3。

上述三组方法是分层次的 (Traverse* > WalkUpFrom * > Visit*)。一个方法 ( 如 Traverse*) 可以调用同一层次的方法 ( 例如其他 Traverse*) 或低一层次的方法 ( 如 WalkUpFrom*),它不能调用更高层次的方法。这个结构确保同样类型的 AST 节点会被同时访问,也就是说不会出现交替访问不同节点的情况。


使用方法: 申明一个类A,时期继承模板类RecursiveASTVisitor<A>,当需要访问某种节点时,就重载函数VisitXXX(XXX b)【如VisitNameDecl(NameDecl)】。



相关文章推荐

Atitit.软件开发的最终的设计 dsl化,ast化(建立ast, 解析执行ast)

Atitit.软件开发的最终的设计 dsl化,ast化(建立ast, 解析执行ast)       1. 使用js,html 撰写dsl 1 1.1. 架构图 1 1.2. html ...
  • attilax
  • attilax
  • 2015年08月21日 16:12
  • 750

clang static analyzer源码分析(一)

引子clang静态代码分析是clang相对于gcc一个比较能够引起关注的点,特别是clang静态代码分析基于checker的架构和大部分的静态分析工具都不相同。clang静态代码分析使用符号执行的技术...

结构化编译器前端 Clang 介绍

如何运用 Clang 进行插件开发 Low Level Virtual Machine (LLVM) 是一个开源的编译器架构,Clang 是 LLVM 的一个编译器前端。由于优秀的设计,使得 cla...
  • vloong
  • vloong
  • 2014年02月11日 15:12
  • 629

业界编译器Clang介绍

http://baike.baidu.com/link?url=2cAQ-ZePNxPoPNll06fdZKaG5oSOpAhfmCoJ5hIS1sBG1Psy9c8wlcguVAsronSVYDc5...

[机器学习入门] 李宏毅机器学习笔记-24(introduction of Structured Learning;结构化学习介绍)

[机器学习入门] 李宏毅机器学习笔记-24(introduction of Structured Learning;结构化学习介绍) PDF VIDEOintroduction of Struc...

阿里云OTS(开放结构化数据服务)可视化管理工具的设计和功能介绍

设计初衷最近一段时间,工作中一直用阿里云的服务器ECS以及SLB、OTS(开放结构化数据服务)等相关的服务,特别是OTS刚刚商业化,官方还没出一种可视化的管理工具,而且我曾跟阿里云OTS的架构师深入交...

Pandas 结构化数据(上)

Pandas 结构化数据(上)一、实验说明Pandas 是 python 的一个数据分析包,属于PyData项目的一部分。Pandas最初被作为金融数据分析工具而开发出来,因此 pandas 为时间序...

wordpress百度结构化数据插件

  • 2014年10月08日 11:32
  • 37KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:结构化编译器前端 Clang 介绍
举报原因:
原因补充:

(最多只允许输入30个字)