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

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

 2009-12-19 00:00:00 来源:WEB开发网   
核心提示: 解析过程我没找到关于 CDT 的语法文件,但我们可以根据 Parser 类的方法以及这些方法之前的注释确定其抽象模型元素,构建基于 CDT 的编辑器,第 3 部分: 基本的 CDT 解析(5),这个类位于 org.dworks.bbcdt.internal.core.parser 包中,如前所述

解析过程

我没找到关于 CDT 的语法文件,但我们可以根据 Parser 类的方法以及这些方法之前的注释确定其抽象模型元素。这个类位于 org.dworks.bbcdt.internal.core.parser 包中。如前所述,第一个解析方法是 translationUnit(),因为 TranslationUnit 元素代表了整个源文件,正如在本文例子中的 Article 元素代表了整篇文章一样。

translationUnit() 方法前的注释中的一个隐秘的语句如下:

translationUnit : (declaration)* 

如果您熟悉扩展巴科斯范式(Extended Backus Naur Form,EBNF),就会明白这个规则意味着一个 TranslationUnit 包含任意数目的 Declaration 元素。这些注释并不提供完整的 CDT 语法,但如果试图使用或修改 Parser 类,它们将会很有帮助。

因为 Declaration 元素恰在 TranslationUnit 之下, translationUnit() 方法调用 declaration() 方法。EBNF 规则告诉我们声明可以是下列六种形式之一:

集合声明其后跟 ASMDefinition 元素的 asm 标记名称空间声明其后跟 NamespaceDefinition 元素的 namespace 标记使用声明其后跟 UsingDeclaration 元素的 using 标记。模板声明其后跟 TemplateDeclaration 元素的 template 或 export 标记链接声明其后跟 LinkageSpecification 元素的 extern 标记简单声明SimpleDeclaration 元素

为确定一个给定声明的类型,declaration() 方法使用一个 switch 语句,该语句的执行依赖于扫描程序的下一个标记的类型。每个标记实现 IToken 并将其类型(在 1 至 141 之间的一个 int )、被扫描的文件及其偏移量和长度存储到被扫描的 Document 中。

如果一个声明不在前五种之列,将调用 simpleDeclaration() 方法,并附带对该声明性质的猜测。首先猜测该声明是一个构造函数,但如果该方法抛出 BackTrackException,接下来将猜测该声明是一个函数声明。如果失败,会第三次调用该方法,此时将猜测该声明是一个变量声明。如果仍抛出异常,该方法会返回 null。

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

Tags:构建 基于 CDT

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