构建基于 CDT 的编辑器,第 3 部分: 基本的 CDT 解析
2009-12-19 00:00:00 来源:WEB开发网解析器会继续调用方法以将代码同模型元素相匹配,但分析的深度取决于其模式 。五种解析模式为:
QUICK_PARSE不解析内部函数及包含的文件STRUCTURAL_PARSE不解析内部函数,但解析包含的文件COMPLETE_PARSE解析内部函数及包含的文件COMPLETION_PARSE解析内部函数及包含的文件,在偏移量处停止,并优化符号查询SELECTION_PARSE解析内部函数及包含的文件,在偏移量处停止,并提供选定范围的语义信息。
模式也决定了 Parser 在解析时使用什么回调对象来存储信息。在 QUICK_PARSE 模式中,QuickParseCallback 记录宏、函数、声明及任何发生的错误。在其他的模式中,StructuralParseCallback 存储诸如 Parser 的当前范围、变量、namespace 语句、enum 声明等这类额外信息。但由于额外的分析需要额外的时间,Parser 的默认模式是 QUICK_PARSE。
无论您使用哪种回调对象,其携带的最重要的信息是 ASTCompilationUnit。下面将介绍一下它的重要性。
AST
第一个解析方法 translationUnit() 通过创建一个 ASTCompilationUnit 对象来开始其执行。该对象不仅是 AST 中最高的节点,也是它下面所有节点的容器。Parser 识别源文件中的一个声明后,将 ASTDeclaration 的一个子类添加到 ASTCompilationUnit 的声明 List中。如果源文件中第一个声明是 typedef,ASTCompilationUnit 的 List 中第一个元素将为 ASTTypedefDeclaration。
同样,每一个 ASTDeclaration 对象存储构成该声明的 AST 对象。例如,一个由 ASTFunction 表示的函数声明包含了代表其返回类型、参数和其中包含的所有函数的 AST 对象。当 Parser 结束分析后,ASTCompilationUnit 将包含一个代表了文件结构的完整的 AST。那时,在文件中寻找一个特定的元素就和树的遍历算法一样简单。
- ››基于IP地址的vsftp服务器
- ››构建Windows 8风格应用23-App Bar概述及使用规范
- ››基于MySQL 水平分区的优化示例
- ››基于CentOS5的Linux下pptp和openvpn的搭建及配置
- ››构建域名服务器(DNS)
- ››基于JavaScript的网页版塔防游戏
- ››基于Android平台 QQ大战360手机游戏爆红
- ››构建Android平台Google Map应用
- ››基于Windows Azure的云计算应用设计
- ››构建WinForm 通用速选(全选、反选、清空)组件
- ››基于AES算法实现对数据的加密
- ››基于SoPC目标板Flash编程设计的创建及应用
更多精彩
赞助商链接