- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
面向CXML解析器实现与研究
面向CXML解析器实现与研究
摘要:讨论了XML解析器的??C++实现以及对应的DOM接口,其主要任务是为应用程序提供一个简洁、高速、低内存消耗的XML解析接口,并在保证性能的前提下提供尽可能多的DOM支持。讨论了一个解析器的模型,以及如何用LEX和YACC来实现这个解析器及DOM Level 1Core的??C++实现和与解析器的配合问题。
关键词:解析器; C++; 可扩展标记语言; 文档对象模型
中图分类号:TP311文献标志码:A
文章编号:1001-3695(2007)12-0268-04
0引言
XML是在因特网上应用非常广泛的一种数据交换语言,经常被称为“因特网上的世界语”,其应用之广泛可见一斑。从W3C制定其标准的那天开始,人们研究并实现了多个XML解析器的版本,一般有DOM和SAX两种。DOM[1](document object model,文档对象模型)用对象的概念来描述文档中的各种元素。DOM是基于平台、语言无关的官方W3C标准。基于树的层次,其优点是可以移植,编程容易,开发人员只需调用建树的指令;其缺点是加载大文件不理想。SAX[2]是基于事件模型的,它在解析 XML文档时可以触发一系列的事件。当发现给定的tag时,它可以激活一个回调方法,告诉该方法制定的标签已经找到,它类似于流媒体的解析方式,所以在加载大文件时效果不错。
DOM完全在内存中描述一个元素树,所以DOM需要大量的内存和较高的主频,这使它很难与许多轻量级的Web应用一起工作。SAX没有在内存中建立一个元素树,但是SAX也不支持修改XML文档和随机读取。绝大部分涉及XML的应用程序,并不需要XML标准里面所规定的所有东西,它们只需要其中的一小部分,并且希望这部分实现起来最好是快速的、低内存消耗的。本系统的设计与研究旨在为利用??C++技术为应用程序提供一个简洁、高速、低内存消耗的XML解析器。为了达到这个目标,首先必须对XML标准进行裁减,在此基础上提供一个便于使用的接口。
1面向C++的XML解析器的设计与实现
系统采用层的结构作为开发模型。这些层自下而上分别是操作系统文件层、编码层、词法分析层、语法分析层、内部数据层和DOM接口层,如图1所示。各个层的作用如下:
a)操作系统文件层。它负责读取应用程序所指定的文件,以二进制数据流的形式传送到编码层。将该层独立出来,提高了程序的可移植性,并且可以单独针对特定的操作系统作性能优化。
b)编码层。该层将判断数据流的编码格式,并且将所有的格式转换为内部使用的UTF-16格式,将转换后的unicode字符流传送到词法分析层。
c)词法分析层。分析字符流、识别语法成分,并以语法标记的形式传送给语法分析层。该层用LEX(lexical analyzer)和YACC(yet another compiler compiler)来实现。其中:LEX是一种生成扫描器的工具;YACC是一种工具,将任何一种编程语言的所有语法翻译成针对此种语言的YACC语法解析器[3]。
d)语法分析层。分析语法标记,并验证其组合次序是否符合XML语法的规定;最后将符合规定的XML语法成分以特定的数据格式(XML记录)拼装起来,送入内部数据层中。
e)内部数据层。该层接收XML记录,将其放入内部数据表,并负责维护该数据表,提供调用接口。该层以精简的方式存放了所有的XML数据,并且支持以流的方式来读取,可以与关系数据库直接对应。
f)DOM接口层。用DOM的接口来包装内部数据层所提供的数据和接口,方便理解和使用。
该设计利用模块化的思想,将各个功能单独地封装在一个模块中,有较好的扩展性和通用性。
1.1实现方案
系统涉及三种编程工具,即??C++编译系统、LEX和YACC。它们的关系如图2所示。
按照XML标准编写词法规则和语法规则,由LEX和YACC两个工具处理后,可以得到词法分析层和语法分析层的??C++源代码。将这些源代码与其他层的组合起来,通过??C++编译系统来生成最后的程序。
1.1.1XML标准的加工
本系统所参照的XML标准为W3C的extensible markup language(XML) 1.0: 2nd edition。该标准规定了XML文档的结构,以及文档中各种元素之间的逻辑对应关系。
这些标准是用EBNF的方式来描述的,总共有84条规则(规则最大编号为89。其中33~38条规则已经被删除,编号28的规则还有一条子规则为28a)。规则之间存在一些额外的约束,如单一元素约束,即一个XML文档只能包括一个根节点。该标准由以下部分组成:
d
原创力文档


文档评论(0)