WEB开发网
开发学院软件开发Java 构建基于 CDT 的编辑器,第 3 部分: 基本的 CDT 解... 阅读

构建基于 CDT 的编辑器,第 3 部分: 基本的 CDT 解析

 2009-12-19 00:00:00 来源:WEB开发网   
核心提示: 解析器会继续调用方法以将代码同模型元素相匹配,但分析的深度取决于其模式 ,构建基于 CDT 的编辑器,第 3 部分: 基本的 CDT 解析(6),五种解析模式为:QUICK_PARSE不解析内部函数及包含的文件STRUCTURAL_PARSE不解析内部函数,但解析包含的文件COMPLETE_PA

解析器会继续调用方法以将代码同模型元素相匹配,但分析的深度取决于其模式 。五种解析模式为:

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。那时,在文件中寻找一个特定的元素就和树的遍历算法一样简单。

上一页  1 2 3 4 5 6 7  下一页

Tags:构建 基于 CDT

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接