构建基于 CDT 的编辑器,第 3 部分: 基本的 CDT 解析
2009-12-19 00:00:00 来源:WEB开发网解析过程
我没找到关于 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。
- ››基于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编程设计的创建及应用
更多精彩
赞助商链接