




已阅读5页,还剩68页未读, 继续免费阅读
(计算机应用技术专业论文)通用可视化系统研究.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
武汉理工大学硕士学位论文 摘要 工程数据可视化是当今世界上工程应用中非常重要的一个环节,如何快速、 高效的将工程数据进行可视化处理并提供给应用人员使用,是工程数据可视化 需要解决的最主要的问题。如果能解决这些问题,对提高工程项目的效率将起 到决定性的贡献。同时,如何将先进的计算机技术应用到土木工程领域,研究 一套能够方便使用各种智能方法、通用的、易于扩展的、方便用户使用的可视 化框架,对结构分析优化和健康监测有极其深远的意义和实用价值。 本文拟将前沿的面向对象的建模技术,分层系统的构建,组件技术和分布 式数据的传输及处理结合起来,构建一个通用的可视化平台。将数据采集,数 据存储,数据处理和数据可视化集成到一个系统中,提高楚个过程的效率。而 且该系统可以用于对工程数据的集成处理及可视化。用户可以只扩充相应的模 块,而对整个系统不进行修改,就能使用整个系统来进行数据的处理和可视化。 本文首先对目前可视化系统存在的数据导入模块对数据文件格式支持不足 的问题提出了运用编译原理的词法分析,语法分析的方法,加上对数据导入模 块提供统一的接口函数来对数据导入模块进行扩充,运用l e x 和y a c c 这两个在 编译领域最常用的工具来简化数据的导入过程。提出了可扩展数据导入的方法。 然后,本文提出了使用x m l 对数据进行组织的方案。本文利用x m l 提供 的平台独立性、易于扩充性以及自描述性,来作为本文描述的系统的核心数据 存储结构。在这一部分中对x m l 数据处理的过程和方法进行了描述,同时介 绍了在w i n d o w l s 环境下m i c r o s o f t x m ls d k 的使用方法。 最后,本文使用了面向对象的建模方法对整个系统进行设计,详细介绍了 使用通用的可扩展接口对系统数据前处理、后处理和可视化过程。结合前文对 描述的以x m l 为核心结构,介绍了如何运用易于移植的接口实现方案进行系 统和扩展模块的结合。 文中还使用了f o r t r a n 和v c 十+ 进行混合编程,给出一个前处理系统的集成 环境,并通过实际运用证明了文中提出的方法是切实可行的,而且各种数据处 理过程是高效、直观的。 关键字:可视化,接口,丽向对象,x m l 武汉理:_ 】二大学硕士学位论文 a b s t r a c t i ti sa v e r yc r i t i c a ls t e pt h a tv i s u a l i z i n gt h ee n g i n e e r i n gd a t ai na p r o j e c t ,a n dt h e m o s tu r g e n tp r o b l e mt os o l v eo fi ti sh o wt o p r o v i d et h ed a t a ,w h i c hh a v eb e e n p r o c e s s e dw i t hv i s u a l i z a t i o n ,t o t h ee n g i n e e r t h e e f f i c i e n c yo f t h ew h o l ep r o j e c tw i l l b eg r e a t l yi m p r o v e da f t e rt h i sp r o b l e mh a sb e e ns o l v e d t h i sa r t i c l ei sf o c u s e do nag e n e r a lv i s u a l i z a t i o np r o c e s sa n dh o wt oi n t e g r a t e t h e c o l l e c t i o n , t h es t o r a g ea n dt h ep r o c e s s i n go ft h ee n g i n e e r i n gd a t ai n t o a d i s t r i b u t e de n v i r o n m e n t w ec a n i m p r o v e t h e e f f i c i e n c y o f e n g a n e e r i n g d a t a p r o c e s s i n g a n dm a k e u s eo fa l lt h er e s o u r c e s i ti sp r o f o u n dt oi n v e n tas e to fm e t h o d s ,w h i c hc a nb eu s e di na l lk i n d so f e n g i n e e r i n gp r o j e e t t h e s em e t h o d s c a nb ee a s i l yi n t e g r a t e dw i t hv a r i a n ti n t e l l i g e n t m e t h o d ,e a s yt o b ee x t e n d e d ,a n de a s yt ou s eb yu s i n gm o s ta d v a n c e dc o m p u t e r t e c h n i q u ei ni t w eu s eo b j e c to r i e n t a lm o d e l i n g ,b u i l d i n go fl a y e r e ds y s t e ma n dd i s t r i b u t e d d a t at r a n s f o r mt ob u i l dt h i ss y s t e m a n di nt h i ss y s t e m ,w ep r o v i d eag e n e r a lp r o c e s s o fi n t e g r a t ed a t ac o l l e c t i o n , d a t ap r o c e s s i n ga n dd a t av i s u a l i z a t i o n u s e r sc a no n l y e x t e n dan e c e s s a r ym o d u l et ou s et h ew h o l es y s t e mt ov i s u a l i z ed a t aw i t h o u ta n y m o d i f i c a t i o no f i t w e p r o v i d eo u ro w n s o l u t i o no f e x i s t i n gv i s u a l i z a t i o ns y s t e ma n da n a l y s i st h e s o l u t i o ni nt h r e e p a r t s f i r s t , w od e v e l o pan e ww a y t oi m p o r td a t at ot h es y s t e mb yu s i n gt e c h n i q u e so f c o m p i l ep r i n c i p l et o g e t h e r w i t has e to f u n l q u ei n t e r f a c ep r o v i d eb yo n rs y s t e m t 1 1 i s n e wf e a t u r eo fo b rs y s t e mf a c i l i t a t e st h ee x t e n s i o no fd a t ai m p o r tm o d u l e w ea l s o u s el e xa n dy a c ct os i m p l i f yt h ed a t ai m p o r t i n g a n db yu s i n gt h i st e c h n i q u e ,w e g i v ean e w e x t e n d a b l ed a t am e t h o d s e c o n d l y , w ed e v e l o pt h ed a t ao r g n i z a t i o ns c h e m eu s i n gx m l b yu s i n gt h e i n d e p e n c yo fp l a t f o r ma n dt h ee x p a n s i b i l i t y , w et a k ei t a st h ek e r n e ld a t as t o r a g e s t r u c t u r e w ed e s c r i b et h em e t h o dw eu s e di no u rs y s t e mt od e a lw i t hx m l ,a n d i n t r o d u c et h eu s i n go fm i c r o s o f tx m l s d k 武汉理工大学硕士学位论文 i ti sd e s c r i b e dh o wt od e s i g nt h es y s t e mu s i n go b j e c to f i e mm o d e l i n g ,a n d i n t r o d u c i n gt h eg e n e r a le x t a n d a b l ei n t e r f a c ea p p l i e do nt h ed a t ap r e p r o c e s s i n g ,d a t a p r o p r o c e s s i n ga n dv i s u a l i z a t i o n f i n a l l y , i ti si n t r o d u c e dh o w t ou s i n gap o r t a b l e i n t e r f a c ei m p l e m e n tt oi n t e r a c tb e t w e e nt h es y s t e ma n de x t e n dm o d u l ei nt h i sa r t i c l e i ti sa l s ou s e dh o wt oi n t e g r a t ef o r t r a na n dv c + + t o p r o v i d eap r e - p r o c e s s i n g e n v i r o n m e n t a n dt h i sm e t h o di sa p p l i c a b l e ,e f f i c i e n ta n dd i r e c t k e yw o r d s :v i s u a l i z a t i o n ,i n t e r f a c e ,o b j e c to r i e n tt e c h n i q u e s ,x m l 武汉理工大学硕士学位论文 第1 章绪论 1 1 研究背景和研究意义 1 1 1学科前沿及发展趋势 工程数据可视化是当今世界上工程应用中非常重要的一个环节,如何快速、 高效的将工程数据进行可视化处理并提供给应用人员,是工程数据可视化需要 解决的最主要的问题。如果能解决这些问题,对提高工程的效率将起到决定性 的作用。本课题着眼于通用的工程数据的可视化,将工程数据的采集,存储, 处理及可视化集成到一个统一的环境中。如此一来可以极大的提高工程数据的 处理效率,并可以充分利用各种硬件。运用工程数据可视化的技术进行计算机 仿真模拟可以提高各种数据的使用效率,同时可以为工程数据的使用提供依据。 计算机仿真模拟是利用计算机通过已知的各种知识,运用各种方法,如神 经网络,专家系统及数据挖掘等,对物理过程、系统结构进行比较逼真的模仿, 这一技术在土木工程中已有不少应用,如结构构件破坏的模拟、岩土失稳的模 拟等。s h e l o n e ym o n i 和d o n a l d w w l l i t e 等利用面向对象新技术建立了一套框 架结构图形显示的可视化系统,r a g a h a v a nk u n i g a h a l l i 提出了一种钢筋混凝土 三维建模的计算机系统集成的思想。美国国家宇航局a m e s 研究中心研制的分 布式虚拟风洞,是基于虚拟现实技术的大型系统,但是其要求的设备条件远非独 立微机可以实现,主要也是作为研究用途,因此也很难在一般设计院所推广应 用。 1 1 2 研究意义 虽然以上提到的这些工作有着很大的研究价值,但是在实际使用中运用却 困难重重,其原因主要是由于目前国内用于建筑结构受力分析的软件较少,而且 多数不具备上述多媒体动态模拟的概念和功能,他们或者仅用于结构分析计算, 武汉理】:大学硕士学位论文 或者仅用于外观及其内部构型的建模绘制,软件比较单一化,不能形成一个统 一的工作流程,使用者在使用过程中不得不自己进行各种数据的转换、整合, 并且在使用中需要不断的学习新的软件,增加了软件的使用成本,因此降低了 效率。 随着计算机及图形学技术的进步,多媒体技术和科学计算可视化技术 v i s c ( v i s u a l i z a t i o ni ns c i e n t i t i cc o m p u t i n g ) 为我们解决上述问题带来了新的思路 和方法。多媒体( m u l t i m e d i a ) 是指信息表示媒体的多样化,常见的文字、图像、 声音、动画,承载信息的程序等都是媒体。多媒体技术是指人类同计算机交互 处理多媒体信息的方法。v i s c 是运用计算杌图形学和图像处理技术,将科学计 算结果的数据转换为图形及图像在屏幕上显示出来并进行交互的理论、方法和 技术。这两种技术在应用中既相互包含,又具有自己的特征。将两种技术结合 在一起则可将结构受力分析计算产生的大规模数据信息转化成为直观的、易为 结构工程人员理解的,且可以进行交互分析的、用图形和图像形式表现的静态 的或动态的画面。 目前在工程应用领域中,主要使用各种有限元瞰】分析软件来进行工程计算。 自有限元法问世以来的三十多年问,人们已经非常成功地运用有限元分析方法 实现了各式各样工程问题的计算,由此产生或带来了巨大的社会和经济效益。 美国的s w a n s o na n a l y s i ss y s t e m 公司、a l g o r 公司、a n s y s 公司、s t r u c t u r a l r e s e a r c h & a n a l y s i s 公司等都分别发展各自的微机大型有限元分析系统。a l g o r 公司的f e a s 已被全美的5 0 个州以及全世界6 0 多个国家的有关研究机构和生 产厂家所应用,在工程设计、高层计算、桥梁等的计算分析中发挥着作用。 a n s y s 公司开发的a n s y s 系列有限元分析软件网,以其强大的前后处理功能、 近乎完美的求解器和简单使用的类j a v a 的解释性a p d l 语言而风靡全球,深受 学术界的人士欢迎。m s c 系列有限元分析软件,如m s c - m a r e 、m s c - d y t r a n 、 m s c n a s t l u i n 等,在结构的非线性分析方面有自己的独特优势。 有限元分析是工程计算上一种比较精确和有效的数值计算方法,可以用来 对实际结构或设计模型进行分析,是结构设计或智能专家系统中的重要分析工 具。目前几乎所有的商业化有限元程序系统都有功能很强的前置建模和后置数 据处理模块。在强调“可视化”的今天,很多程序都建立了对用户非常友好的 g u i ( g r a p h i c su s e ri n t e r f a c e ) ,使用户能以可视图形方式直观快速地进行网格自 动划分,生成有限元分析所需数据,并按要求将大量的计算结果整理成变形图、 武汉理工大学硕士学位论文 等值分布云图,便于极值搜索和所需数据的列表输出。 a n s y s 软件作为通用有限元软件,在结构分析中有着灵活的应用。首先, 它可实现对结构的整体分析,任意设定荷载工况,并可完成复杂的荷载工况组 合;在整体分析的同时,也可对感兴趣的细部加密网格,得到较为精确的细部 结果。也可将本工程感兴趣的细部单独建模,将结构整体分析的结果引入细部 模型,将得到满意的计算结果。其次,a n s y s 软件可以实现各种复杂的计算假 定,可使计算结果更接近结构实际情况。再者,a n s y s 软件强大的后处理功能 为计算结果的直观应用创造了有利条件。众所周知,对结构进行分析,第一步 须先建立几何模型和力学模型。a n s y s 程序自身有着较为强大三维建模能力, 仅靠a n s y s 的o u i ( 图形界面】就可建立各种复杂的几何模型;此外,a n s y s 还提供较为灵活的图形接口及数据接口。因而,利用这些功能,可以实现不同 分析软件之间的模型转换,从而节省较多的工作量。 虽然,目前商用的有限元分析软件【5 4 】已具有强大的可视化功能,但主要适 用于相关领域的专业人员,建模过程繁复,且很难根据用户实际要求实现实时 可视化和智能控制,另外也缺乏智能决策功能。且对于自主版权的具有特定功 能的软件开发( 如结构健康智能监测软件等) ,只能作为前端的有限元分析工具, 而且由于有限元方法的速度局限性,只可能进行非实时的应用。因此,将先进 的计算机技术应用到土木工程领域,研究一套能够方便使用各种智能方法、通 用的、易于扩展的、方便用户使用的可视化框架,对结构分析优化和健康监测 有极其深远的意义和实用价值。 1 2 主要研究工作和研究目标 1 2 1研究内容 实现通用的可视化平台,其总体结构是否合理科学,将极大的影响到整个 系统的使用效率,所以首要的问题是,构建一个灵活,高效,易于扩充的体系 结构。由于要考虑在多平台的移植,故没有使用c o m 和c o r b a 等平台相关 技术,而是对底层系统进行抽象,从而达到平台无关的目的。 其次是接口技术的实现,各个模块之间如果没有一个合理的接口,将导致 武汉理工火学硕士学位论文 各个模块之间不能紧密的结合在一块,甚至可能造成燕个系统的瘫痪,解决这 个问题将关系到整个系统的成败。 如何合理的管理数据,处理数据,数据库是一个很好的解决方案,但是如 果需要在跨平台的环境下进行数据的交换,则数据库将很难胜任,而x m l 由 于设计的目的是在i n t e r n e t 这个多平台环境下使用,所以在处理跨平台的数据时 有着数据库无法比拟的先天优势。故在本系统这样的环境中,x m l 比数据库有 更多的优势。在本系统中如何使用x m l 进行数据的管理和处理,将成为本系 统将要解决的最为关键性的问题。 虽然x m l 可以解决以土的这些问题,但是当要进行数据挖掘时,数据库 就显示出它的优势了,如何在本系统中令工程数据库和x m l 取长补短,将是 本系统成功的关键。 1 2 2研究方法及其技术 本文研究采用面向对象的程序设计相结合的方法。 1 ) 通过运用编译原理的知识辅助可视化数据的导入。 2 ) 运用x m l 技术对可视化数据进行存储和处理。 3 ) 利用可视化编程环境,将v i s u a lc + + 和f o r t r a n 语言结合起来,进行 混合编程,对数掘进行前处理和后处理。 4 ) 使用面向对象技术连接整个系统,并提供二次开发的接口,为系统的 扩充提供支持。 本系统主要使用v i s u a lc + + 6 0 进行开发研制,使用到了设计模式,面向对 象,o p e n g l ,编译原理,x m l 等技术。 武汉理工大学硕士学位论文 第2 章使用l e x 和y a e c 进行数据解析 2 1 引言 l e x 3 】和y a c c 是一套有着悠久历史的编译器自动生成辅助软件,许多优秀 的编译器都是在l e x 和y a c c 的辅助下产生的。虽然l e x 和y a c c 的主要用途是 用于自动产生编译器程序的词法分析器和语法分析器,但是经过我们的实践, 发现将l e x 和y a e e 用于进行数据解析也是非常方便的。 在本章中,笔者首先介绍了如何使用l e x 和y a e c 进行编程,并举例进行了 说明。接下来,通过在本系统研制当中所遇到的一个具有代表意义的数据文件 格式的解析为例,介绍如何结合使用l e x 和y a e c 来进行文本格式数据的解析, 并介绍了本系统提供给使用者使用的一些数据导入函数。然后介绍了如何通过 自己编写词法分析器来和y a c c 进行交互,从而简化二进制文件的解析。在本章 的最后,笔者结合在使用l e x 和y a e c 时遇到的问题,总结了l e x 和y a c c 在进 行数据解析时盼优势和缺陷。 2 2l e x 和y a c c 简介 编译程序实质上是一种转换程序,将一种格式转换成为另外一种格式,在 不同的编程语言之间进行转换,或者将手工编写的程序转换成机器能够识别的 机器码。而编译原理则是研究如何进行这种转换,我们完全可以运用编译原理 中的方法来指导如何进行各种数据格式之间的转换。 l e x 和y a c c 是特意为编写编译程序和解释程序的人设计的工具,l e x 代表 l e x i c a la n a l y z e r 。y a c c 代表y e ta n o t h e r c o m p i l e rc o m p i l e r 。但是它对非编译程 序编写人员也非常有用。l e x 和y a c c 是编译程序设计的两种非常重要的、功 能强大的工具。事实上,如果熟练掌握了l e x 和y a c c 的话,它们的强大功能 使创建即使像f o r t r a n 和c 这样的编译器也非常简单。 l e x 和y a e e 所能处理的词法和语法涵盖了绝大多数数据表示的可能情况, 通过笔者的实践,发现也可以使用l e x 和y a c c 进行绝大多数的数据分析和转换, 武汉理工大学硕士学位论文 而且这种转换也非常简单方便。l e x 和y a c c 不但可以共同使用,还可以由使用 者自己编程实现词法或者语法分析器,与l e x 或y a c c 配合使用,从而极大的提 高了l e x 和y a c c 使用的灵活性,也便于使用者使用。 2 2 1 l e x 简介 l e x 的功能是生成个词法分析器( 也称为词法器或扫描器) 的源代码( 可 能是c ,c + + 或p a s c a l 或j a v a 等) 。一般来说,个词法分析器首先得到一个文 本文件,然后将其中的字符组合起来形成独立的称为标识符的块,其意义由词 法分析器指定。这些标识符接着被送到语法分析器( 可使用y a c c 作为语法分析 器的生成器来生成,或由使用者自己手工编写) 。我们可以运用l e x 生成的词法 分析器程序来对数据文件进行词法分解。 2 2 2 y a c c 简介 y a c c 的功能是生成一个语法分析器的源代码( 可能是c c 抖或p a s c a l 或 j a v a 等) 。y a c c 代表y e ta n o t h e rc o m p i l e rc o m p i l e r 。它是一种工具,将任何一 种编程语言的所有语法翻译成针对此种语言的y a w 语法解析器。它用巴科斯范 式( m q f , b a c k u s n a u rf o r m ) 来书写。按照惯例,y a c c 文件有y 后缀。y a c c 生 成的是一个语法分析嚣的源代码( 还可能包含个有着标识符定义的头文件, 这个文件可以被l e x 使用) 。一般说来,一个语法分析器将把词法分析器产生的 标识符组合成有特定意义的短语。每个短语可以和一个动作联系起来。在这些 动作中可以进行相应语法的操作,因此,我们可以利用这一点,将数据文件导 入我们的程序中。 在上一节中,我们看到l e x 从输入序列中识别标识符。如果查看标识符序 列,可能想在某一序列出现时执行相应的动作。这种情况下有效序列的规范称 为语法。y a c c 语法文件包括这一语法规范。它还可以包含当序列匹配时你想要 完成的动作( 主要是一些c 语言代码) 。 以英语为例,这一套标识符可能是:名词,动词,形容词等等。为了使用 这些标识符造一个语法正确的句子,你的结构必须符合一定的规则。一个简单 的句子可能是名词+ 动词或者名词+ 动词+ 名词( 如is e e 或者c a t se a tm i c e 、。 6 武汉理工大学硕士学位论文 如“c a t se a tm i c e ”这个句子,如果我们在词法分析器中先将其分解为三 个标识符:名词动词名词,然后这三个标识符符合“名词+ 动词+ 名词”所构 成的句子,因此这个句子是使用该语法的句子。 2 3 l e x 和y a c c 的交互 前面介绍了l e x 和y a c c 是怎样独立工作的。但是它们之间怎样协作工作来 生成分析器呢? 每当一个新的标识符被发现的时候,词法分析器的代码( 一般由l e x 产生) 就将被语法分析器( 一般由y a e e 产生) 调用。个程序通常在每次返回一个标 记时都要调用y y l e x o 函数。只有在文件结束或者出现错误标记时才会终止。词 法分析器只是简单的返回找到的标识符,而语法分析器则不断的向词法分析器 请求新的标识符,直到得到一个完整的语法匹配。除了返回标识符的类型外, 语法分析器动作中所使用的值还可以通过, v y l v a l 返回给y a c c 的函数。一个由 y a c c 生成的解析器调用y y l e x o 函数来获得标记。y y l e x o 可以由l e x 来生成或完 全由自己来编写。对于由l e x 生成的词法分析器来说,要和y a c c 结合使用,每 当l e x 中匹配一个模式时都必须返回一个标记。 因此l e x 中匹配模式时的动作一般格式为: 于是y a e c 就会获得返回的标记。当y a r 。e 编译一个带有以标记的y 文件时, 会自动地生成一个头文件,它对每个标记都有# d e f i n e 的定义。如果l e x 和5 ( a c e 一起使用的话,头文件必须包含在相应的l e x 文件中的c 声明段中。 2 4l e x 和y a c c 在数据文件解析中的应用 笔者前面提到过,l e x 和y a c e 主要用于生成各种编译程序。按照传统的观 念,编译程序一般被看成是把使用c 语言等高级语言编写的源程序翻译成汇编 语言或者某种计算机的机器语言的程序。然而,在许多与语言翻译毫不相关的 武汉理工大学硕士学位论文 场合,编译技术也常常被使用。在这里,使用编译技术来进行数据文件的解析。 对一些比较简单的数据文件格式,只需要使用编译技术中词法分析的技术来进 行解析,一些较复杂的数据文件格式则需要使用到语法分析技术,甚至有些数 据文件因为包含了一些复杂的操作脚本,或者是要在数据存取时进行一些计算 工作,可能还需要进行语义分析。这时如果手工进行这些数据导入导出程序的 编写,将是比较困难的。而且在本文所描述的应用中,还需要导入多种格式的 数据文件,如果手工编写数据导入的程序,则每次必须根据不同的数据格式编 写不同的程序,且这些程序还不能够互相借鉴,达到重用的目的,这对于一些 非计算机专业人员使用本系统造成了不小的问题。 而如果使用l e x 和y a c c 来辅助数据的解析,整个数据解析的流程可以固定 下来,并且可以使用w i z a r d ( 见4 7 节) 来自动生成大部分固定不变的模板程 序,用户只需要编写少量与数据格式相关的代码,就可以生成数据导入的模块。 同时,为了使导入数据的流程更加统一,本系统还提供了一些通用的数据导入 函数,这些函数放置在由本系统提供的扩展程序开发包的u t i l i t i e s 库中,供用户 使用。这些函数包括定义2 d 3 d 点的函数,定义2 d 3 d 线的函数,定义2 d 3 d 面 的函数等,使用这些函数再加上l e x 和y a e e 的程序中可以很方便的进行数据转 换工作。 2 5 文本数据文件的解析 有了l e x 和y a c c 就可以很方便的解析数据文件了。下面将就使用l e x 和 y a c c 对一种中等复杂程度的数据文件格式进行解析,并详细的说明其过程。在 本系统的研制中,遇到了很多种数据格式,有的数据格式非常简单,有的则非 常复杂,下面笔者将以一种很有代表性的数据格式对如何开发一个完整的数据 导入模块进行说明,这种数据格式如下图: 武汉理工大学硕士学位论文 图2 1 数据文件格式举例2 由上面的文件格式举例,可以清楚的看到这样一个数据文件由以下几个部 分构成: 1 ) 点定义 2 ) 线定义 3 ) 三角形定义 4 ) 多边形定义。 其中每个定义又由分隔符和数据部分构成。 9 武汉理工大学硕士学位论文 分隔符包括起始分隔符和结束分隔符。 例如在点定义中:p o i n tb e g i n 为起始分隔符,p o i n te n d 为结束分隔 符,而在两个分隔符之间的部分就是数据部分了。数据部分每一行为一条数据, 一条数据又由两部分构成,第一部分是编号,第二部分是数据,它们之间用空 格隔开。数据根据不同的类型又有不同,例如对点定义来说,数据为该点的三 维坐标,由三个浮点数构成,之间用逗号隔开。而线定义数据由l i n eb e g i n 和l i n ee n d 与其他数据分隔。数据有编号和线的起点和终点的点定义编号构 成。三角形和多边形的定义与线的数据定义类似。 如果手工编写这个数据格式的文件解析程序的话,就需要从文件逐个字符 的读入数据,并判断是字符数据还是数字数据,在读取数据的时候还要进行编 号及数据的区分,而且还要对空行及空格进行处理,需要考虑的情况非常复杂。 而且在这个数据文件中,点定义和其他定义完全不同,其他定义是完全依靠点 定义的。如果进行这种文件解析的话,就还需要考虑到上下文相关的信息,也 就是还需要进行语义分析,才能够完整的解析这个数据格式的文件。 有此看来手工编写这个数据格式的文件的解析程序将是非常复杂的工作, 而且在编写完成后,这种格式的解析程序代码很难重用到其他格式的解析程序 中。但是如果使用l e x 程序进行词法分析,使用y a e e 程序进行语法分析,最后 使用我们提供的库函数进行语义相关的分析,那么解析这个数据格式的文件将 非常简单。 同时由于有了非常清晰的程序结构,可以很容易的进行代码的重用。如本 系统提供的扩展开发包中所提供的数据导入函数库中的函数就是在对大量各种 数据格式文件进行解析导入的过程中精炼出来的,这些函数提供了本系统的代 码重用和扩展的基础。 2 5 1使用l e x 来进行词法分析 要导入这个格式的数据,就首先要分解出分隔符和数据,分隔符是字符串 形式,而且其内容也是固定的,我们可以使用正则表达式来对其进行匹配,当 匹配到相应的分隔符是就向语法分析器返回相应的标识符: 武汉理工大学硕士学位论文 这些标识符在y a c c 中用t o k e n 来进行定义,当用y a c c 编译y a c c 程序时, 就会产生一个包含有标识符定义的头文件y y t a b h ,因此不用手工定义这些标识 符,只需要在l e x 程序中包含这个文件就可以了。 接下来需要对数据进行解析,数据分成两个部分,第一部分是编号( 用整 数表示) ,第二部分是数据本身,数据由多个数组成( 在点定义中为浮点数或者 是科学记数法,其他定义中都为整数) 。我们可以用如下的l e x 程序定义整数和 浮点数: 当词法分析器匹配到一个整数时,首先将包含这个整数的字符串转换成为 一个整数值( 通过使用c 标准函数a t o i o ) ,并将转换的结果赋值到l e x 和y a c c 之间进行数据传输的变量y y l v a l ( y y l v a l 将在y a e e 程序中定义为包含一个整数 值和一个浮点数值的u n i o n ) 中的整数分量,并向语法分析器返回一个表示整数 的标识符n 烈i n t e g e r ;当词法分析器匹配到一个浮点数时,首先将包含这 个浮点数的字符串转换成为一个浮点数值( 通过使用c 标准函数a t o f o ) ,并将 转换的结果赋值到l e x 和y a c c 之间进行数据传输的变量y y l v a l ( y y l v a l 将在y a c c 程序中定义为包含一个整数值和一个浮点数值的u n i o n ) 的浮点数分量中,并向 语法分析器返回一个表示浮点数的标识符t k nf l o a t 。 将以上两部分加起来就构成了解析这种格式的数据文件的l e x 程序: 武汉理工人学硕士学位论文 程序2 1 文本数据文件解析词法分析器 2 5 2使用y a c c 来进行语法程序 接下来,笔者将介绍如何使用词法分析程序的返回值来进行相应的语法分 析。前面已经提到,用y a c c 生成的语法分析程序可以很容易的和用l e x 生成的 词法分析程序结合。但是需要按照一定的步骤来进行编程,才能够将l e x 和y a c c 完美的结合 重生鐾些塑! 矍壁塑塑查型些垒堕篷! t o k e n t k n p o i n t _ b e g i n ,t k n p o i n t e n d ,t k n _ l i n e _ b e g i n ,t k n _ l i n e _ e n d t t k n t r i a n g l e b e g i n ,t k n t r i a n g l e _ e n d ,t k n p o l y g o n _ b e g i n t t k n p o l y g o n e n d 上面的语句就定义了一系列的终结符,这些终结符可以通过在l e x 程序中 包含y y t a b h 这个由y a c c 生成的头文件来在l e x 程序中使用。 然后还需要定义一个u n i o n 结构来存放由l e x 程序传回的值这个u n i o n 由两个分量组成,分别是整数分量i n g e t c r 和浮点数分量f l o a t v : 武汉理工大学硕士学位论文 接下来就是对整个文件进行语法分析了,按照文件的结构,将整个文件分 为四段:p o i n ts e c t i o n 、l i n e _ s e c t i o n 、t r i a n g l e s e t i o n 和q u a d _ s e c t i o n 。 d a t a :。 lp o i n ts e c t i o n1 i n es e c t i o nt r i a n g l es e t i o n 下面以p o i n ts e c t i o n 为例说明如何进行解析。 p o i n t _ s e c t i o n 是由三个部分组成起始分隔符,数据( p o n i n tl i s t ,可能有多 行) ,结束分隔符。因此使用下面的程序段来对p o i n t _ s e c t i o n 进行定义。 p o i n t s e c t i o n :+ + lt k np o i n tb e g i np o i n t1 i s tt k np o i n te n d p o i n t _ l i s t 表示多条点定义数据,有p o i n e f 和其自己递归构成。因此能够 匹配任意多条定义数据。 p o 湘e f 的定义是完全由终结符组成,当解析出数据后,用y a e e 的内景变 量来调用有本系统提供的扩展程序库中的数据导入函数d e f i n e p o i n t ( v o j ,z 将以上几个部分加起来就构成了解析这种格式的数据文件的y a c c 程序 武汉理工大学硕士学位论文 # i n c l u d e ( s t r i n g h # i n c l u d e ( s t d i o h e x t e r n c h a r y y t e x t j e x t e r nv o i dd e f i n e p o i n t i n t p o i n t n o o t h e r i m p o r tu t i l i t yf u n c t i o n ) + t o k e n s + r e t u r n t y p e s f o rt o k e n s u n i o n t o k e n t k n p o i n tb e g i n t k n p o i n t _ e n d ,t e n l i n e b e g i n r t k n l i n e e n d , 日3 r i a n g l e j e g i n , t k n _ t r i a n g l ee n d - t k n p o l y g o n ,e g i n t k n p o l y g o n j n d , t k nc o m m a t 。k e n ( i n t e g e r t k n i n t e g e r t o k e n t k nf l o a t d a t a :+ f p o i n t s e c t i o nl i n e s e c t i o nt r i a n g l e s e t i o nq u a d _ s e c t i o n p o i n t _ l i s t :l + + p o i n t d e fp o i n t 1 i s t c o o r d i n a r y :t k ni n t e g e r i t k nf l o a t t 防止出现整数的坐标+ p o i n td e f :+ i t 一i n t e g e r c o o r d i n a r yt k n c o m m ac o o r d i n a r yt 翻一c o m m ac o o r d i n a r y f + p o i n ti d e n t i f i e d + d e f i n e p o i n t ( 暑1 ,2 ,4 ,6 ) ; l 卜o t h e rs e c t i o ni d e n t i f i e t + i 程序2 - 2 文本数据文件解析语法分析器 在语法分析器中对词法分析器中得到的标识符进行分析,得到其中有意义 的部分,并将解析出来的数据通过d e f i n e p o i n t ( i n t n o , f l o a t 鼍f l o a t y , f l o a t 力这个 工具库提供的函数导入到我们的系统中。 使用以上的l e x 词法分析程序和y a c e 语法分析程序,可以解析并向本系统 导入相应格式的文本数据文件。最后在本系统内部自动的转换成为x m l 文件。 如果需要导入其他格式的数据文件,只需要修改相应的词法和语法规则就 m哟 h 北 m m 武汉理】。大学硕士学位论文 可以了,不用改变本系统提供的扩展开发包中的函数调用,整个程序的结构也 不需要改动,从而达到了重用的目的。 2 6 二进制数据文件的解析 l e x 用于解析文本格式的数据有着先天的优势( l e x 主要用于构造编译程序 的词法分析器,而大多数程序都是由人工手写的文本文件) ,但是在解析二进制 文件时却成为了先天的劣势。l e x 可以说几乎不支持二进制文件的解析( 虽说 有某些使用y y i n p u t o 和y y o u l p u t o 函数的小技巧可能令l e x 支持二进制文件,但 是使用起来太麻烦,而且容易出错,本文就不加以介绍) 。如果需要进行二进制 数据文件解析的话,就必须手工编写一个词法分析程序,并使用y y l e x o 作为其 调用的接口。使得语法分析器每次调用y y l e x o 时都返回一个新的标识符。下面 举例说明如何编写一个读取二进制数据文件并进行词法分析。 根据2 3 节的叙述,必须按如下步骤来手工构造二进制文件的词法分析器: 1 ) 首先打开以二进制方式打开一个数据文件。 2 ) 使用f g e t c o 获取相应的标志值,并进行识别。 3 ) 对识别出来的类型进行相应的操作,如获取相应的值,用y y l v a l 传递获 取的值。 4 ) 在形如i n t y y l e x 0 的函数中返回标识符。 5 ) 准备进行下一次识别。 假设要解析中数据对应的二进制的数据文件,在这个二进制数据文件中, 用不同的二进制值取代了p o 玳tb e g i n 等分隔符,同时将i n t ,f l o a t 等数据按 位直接存入文件,如下图: 武汉理t 大学硕士学位论文 程序2 3 手工编写的二进制数据文件词法分析器 6 武汉理主夫学硕十学位论文 p o i n tb e g i n 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 2 4 0 0 0 0 0 0 3 6 0 0 0 0 0 0 4 8 0 0 0 0 0 0 5 0 0 0 0 0 0 6 c 0 0 0 0 0 0 7 e 0 0 0 0 0 0 9 0 0 10 0 0 1 0 0 程序2 _ 4 对应的y y t a b h 点的坐标数据:1 0 ,2 o 3 op o i n te n d 圆i 1 0 0 0 0 2 0 00 10 00 10 00 2 0 02 00 00 z0 0 0 20 0 0 20 00 30 0 i l i n es e c t i 2 00 0 0 20 0 0 3 0 00 30 00 4 0 0 2 00 0 0 20 0 0 4 0 00 1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 员工带薪休假住宿安全保障及事故处理协议
- 2025公务员述选面试题及答案
- 吊篮高空作业人员保险与安装合同
- 可复用构件的环境适应性与可靠性评估-洞察及研究
- 呼啦圈课程汇报
- 2025至2030中国背光LED驱动器行业发展趋势分析与未来投资战略咨询研究报告
- 2025至2030中国双向压蝶阀行业产业运行态势及投资规划深度研究报告
- 农业园艺工培训
- 生物信息化教学课件展示
- 国家电网笔试题目及答案
- 二零二五版公司股权质押协议的模板
- 村级民主理财制度
- 海南时政面试试题及答案
- T-CTSS 90-2024 茶叶碳足迹核算方法
- 肺癌血管介入治疗
- 劳动合同法全文(2024年版)
- 《人教版物理介绍》课件
- 快速精确-细节毕现-Carto3标测策略
- 《矿山应急救援》培训课件2025
- 2025年临床诊疗指南:过敏性紫癜详解
- 老年人如何科学进行脑力训练
评论
0/150
提交评论