构建基于 CDT 的编辑器,第 3 部分: 基本的 CDT 解析
2009-12-19 00:00:00 来源:WEB开发网在 CDT 之外使用解析器
创建解析器的过程也许交代清楚了,但还有重要的一点需要注意。解析器与 CDT 模型间惟一的关联就是 WorkingCopy 字符的缓冲区。因而,您不需要 CDT 模型中所有的包就能访问 CDT 的解析器。但由于基于文档对象模型(Document Object Model,DOM)的解析器同 CDT 模型相交互,因此您不能仅将 org.eclipse.cdt.parser 插件添加到您的项目中,而需要将 Parser 及其依赖的类提取出来,随后调用 ParserFactory.createScanner() 和 ParserFactory.createParser() 方法。
扫描程序创建好后,CModelBuilder 通过调用 ParserFactory.createParser() 方法构造 Parser。此方法让 ProblemRequestor 在错误发生时开始更新编辑器的注释。然后,它调用 Parser 的 parse() 方法。
好戏开始了。但在深入探讨前,先来快速介绍一下解析理论。
插曲:解析的简短介绍
以输入语句 “Matt likes pizza”为例,您也许明白单个的单词,但如果不熟悉主语-动词-对象这一句子结构,就不会明白它的意思。只有当输入的元素和抽象的结构( “Matt”= 主语,“likes”= 动词,“pizza”= 对象)匹配起来,这个句子才有意义。当然,还有许多其他的句子结构和其他的语言。表明在一门特定的语言中如何构建合适句子的主体规则就是该语言的语法 。
在程序语言中,语法包含了一个抽象的模型,所有格式良好的代码单元(即源文件)都必须匹配这个模型。执行此匹配的第一步叫做扫描 或词法分析。扫描程序读取缓冲中的单个字符并返回解析器能理解的记号(称做标记 ) —— 如关键字、操作符及针对特定语言的标点符号。例如,当 C 扫描程序读取到 c、o、n、s、 和 t 时,它会返回一个代表关键字 const 的单个标记对象。解析器不关心空白或注释,因而扫描程序会忽略了这些。
- ››基于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编程设计的创建及应用
更多精彩
赞助商链接