(计算机应用技术专业论文)基于cs模式的java实验环境研究.pdf_第1页
(计算机应用技术专业论文)基于cs模式的java实验环境研究.pdf_第2页
(计算机应用技术专业论文)基于cs模式的java实验环境研究.pdf_第3页
(计算机应用技术专业论文)基于cs模式的java实验环境研究.pdf_第4页
(计算机应用技术专业论文)基于cs模式的java实验环境研究.pdf_第5页
已阅读5页,还剩49页未读 继续免费阅读

(计算机应用技术专业论文)基于cs模式的java实验环境研究.pdf.pdf 免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

摘要 计算机网络技术已得到飞速发展,计算机语言的学习也应该充分利用计算机 网络技术,实现远程教育。在计算机语言学习中,上机练习是必不可少的环节。 传统的上机环境要求指导教师和学生要处于同一机房。这种教学模式没有充分利 用发达的网络技术,在时间和空间上限制了上机指导的实施。本文介绍的基于 c s 模式的j a v a 远程实验环境,充分利用了网络技术,解决了这一问题。 利用多种软件技术以及网络技术和面向对象的思想,本文设计并实现了一个 基于c s 模式的j a v a 语言实验系统。此系统采用j a v a 语言编写,基于j a v as t a n d a r d e d i t i o n6 0 构建。其中网络部分基于c s 模式,用j a v a n i o 通信技术实现;编译 运行相关功能则采用j a v ac o m p i l e r a p i 实现;编辑器的相关功能是依靠词法分析 器j - f l e x 实现。这样较好地解决了传统上机实验中存在的上机指导环境有限、文 本编辑器工具效率低下和专业开发工具难于掌握的问题。 此系统实现了与实验环境集成的在线监控、提问答疑等功能,扩大了上机指 导的实践范围,也提高了教学效率,并具有容易使用,升级灵活和跨平台的特点。 关键词:c s 模式,j 2 s e ,j a v an i o ,远程教育,网络通信 a b s t r a c t w i t ht h e - r a p i dd e v e l o p m e n to fn e t w o r kt e c h n o l o g y , t h el e a r n i n go fc o m p u t e r l a n g u a g es h o u l dt a k et h ea d v a n t a g eo fn e t w o r kt e c h n o l o g ya n dd i s t a n c ee d u c a t i o n p r a c t i c eo nc o m p u t e ri sa b s o l u t e l yn e c e s s a r yi nt h el e a r n i n go fc o m p u t e rl a n g u a g e t h et r a d i t i o n a le n v i r o n m e n to fp r a c t i c eo nc o m p u t e rr e q u i r e st h a tt e a c h e ra n ds t u d e n t s m u s tb ei ns a m ep l a c e 。t h i se d u c a t i o nm o d ed o e s n tt a k et h ea d v a n c eo ft h en e t w o r k t e c h n o l o g ya n dl i m i t s t h ee f f i c i e n c yo ft h ec o m p u t e rp r a c t i c ei ns p a c ea n dt i m e r e m o t ej a v ae x p e r i m e n te n v i r o n m e n tb a s e do nc sm o d e ,w h i c hi si n 仃o d u c e di nt h i s p a p e r , s o l v e st h i sp r o b l e mb ya p p l i c a t i o no fc o m p u t e rn e t w o r kt e c h n o l o g y w i t ht h ea d v a n t a g e so fs o f t w a r e ,n e t w o r kt e c h n o l o g i e sa n dt h ei d e ao fo b je c t o r i e n t e d p r o g r a m m i n g ,t h i sp a p e rd e s i g n s a n d i m p l e m e n t s a n e x p e r i m e n t e n v i r o n m e n tb a s e do nt h ec sm o d e i ti sw r i t t e ni nj a v al a n g u a g ea n db u i l to nj a v a s t a n d a r de d i t i o n6 0 t h en e t w o r kc o m p o n e n ti sb a s e do nc sm o d ea n dc o n s t r u c t e d o nj a v an i ot e c h n o l o g y t h eb u i l da n dr u nc o m p o n e n ti si m p l e m e n t e dw i t hj a v a c o m p i l e ra p i t h ee d i t o rc o m p o n e n ti sb u i l to nj f l e x ,w h i c hi saj a v ap a r s e r g e n e r a t o r t h ee n v i r o n m e n ts o l v e st h ep r o b l e m ss u c ha sl i m i t e ds p a c eo ft h et e a c h e r s g u i d i n g ,l o we f f i c i e n c i e so ft h et e x te d i t o r , h a r du s i n go ft h ep r o f e s s i o n a ld e v e l o p m e n t t o o li nt r a n s i t i o n a lc o m p u t e rp r a c t i c ew e l l 。 t h ee n v i r o n m e n ta c h i e v e st h eo n l i n em o n i t o r i n g ,r e m o t e q u e s t i o n i n g a n d a n s w e r i n g e n h a n c et h ef e a s i b i l i t ya n dt h ee f f i c i e n c yo fc o m p u t e rl a n g u a g ep r a c t i c e a n dp r o v i d e st h ef e a t u r e ss u c ha s e a s eu s i n ga n d u p g r a d i n g ,p l a t f o r mi n d e p e n d e n c e k e yw o r d s :c sm o d e ,j 2 s e ,j a v an i o ,d i s t a n c ee d u c a t i o n , n e t w o r k c o m m u n i c a t i o n 独创性声明 本人声明所呈交的学位论文是本人在导师指导下进行的研究工作和取得的 研究成果,除了文中特别加以标注和致谢之处外,论文中不包含其他人已经发表 或撰写过的研究成果,也不包含为获得苤鲞盘堂或其他教育机构的学位或证 书而使用过的材料。与我一同工作的同志对本研究所做的任何贡献均己在论文中 作了明确的说明并表示了谢意。 学位论文作者签名:褊相 签字日期:夕口罗 年歹月2 孑日 学位论文版权使用授权书 本学位论文作者完全了解叁鲞盘堂有关保留、使用学位论文的规定。 特授权墨盗盘堂可以将学位论文的全部或部分内容编入有关数据库进行检 索,并采用影印、缩印或扫描等复制手段保存、汇编以供查阅和借阅。同意学校 向国家有关部门或机构送交论文的复印件和磁盘。 ( 保密的学位论文在解密后适用本授权说明) 学位论文作者签名:每凝阳 签字日期:矽罗年莎月2 孑日 导师签名:金舂。园、j导师签名:7 芷吞讨、j 签字日期:矽护罗年5 - 月2 | 分日 第一章绪论 第一章绪论 伴随计算机技术的飞速发展,计算机编程语言在不断地更新。集成开发环境 ( i d e ) 作为一种软件开发工具也在不断智能化、专业化。在教育领域,过于依赖 智能化的集成开发环境,使初学者忽视了计算机语言的基础学习。同时,过于专 业化的集成开发环境也对初学者增加了学习负担。另外,目前单机模式的实验工 具没有充分利用网络技术,信息交流的功能没有整合到实验工具中。本文介绍的 基于c s 模式的j a v a 实验环境,就是在智能化和基础学习中找到了一个平衡点。 同时该平台还利用了计算机网络技术,实现了在线交流与编程监控功能,方便了 教师和学生在计算机语言实验中的互动,提高了教学效率和教学效果。 1 1 单机模式实验环境及其面临的问题 传统的j a v a 语言实验环境是采用两种方式进行单机模式的程序实验。一种是 使用专业的开发工具,另一种是使用简单的文本编辑器。教师和学生的交互也是 需要教师要亲自走到学生的计算机前进行指导,或是利用多媒体教学软件进行简 单的屏幕监控、切换来指导。 1 1 1 使用专业开发工具的问题 集成开发环境,简称i d e ( i n t e g r a t e dd e v e l o pe n v i r o n m e n t ) 是用于软件开发的 应用程序,一般要包括代码编辑器、编译器、调试器和图形用户界面工具。这就 是集成了代码编写功能、分析功能、编译功能、d e b u g 功能等一体化的开发软件 套件。 目前集成开发环境作为一个集成了编辑、编译、调试的桌面环境,在软件开 发领域已成主流,并不断地向智能化、专业化的方向发展,极大提高了软件开发 的效率。目前的新型集成开发环境还拥有可视化代码生成的能力,可自动生成标 准的界面和常用算法的代码,让开发者的精力不再是进行重复性较高的界面和算 法的开发,以减少重复性工作。 , 然而,集成开发环境面向的是软件开发者,或者说是计算机语言的使用者, 而不是计算机语言的学习者。让初学者使用过于专业的集成开发环境进行学习, 往往会使其感到不知所措。即使初学者初步掌握了部分i d e 功能,i d e 的某些智 第一章绪论 能化功能,如代码生成和自动编译,也会使初学者忽略了计算机语言的基础问题 和细节问题,影响学习的效果。 1 1 2 使用简单文本编辑器的问题 使用简单的文本编辑器进行j a v a 实验有其优点,也有其不足之处。 其优点在于,通过纯手工的编写代码,手工编译程序、运行程序,可以帮助 学生了解很多j a v a 语言的底层知识。因此,应该说在j a v a 语言的学习初期,使用 简单的文本编辑器进行j a v a 语言实验是一种必要的手段,可帮助学生发现很多被 智能的集成开发环境所掩盖的基础性问题。 随着学生对基础知识的理解加深,使用简单文本编辑器进行j a v a 实验的意义 逐渐减小,而缺点却不断暴露出来。文本编辑器不会对程序语法进行任何检查, 也不会对用户所输入的内容给予任何提示。初学者对j a v a 语言的编程并不熟练, 他们很容易犯一些代码拼写错误。这些代码拼写错误不同语法错误,对语言学习 的意义不算大。但是此类错误最易发生,也最消耗上机时间,使学生大量的时间 消耗在修改拼写错误上。同时,简单的文本编辑器没有编译功能,重复输入编译 程序的命令也消耗了许多的时间。同时,学生还要在编辑器、编译窗口中频繁切 换,这无形增加了学生犯错误的几率。 为克服以上缺点,这就需要有一种适用于教学领域的j a v a 语言实验环境, 它既能保留i d e 中适当的智能技术,提高学习效率;又不需要过于专业,可以让 初学者在短时间内就能掌握【2 】。 1 1 3 传统实验环境中通信系统的问题 在对多所高职院校的走访调研中,我了解到传统计算机语言教学上机实验环 境使用的通信系统,多是基于局域网的多媒体教学软件,如l a n s t a r ,x c l a s s 等【3 l 。 它实现的通信功能通用性较强,包括了屏幕广播、屏幕录制、屏幕回放、语音教 学、演示和文本通信等功能。这些功能对于计算机语言教学的上机指导确实有一 定的意义,但这些功能不够专业。例如:多媒体教学软件的广播和监控功能只是 进行简单的屏幕切换,学生能看到老师机器上显示的内容,老师也能看到学生机 器上显示的内容,但对于实现程序设计上机指导,还是不够专业。比如,老师想 在不打扰学生编程的情况下来查看某学生机器上的程序文件,而这个程序文件可 能不是学生当前正在编辑的文件,或者当前文件在屏幕上显示的不是老师要查看 的部分,这时,简单的切换屏幕就失去了作用。此时如果教师远程控制学生的机 器,则还会打扰学生正在进行的实验。 针对于以上传统多媒体教学软件遇到的问题,我通过在实验环境中集成一个 第一章绪论 内部的通信模块来替代传统的多媒体教学软件功能。利用这个网络通信模块,可 以把学生正在使用的所有的程序文件以树状结构显示在教师机器上,教师要查看 学生的程序文件,只需要双击文件名就可以看到该文件在学生实验环境中的最新 版本,实现了不打扰学生实验过程就可以查看学生实验程序的效果,便于教师在 没有学生提问时主动发现问题。对于教师发现的通用性问题,教师还可以利用教 师端实验环境的程序发布功能把有问题的程序发布给所有学生查看,或者利用群 发信息功能引起学生注意。另外,教学双方在发送信息时可以通过一种特殊的附 件模式发送自己的程序。只需要在发送面板中勾选需要发送的程序,就可以把程 序发送给对方,另一方在收到信息后只需要单击鼠标就可以在自己的实验环境中 下载并导入远程程序,方便了远程程序的调试和运行。 特别说明的是,本文介绍的实验环境由于占用带宽相对较小,并采用t c p i p 协议,因此只要教师机拥有一个互联网的i p 地址,就还可以实现基于互联网的远 程指导,这在空间上解放了上机指导的实施,使得远程上机指导成为可能【4 】。 所以本文开发的实验环境,从根本上解决了多媒体教学软件与实验工具结合 不够紧密的问题,实现了一种更适合程序设计上机指导、更有针对性的通信功能, 提高了上机指导的效率,扩大了上机指导的空间。 1 2 论文研究意义 集成开发环境技术应用于教学领域而诞生的计算机语言实验平台,是计算机 辅助教育研究的一个新领域。和软件开发领域一样,程序设计的教育领域也需要 有一个专业的工具作为辅助,只不过二者专业性的侧重点有所不同,一个是侧重 便于开发,一个是侧重便于学习。因此可以参照目前发展比较成熟的i d e 技术, 加以适当改造,引入到程序设计的教育领域,开发这样的一个辅助工具。 本文介绍的基于c s 模式的j a v a 实验环境就是这样一个作品,它采用j a v a 语 言开发,不仅保留了传统i d e 的许多功能,比如关键字高亮显示、代码提示、动 态纠错等功能,还增加了适用于教学的功能,比如利用网络技术实现的教师监控、 在线答疑等,方便了教师和学生的互相沟通,提高了教学效率,保证了教学效果。 1 3 本文研究内容 本文从考察多所高职院校目前j a v a 语言教学上机环境的现状出发,分析目前 高职院校j a v a 语言上机教学中存在的问题。获得了建立基于c s 模式j a v a 实验环境 第一章绪论 的需求和意义。在此基础之上,本文对建立基于c s 模式j a v a 实验环境的需求进 行分析,并按照需求分析讨论了系统的总体设计。为了清楚地说明开发中相关技 术问题的解决方法,引入了相关核心技术的介绍,如j f l e x 、j a v ac o m p i l e r a p i 、 j a v a n i o 通信模式和j f cs w i n g 等。论文从核心技术的特点入手,充分分析了这 些技术在实验环境开发中的优势与必要性。 在实验环境的具体实现部分,论文按照单机功能与网络功能对系统功能进行 划分,对各功能的底层技术重点讨论。实验环境的单机功能包括代码编辑、 j a v a d o c 速查和编译运行等,论文详细讲述了每个功能的实现方法,并分析了底 层功能依赖组件的设计。在代码编辑器的实现部分,详细论述了代码编辑器的三 大功能:关键字高亮显示、代码提示和错误提示及其依赖组件的实现。j a v a d o c 速查功能的介绍则侧重于论述j a v a d o c 生成的h t m l 文档的解析策略。在编译运行 功能部分,本文重点论述利用j a v ac o m p i l e ra p i 构造及时编译器的原理以及编译 提示的高层输出过程。在网络功能部分,本文首先分析了j a v an i o 通信技术的优 势,进而讨论了利用j a v an i o 通信技术构建基于单线程的多任务通信协议的实 现。最后,论文举例说明了使用自定义协议层开发实验环境的开发方法和运行机 制。 在论文的最后,讨论了实验环境实际应用的效果与展望,分析了基于c s 模 式的j a v a 实验环境的创新点。 1 4 本文的组织结构 本文总共分为五章,首先是简要介绍了论文的背景情况,引出了本文所作的 主要工作内容,分析了目前在j a v a 语言上机教学方面上存在的问题。然后进行了 新实验环境的需求分析和相关技术分析。之后,本文详细介绍了实验环境的具体 实现,把该实验环境分为智能化编辑器、j a v a d o c 速查器、j a v a 程序编译运行控 制与网络答疑与监控等几个重要模块。其中智能化编辑器的实现需要很多底层功 能的支持,为此占用的篇幅相对较多。各个模块的介绍重在讲述底层的实现原理, 而界面设计部分则不是本文的重点,不多赘述。论文最后分析了系统应片j 情况与 系统的创新点。论文内容具体安排如下: 第一章介绍了论文的背景情况,分析了当前上机实验中存在的问题,并引 入了论文的研究内容。 第二章进行了新实验环境的需求分析,详细介绍了相关技术的特点及其应 用的必要性,对实验环境进行了总体架构设计。 第三章为论文的重点章节,分模块详细介绍了实验环境中主要功能模块的 第一章绪论 实现细节以及相关技术支撑。 第四章讨论了论文实际应用的效果和未来应用的展望,分析了实验环境的 扩展功能。 第五章总结了实验环境的优势,最后分析了实验环境的创新点。 第二章关键技术与系统设计 第二章关键技术与系统设计 2 1 系统需求分析 基于c s 模式的j a v a 实验环境,首先是学生进行上机编程时使用的一个工具, 因此,系统首先要满足j a v a 编程的基本功能,要实现以下几个功能模块:编辑器 模块、程序编译模块、程序运行模块以及程序编译错误提示模块。考虑到学生是 计算机语言的初学者,而关键字的高亮显示功能和代码提示功能则可以大大减少 程序中由于拼写错误造成的编程问题,提高上机学习效率,因此,这两个功能也 是必不可少的。此外,在某种计算机语言的学习过程中,充分利用该语言类库的 说明文档,对该语言的掌握有事半功倍的效果,这不仅可以减轻教师的负担,还 更让学生少走弯路,提高教学效果。因此,基于c s 模式的j a v a 实验环境还集成 了j a v a d o c 速查功能,学生可以在代码提示窗口中方便快捷地找到某个方法、属 性的说明文档,节省了宝贵的上机时间。 不仅如此,实验环境还应该利用网络资源,以某种形式集成数据通信功能, 形成与实验环境相结合、更有针对性的即时通信功能,便于教师与学生的信息交 流。而实验环境中的编程监控、在线答疑的功能就解决了这个问题。 2 2 系统总体设计 基于以上的分析,本文介绍的基于c s 模式的j a v a 实验环境包含两种类型的 功能,非网络通信功能和网络通信功能。非网络通信功能可在单机状态下运行, 其包括智能编辑器模块( 包含关键字高亮显示模块、代码提示模块、错误提示模 块) 、j a v a d o c 速查模块、程序编译与运行模块等。网络通信模块基于c s 模式【5 】, 可在上机环境中存在网络( 局域网络或者广域网络) 的情况下应用,包括教师监 控模块和在线答疑模块。 详细系统功能架构如图2 1 所示。 第二章关键技术与系统设计 图2 1 基于c s 模式的j a v a 实验环境功能架构图 2 3 系统实现及其相关技术 基于c s 模式的j a v a 实验环境采用纯j a v a 语言编写,总体基于s u n 微系统公司 j a v as t a n d a r de d i t i o n6 0 技术构型6 1 。j a v a s e 包含构成j a v a 语言核心的类,如数据 库连接、接口定义、输入输出、网络编程等。相对于其它变成语言,j a v a 语言具 备许多优点。更加彻底地面向对象特性,使得软件开发以更符合工业标准的组件 化开发;内置的多线程支持,使线程管理问题大大简化:平台无关性有效地解决 了同一系统在不同平台的部署问题:内存回收机制不仅让程序员摆脱了头疼的内 存管理问题,同时也增加了程序的健壮性1 7j 。在j a v as e 6 0 中新增加了j a v a c o m p i l e ra p i 5 】的支持,这是实现本实验环境中程序编译运行、动态纠错功能的 核心技术。 实验环境的界面部分,使用s u n 公司的标准s w i n g 轻量级组件实现【z l ,其具 第二章关键技术与系统设计 备跨平台的特点。s w i n g 是s u n 微系统公司开发的基于j a v a 的小型g u i 框架。 s w i l l g 采用j a v a 开剑引,为j a v a 语言提供跨平台的g u l 支持。不仅如此,s w i n g 还 采用了一种m v c 的设计范式,即”模型视图控制”( m o d e l v i e w c o n t r o l l e r ) 【9 】, 其中模型用来保存内容,视图用来显示内容【1 0 】,控制器用来控制用户输入【1 1 】。 这样就可以在最大程度上实现界面与用户逻辑及底层数据的分离,增加了系统的 灵活性和扩展性。 实验环境的编译与运行功能,是基于s u n 微系统公司的j a v ac o m p i l e ra p i 1 2 】 的j a v a 编译器编程接口,保证错误提示文本与学生直接使用j a v a c 。e x e 得到的错误 提示文本一致。j a v ac o m p i l e ra p i 是在j a v as e6 0 中加入的新特性,在此之前, j a v ac o m p i l e ra p i 主要功能被封装在一个非标准的j a v a 包( c o r n s u n t o o l s j a v a c ) 中, 并没有公布给用户使用,也没有相关说明文档提供支持。而在j a v as e6 0 和在 j s r 1 9 9 中【1 3 】,j a v a 编译器接口被重新定义,不仅提供了完善的说明文档,而且 a p i 内部大量应用接口,成为不仅可以让用户使用,更可以让用户继承并改造的 类库资源。本文所介绍的实验环境的程序编译功能和错误提示中的即时编译器即 改造调用j a v ac o m p i l e ra p i 来实现。 实验环境的代码提示功能,所依靠的类信息库构件采用t e c l i p s e t l 4 】【1 5 】中的 类库包和巧l e x 1 6 1 生成的j a v a 词法分析器。e c l i p s e 是i b m 公司编写的j a v a 集成开 发环境,采用j a v a 语言编写。e c l i p s e 是开源项目,其包含的组件可以自由地被用 户使用和改造。实验环境所使用的代码提示功能,依靠类信息库中的类信息进行 提示,而类信息来源于两个方面:已有类库中的类信息和用户自定义类中的类信 息。其中已有类库的类信息来自类库中已编译好的c l a s s 文件,e c l i p s e 项目中提供 的c l a s s r e a d e r 类可以实现这个功能,来提取c l a s s 文件中的类信息。获得用户自 定义类库的类信息需要解析用户正在编辑的程序文档,实验环境以j f l e x 生成的 j a v a 词法分析器为基础,进行用户文档解析。j f l e x 为新南威尔士大学g e r w i nk l e i n 博士等人提供的开源项目,主要生成各种语言的词法分析器【1 7 1 ,生成的词法分析 器基于j a v a 代码1 8 】【19 】【2 0 1 ,可以直接使用j a v a 语言进行改造,进行二次开发。详细 内容将在用户文档解析部分加以介绍。 实验环境中的教师机同时也是实验环境中的服务器,在实际教学中,机房的 教师机往往并不是专业的服务器,多为一台性能稍强的台式计算机。为解决一台 教师机与多台学生机通信时产生的性能问题,实验环境的网络通信功能,在设计 中使用了基于j a v an i o 2 1 1 网络通信技术构建的c s 通信模式【2 2 】。另外,在j d k1 4 标准中,s u n 公司引入了基于非阻塞通信模式的n i o 技术 4 1 ,使得单线程管理多 个传输层连接成为可能【2 3 1 。因此在实验环境中利用此机制,用单线程编写了多连 接、自动负载均衡的自定义对话层、表示层及应用层【2 4 】,节省了线程调度所占用 筇一章关键技术与系统设计 的服务器资源提高了运行效率,使酱通台式机也具备了处理多达上百台学生机 连接请求的能力 实验环境使用的相关技术较多,翻21 更好地说明相关技术与功能模块的支 持关系。 基于c s 模式的j a v a 实验环境 j f cs w i n g 封装丌 、界而 卜示叫絮枷j 鬻 代码髋拄鞘i * 提示 亦线等艇功能 | 娄信息库( l j b c o n m i r , c r ) i 自定义通信 口时蝙译 j f c 词法分析籀 铱议 罄 s w i n g c l l p s c l c l a ,_ r c a d c i j a v a j a v a n i o c o m p i l e r ap f j a v as t a n d a 州e d i t i o nr u m i m c r - - 1j a v as t a n d z r dk d i n o n6 i la 抖7 - q # 。0 卅件 口艇诬# : 图22 摹y - c s 模式的j a v a 实验环境技术架构图 第二章主要功能模块实现 第三章主要功能模块实现 3 1 代码编辑器实现 编辑器本身并不是一个很难实现的模块,一个w i n d o w s 的n o t e p a d 就可以算 的上一个功能相对较全的编辑器,但要实现一个适用于i d e 中的智能化编辑器则 就不是那么简单了。一个适用于某种计算机语言的智能编辑器至少需要包括以下 几个功能:关键字高亮显示,错误高亮提示,以及代码提示,下面就逐一介绍这 些功能的实现方法。 3 1 1 高亮显示关键字 关键字高亮显示是i d e 编辑器所应该具备的一项最基本功能,它是指编辑器 在编辑某种计算机语言时,该计算机语言的关键字、运算符和各种常量或变量应 该在编辑器中以不同的颜色、字体显示出来,方便阅读者辨认,增加代码的可读 性,同时,最好还要具备一定的可升级性,以方便该编辑器编辑其他语言。实现 关键字高亮显示的核心技术是面向对象的词法分析技术,将词法分析的结果配合 j a v aj f c q b j t e x t p a n e 所支持的s t y l e d d o c u m e n t 类,就可以进一步通过面向对象的 方式在j t e x t p a n e 中实现关键字高亮显示功能。其工作流程如图3 1 所示。 第三章主要功能模块实现 j t e x t p a n e 文档发生变化 事件激发( d o c u , r ld o c u m e n t l i s t e n e r j r s c a n ( i n t ,i n t ) i调用词法分析器s c a n n e r 1 【t o k e n l - s t r e p l a c i 更新t 。k e n l s t 上 事件激发( t 。k l l 发t o k e n i z e 山s t e n e r j r c o l 。r a i l ( l i s t ? l 调用s e t c h a r a c t e r a t t r i b u t e s i 刷新用户界面 k e n s ) 图3 1 关键字高亮显示工作流程 1 实现面向对象的词法分析器 词法分析一般应用在编译器领域,其目的就是把程序中的字符串以白空格 ( w h i t es p a c e ) 或者其他分隔符,按照某种语法规则一个个拆分成单独的“词”。 而面向对象的词法分析则是指把以上词法分析的结果( “词”) 抽象成一种对象, 使其具备特定的属性和方法。在本实验环境中,“词”被抽象为t o k e n ,其结构 如图3 2 和图3 3 : ob a s i c t o k e n ae n 吐秘口s t m c i 妇垃s 呐岣 矿8 稍;l c t 嚏e 叫抽e n 口r 埒轴i f l 协对s t n n g ) e 簟崩i 霉f n 谯h 静a 嘲,翻耘鞠 o9 萌a 纠斯e 嘲删t e 蛾【扪m 嘲柏窖i hh g 增嗨 讲哦k g 帕”o 矗0 t d9 瞳e n 州 t t 钟l “ 昏辨艟n d p o 碱旧啊,p o 螂 舭a 例l , n og e f f e x t ( ) 黛r 啦 参h s h 埘爿) r t o s t 坩嗫j 黛饼哼 图3 2b a s i c t o k e n 的结构 第三章主要功能模块实现 图3 3t o k e n 的结构 b a s i c t o k e n 定义了“词”所需要的基本属性和方法。 其中,对于j a v a t o k e n t y p e 的简要说明: t o k e n t y p e 为 个自定义接口,该接口只有一个方法:a t t r i b u t e s e t g e t a t t r i b u t e s e t ( ) ,其用来返回该类型所定义的风格的集合。将其定义成一个接口 是为了使其可以用来表示其他语言的词类型。j a v a t o k e n t y p e 将该接口描述为 j a v a 语言的词类型的枚举类。当然这也可以实现如h t m l t o k e n t y p e 来描述h t m l 语言的词类型,使该编辑器可以对h t m l 语言程序中的关键字进行高亮处理。 程序中词法分析的核心算法是由f l e x 生成的词法分析器提供的,利用此分 析器的分析结果,进行适当的改造,用来生成我们自定义的t o k e n 对象。 f l e x 是一种词法分析器的生成器,能够生成符合特定语法规则的词法分析 器,将其进一步生成为j a v a 代码,并且还全面支持u n i c o d e 【25 | 。 f l e x 生成的词法生成器进行分析的结果是一爪j a v ac u p r u n t i m e s y m b o l 对 象,由于该对象不具备t o k e n t y p e 属性,因而不能直接使用,但可以在其生成的 部分进行改造,使得能直接生成t o k e n 对象,用以取代原来的s y m b o l 对象。在此, 我用部分改造内容为例,介绍一下改造方法。 第三章主要功能模块实现 s w i t c h ( z z c c i o n 07z z a c 乞i o n :z z _ a c t i o n z z a c t i o n ) c a s e2 5 : r e t u r nl 七o k e nfj a v a t o k e n t y p e t i - l d e ) ;l iii 一 c a s e6 7 :b r e a k ; c a s e2 哇: r e t u r ni t o k e nc j a v a t o k e n t y p e e x c l a m a t i o m ) ;l o a 暑e6 8 :b r e a k ; o a s e1 2 : i i i i l ( 1;l_return t o k e nj a v a t o k e n t y p ep e r i o d 一 c a s e6 9 :b r e a m ; c a s e7 :,_ tr e t u r nl e r r o r t o k e nf ”字符标记浸有闭和”) ;l i ii 图3 4 对于j f l e x 生成的词法分析器进行修改 如图3 4 所示,方框内的部分即为生成各种t o k e n 的方法,图中的改造分别生 成了“”、“! ”、“”三个运算符的t o k e n 和_ 一个错误信息为“字符标记没 有闭合”的错误t o k e n 。传递的参数正是在j a v a t o k e n t y p e 中定义好的类型,其中 还包含了词法高亮显示所需的显示风格集合- a t t r i b u t e s e t 。 实际上,具体修改的位置有很多,这里就不进行详细叙述,而最终的修改结 果就是让j f l e x 生成的词法分析器的分析结果以t o k e n 对象的格式输出。这样,词 法分析的结果就直接包含了编辑器中的高亮显示功能所需要的全部信息。 2 通过词法分析结果实现关键字高亮显示 利用修改后的词法分析器就可以对文档进行词法分析。当载入文档时,其首 先对整篇文档进行词法分析,分析结果为一组t o k e n 对象,并存储于t o k e n l i s t 中。 t o k e n l i s t 是某个文档所包含的所有t o k e n 的容器,其结构如图3 5 。 第二章主要功能模块实现 多t o k e n l i s t 铲c o m p a r e b e g i n o f f s e t s :b a s i c t o k e n 哲c o m p a r e e n d o f f s e t s :b a s i c t o k e n av i e w :l i s t c l e a r ( ) c o n t a i n s ( i na r g o :o b j e c t ) :b o o l e a n g 融( i na r g o :“t ) g e t l n d e x c o n t a i n i n g ( i no f f s e t :i n t ) :i n t g e t i n d e x c o n t a i n i n g ( i np o s :p o s n i o n ) :i n t g e t l n d e x e n d i n g b e f o r e ( i np o s :p o s n i o n ) :i n t g e t l n d e x e n d i n g b e f o r e ( i no f f s e t :i n t ) :i n t g e t l n d e x s t a r t i n g a f t e r ( i np o s :p o s t i o n ) :i n t g e t l n d e x s t a r t i n g a f t e r ( i no f f s e t :i n t ) :i n t i n d e x o f ( i na r g o :o b j e d ) :i n t j s e m p t y o :b o o l e a n i t e r a t o r o :i t e r e t o r b s 【i n d e x o f ( i na r g o :o b j e c t ) :i n t i i s t l t e r a t o r ( ) :l i s t l t e r a t o r f i s t l t e r a t o r ( i na r g o :i n t ) :l i s t l t e r a t o r r e m o v e ( i na r g o :o b j e c i ) :b o o l e a n r e m o v e ( i na r g o :i n t ) 尊s i z e ( ) :i n t 孽s u b l i s t ( i na r g o :i n i i na r g l :i m ) :l i s t ot o a r r a y o :o b j e c t 】 图3 5t o k e n l i s t 类结构 程序对文档进行词法分析,首先初始化一个t o k e n l i s t 对象,之后把这个容器 包含到要分析文档的引用里,并在此文档载入的时候,对全文进行词法分析。进 一步把分析结果放入t o k e n l i s t 中,再通过t o k e n q b t o k e n t y p e 所包含的显示风格, 将结果显示在j t e x t p a n e 中。当文档中有位置发生变化时,需要使用j a v a 标准类库 中的d o c u m e n t l i s t e n e r 接口来捕捉发生的变化,并使词法分析器在相应的地方进 行词法分析,然后更新t o k e n l i s t ,最终通矢n j t e x t p a n e 更新显示风格。 本文中的实现方法仅在文档发生字符增加或者删除后做出响应,而对于文档 显示风格的变化,由于不是用户控制的,所以没有设计做出响应【2 6 】。其中,e v e n t 对象包含了文档变动的事件应包含的全部信息,比如改变的位置,改变的长度等, 可以利用这些参数来通知词法分析器在相应的部位进行新的词法分析。b a c k u p 是一个f i n a li n t 类型,可以将其视为一个常量,通过它让词法分析器向前方多分 第三章丰要功能模块实现 析适当数量的字符,这样可以避免某些分析错误。例如对于“”标记,在j a v a 代码中不同于“”标记,如果不向前多分析几个字符的话,当用户在“”之后 又输入了一个“”。那么只从当前的“”进行分析,就会分析成两个“”标记的 结果。其中,b a c k u p 的值代表向前分析字符数量,分析量大了之后出错率会大 大降低,但分析的效率会有所下降。 上面的代码中有一个关键方法一v o i ds c a n ( i n ts t a r t ,i n ts t o p ) ,它的作用是从文 档的s t a r t 参数所指定的位置开始,至u s t o p 参数所指定的位置结束,对其中部分进 行词法分析,并将分析结果更新到对应的t o k e n l i s t 对象中,然后把更新结果以事 件的方式通知侦听器。 虽然可以在每一次文档发生改变后对整篇文档重新进行词法分析,重新生成 整个t o k e n l i s t ,但这样的方法效率低下,比较好的解决方法应该是只分析发生改 变的位置,并更新原t o k e n l i s t 中发生变化的t o k e n 部分,这样就避免了每次改变 都要全部更新。 首先把分析成员备份到临时变量中,防止其他的线程在进行词法分析的时候 对其产生影响,然后将词法分析器定位到准备进行分析的位置,这个位置必须是 s t a r t 处的t o k e n 的开始部位,如果o l d s t a r t 值不大于0 ,则表示需要从开始处进行词 法分析。定位好后就可以开始循环,进行词法分析,循环进行到所指示的位置, 或者文档结尾处结束。把新生成的t o k e n 存储在a d d c d 歹o 表中。 还要计算更新后的t o k e n 的起始与结束的编号,这两个位置的t o k e n 也要更 新,防止起始和结束位置出现重复的t o k e n 。 最后,还要实现一个同步侦听器,使得j t e x t p a n e 可以对不同t o k e n 用不同的 风格显示。方法是先把所有o l d t o k e n 中全部的字符显示风格取消,即通过 s t y l e d d o c u m e n t 的s e t c h a r a c t e r a t t r i b u t e ( i n t ,i n t ,a t t r i b u t e s e t ,b o o l e a n ) 方法把全部的 字符显示风格属性设置为一个预先设定好的n u l l a t t r i b u t e s ,然后通过 c o l o r a l l ( l i s t t o k e n s ) 方法把新的t o k e n 中的字符设置为相应的 显示风格。因此是通过使用g e t a t t r i b u t e s e t 0 方法把预先设置好的各种显示属性提 取出来,并通过s e t c h a r a c t e r a t t r i b u t e ( i n t ,i n t , a t t r i b u t e s e t ,b o o l e a n ) 方法把显示风格 属性设置到相应的字符上。 通过以上构建一组类的方法,以对象的形式实现了关键字高亮显示功能,同 时该系统还具有一定的灵活性和可升级性。例如,如果希望为用户配置不同的显 示风格,就可以通过在磁盘中保存为用户单独配置的参数,使得程序在启动时能

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论