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

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

 2009-12-19 00:00:00 来源:WEB开发网   
核心提示: 更新 BBCDT如果在 Eclipse 中打开 BBCDT 项目,会发现还有更多代码,构建基于 CDT 的编辑器,第 3 部分: 基本的 CDT 解析(7),特别是在 org.dworks.bbcdt.core 插件项目中,这些新类中的许多类都是设置及执行解析所必需的,它很慢,其分析只局限于一次

更新 BBCDT

如果在 Eclipse 中打开 BBCDT 项目,会发现还有更多代码,特别是在 org.dworks.bbcdt.core 插件项目中。这些新类中的许多类都是设置及执行解析所必需的,但它们中的大多数代表了 C/C++ 源文件或 C/C++ AST 的元素。

org.dworks.bbcdt.ui 插件也有新类。它们大多数都处理协调过程,但 org.dworks.bbcdt.ui.action 包中的 ASTAction 类却实现 IEditorActionDelegate 接口。该类在 BBCDT 编辑器可视时出现。当单击工具条 “contribution”,该类访问 IASTCompilationUnit 并在其声明的对象间迭代。如果它们中的任何一个声明了函数或变量,或者以 namespace、using 或 extern 开头,ASTAction 就会显示一个窗口,该窗口列出了每一个声明的类型以及该声明类型的特定信息。清单 1 显示了所需的代码。


清单 1. 访问 CDT AST 中的声明
IASTCompilationUnit unit = CCorePlugin.getCompilationUnit(); 
Iterator iter = unit.getDeclarations(); 
  while(iter.hasNext()) { 
    IASTDeclaration decl = (IASTDeclaration)iter.next(); 
 
    if (decl instanceof IASTFunction) 
      output += "Function declaration: " + 
        ((IASTFunction)decl).getName(); 
   
    else if (decl instanceof IASTLinkageSpecification) 
      output += "Linkage declaration: " + 
        ((IASTLinkageSpecification)decl).getLinkageString(); 
   
    else if (decl instanceof IASTNamespaceDefinition) 
      output += "Namespace definition: " + 
        ((IASTNamespaceDefinition)decl).getName(); 
   
    else if (decl instanceof IASTUsingDeclaration) 
      output += "Using declaration: " + 
        ((IASTUsingDeclaration)decl).getName(); 
   
    else if (decl instanceof IASTVariable) 
      output += "Variable declaration: " + 
        ((IASTVariable)decl).getName(); 

在 CDT 中找不到此代码;我将它们修补到一块,以使访问并遍历 IASTCompilationUnit 变得简单。通过修改 ASTAction,您能够在节点间进行搜索并创建整个树。图 2 显示了在单击 ASTAction 按钮后 BBCDT 的输出。


图 2. BBCDT AST 分析的输出
构建基于 CDT 的编辑器,第 3 部分: 基本的 CDT 解析

查看原图(大图)

结束语

本文先是解释了 CDT Parser 如何对编辑器文本的改变做出响应,然后用 C/C++ 元素创建了 AST。本文还对解析理论进行了总结。

本文所描述的 Parser 实现了其目标,但它也有缺点。它很慢,其分析只局限于一次一个源文件。在本系列的第 4 部分中将会介绍 CDT 中的另一个更为强大也更为复杂的解析器。


本文源代码下载地址: http://flashview.ddvip.com/2009_12/os-ecl-cdt3-BBCDT_Plugins.rar

上一页  2 3 4 5 6 7 

Tags:构建 基于 CDT

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