(计算机科学与技术专业论文)基于java平台的通用脚本引擎的研究与实现.pdf_第1页
(计算机科学与技术专业论文)基于java平台的通用脚本引擎的研究与实现.pdf_第2页
(计算机科学与技术专业论文)基于java平台的通用脚本引擎的研究与实现.pdf_第3页
(计算机科学与技术专业论文)基于java平台的通用脚本引擎的研究与实现.pdf_第4页
(计算机科学与技术专业论文)基于java平台的通用脚本引擎的研究与实现.pdf_第5页
已阅读5页,还剩60页未读 继续免费阅读

(计算机科学与技术专业论文)基于java平台的通用脚本引擎的研究与实现.pdf.pdf 免费下载

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

文档简介

基于j a v a 平台的通用脚本引擎的研究与实现 摘要 随着计算机技术的不断发展,软件开发人员已经可以使用各种高级 语言( 如c 卜+ 和j a v a ) 来开发各种功能复杂的应用程序,但仍不能完全 满足使用者的需求。脚本语言与高级语言具有很大的互补性,高级程序 设计语言可以构造出各种具有特定功能的构件,而脚本语言可以在各种 已经存在的构件之间建立连接,能够让使用者灵活的组合这些已经存在 的构件来完成更复杂的可定制的功能,实现快速的应用开发。脚本引擎 是脚本运行的平台和容器,是脚本运行的核心。通过构造通用脚本引擎 来快速将脚本功能扩充到应用软件中,可以给软件使用者提供另一种使 用软件的途径和对软件进行二次开发的手段,对于软件的发展具有重要 的意义。 本文分六个部分。第一部分介绍了课题背景以及脚本引擎的国内、外 应用现状。第二部分研究了脚本引擎中的关键技术,主要研究了脚本语 言及其引擎的特点,通用脚本引擎所要实现的脚本语言,脚本引擎中的 编译技术。第三部分研究了通用脚本引擎的结构设计。第四部分给出了 脚本引擎的实现,详细论述了脚本引擎中基于j a v a 的脚本操作类的实现、 脚本引擎中脚本编译的实现以及中间代码的生成并给出了一个脚本引擎 自动化测试解决方案。第五部分通过一个具体实例论述了通用脚本引擎 与j a v a 应用程序的集成。第六部分总结了课题研究过程中的主要工作并 对未来工作进行了展望。 本文通过研究现有脚本引擎和主要技术的特点,研究通用脚本引擎 的机制和运行模式,设计和实现了一个通用的脚本引擎,并成功的应用 于一个基于j a v a 的应用原型中和一个已经投入商业应用的大型信息管理 系统中。通用脚本引擎的应用,使得任意基于j a v a 的应用系统都可以与 一个脚本引擎快速集成,扩展应用功能,提高了软件的可用性和可开发 性。 关键词:脚本引擎,脚本,j a v a ,编译器,解释器 r e s e a r c ha n di m p l e m e n t a t i o no fg e n e ra i s c r i p te n g i n eb a s e do nj a v ap l a t f o r m a l o n g w i t ht h ed e v e l o p m e n to f c o m p u t e rt e c h n o l o g y , h i g hl e v e ll a n g u a g e sc 觚b e u s e dt od e v e l o pv e r yc o m p l e xa p p l i c a t i o nb u tw h i c hi ss t i l lh a r dt om e e tt h ed e m a n do f s o f l e w a r ed e v e l o p e r s h i g hl e v e ll a n g u a g eo a nc o n s t r u c tv a r i o u sc o m p o n e n t sw i t hd i f f e r e n t f u n c t i o n sa n ds c r i p t i n gl a n g u a g ec 姐e s t a b l i s hl i n k sb e t w e e nc o m p o n e n t sw h i c ha l r e a d y e x i s ta n db u i l dm o r ec o m p l e x e da n da g i l ea p p l i c a t i o n s s c r i p te n g i n ei st h ep l a t f o r m 、 c o n t a i n e ro f s c r i p ti m p l e m e n t a t i o n b yb u i l d i n gg e n e r a ls c r i p te n g i n e st oe x p a n dt h e f u n c t i o n so f a p p l i c a t i o ns o f l w a r e s s u p p l yt h eu s e 猖a n o t h e rw a yt ou s ea n ds e c o n d a r i l y d e v e l o ps o f i w a r e si ss i g n i f i c a n tf o rt h ed e v e l o p m e n to f s o f t w a r e t h i st h e s i sc o n s i s t so f s i xp a r t s t h ef i r s tp a r ti n t r o d u c e st h eb a c k g r o u n do f t h i st h e s i s a n da p p l i c a t i o na n dr e s e a r c hs t a t u so f s c r i p te n g i n ei nc h i n aa n do t h e rc o u n t r i e s t h e s e c o n dp a r ti n v e s t i g a t e st h ek e yt e c h n o l o g yo f s e r i p te n g i n e ,m a i n l yf o c u s e so ns c r i p t l a n g u a g e 、s c r i p te n g i n ea n dc o m p i l et e c h n o l o g y t h et h i r dp a r td i s c u s s e st h ea r c h i t e c t u r e d e s i g no f g e n e r a ls c r i p te n g i n e t h ef o r t hp a r te x p l i c a t e st h er e a l i z a t i o no f j a v ab a s e d g e n e r a ls c r i p te n g i n e , t h ei m p l e m e n t a t i o no f s c r p to p e r a t i o nc l a s sa n dc o m p i l e ri ns c r i p t e n g i n e , a l s oi l l u m i n a t e st h eg e n e r a t ep r o c e s so f i n t e r m e d i a t ec o d e t h ef i f t hp a r ts p e c i f i e sa s c r i p te n g i n ea u t o m a t i o nt e s tf i - m n e w o r ks o l u t i o n t h es i x t hp a r tg i v e sa ne x a m p l eo f i n t e g r a t i o no f aj a v ab a s e da p p l i c a t i o na n daj a v ab a s e dg e n e r a ls c r i p te n g i n e 1 1 l el a s tp a r t s u m m a r i z e st h em a i nw o r ki nt h er e s e a r c ha n di m p l e m e n t a t i o no f j a v ab a s e ds c r i p te n g i n e a sw e l l 嬲d e s i g n s r o a d m a p so f r e l a t e dr e s e a r c hi nt h ef u t u r e t h i st h i e s er e s e a r c h e st h em e c h a n i c a la n do p e r a t i o nm o d e so f g e n e r a ls c r i p te n g i n e , d e s i g na n di m p l e m e n tag e n e r a ls c r i p te n g i n ea n di n t e g r a t et h eg e n e r a ls c r i p te n g i n ei na j a v ab a s e dp r o t o t y p i n ga sw e l la sal a r g ei m f o m a t i o nm a n a g e m e n ta p p l i c a t i o ns y s t e m g e n e r a ls c r i p te n g i n ei se a s i l yi n t e g r a t e s 、i ma n yj a v a - b a s e da p p l i c a t i o ns y s t e mt or a p i d l y e x p a n dt h ef u n c t i o n sa n di m p r o v et h ea v a i l a b i l i t yo f t h es o f t w a r ea p p l i c a t i o n s k e y w o r d s :s c r i p te n g i n e ,s c r i p t ,j a v a ,c o m p i l e r , i n t e r p r e t e r 独创性声明 本人声明所呈交的论文是本人在导师指导下进行的研究工作及取得的研究成果。 尽我所知,除了文中特别加以标注和致谢中所罗列的内容以外,论文中不包含其他人 已经发表或撰写过的研究成果,也不包含为获得北京邮电大学或其他教育机构的学位 或证书而使用过的材料。与我一同工作的同志对本研究所做的任何贡献均已在论文中 作了明确的说明并表示了谢意。 申请学位论文与资料若有不实之处,本人承担一切相关责任。 本人签名:凶! 旦 日期: 扣7 3 甥 关于论文使用授权的说明 学位论文作者完全了解北京邮电大学有关保留和使用学位论文的规定,e p :研究 生在校攻读学位期间论文工作的知识产权单位属北京邮电大学。学校有权保留并向国 家有关部门或机构送交论文的复印件和磁盘,允许学位论文被查阅和借阅;学校可以 公布学位论文的全部或部分内容,可以允许采用影印、缩印或其它复制手段保存、汇 编学位论文。( 保密的学位论文在解密后遵守此规定) 保密论文注释:本学位论文属于保密在一年解密后适用本授权书。非保密论文注 释: 兰翌:主:鲨 2 坦z :主! 鲨 1 1 课题研究背景 第一章绪论 随着计算机技术的不断发展,计算机编程语言、编程技术和方法都发生了很 大的变化。在这个过程中,人们已经不能满足于使用各种高级程序设计语言来设 计实现各种功能复杂,具有个性的应用程序。如何将高级程序设计语言开发的各 种具有单一功能的构件模块进行复用重组,从而构建更为灵活的功能,使用户能 够灵活的使用应用程序,这个问题已经摆在每一个人面前。随着i n t e r n e t 和网络 技术的发展,如何在大型分布式的环境下对各种功能构件进行复用,更是目前研 究的重点。 随着相关领域研究的不断深入,脚本语言开始被广泛的使用。人们编写程序 的方法开始发生了变化,人们正在从高级语言的开发转向脚本语言的开发。高级 语言的发展使得构建功能强大的组件变得十分容易,而脚本语言可以将这些已经 存在的功能构件进行组合,实现更为灵活复杂的应用。 由此可见,脚本语言与高级程序设计语言不同,适用于不同的领域和任务。 高级程序设计语言是从最基本的元素如内存字开始构造数据结构和算法,实现各 种功能,而脚本语言是以构建粘贴的方式进行设计【”,组合已经由高级程序设计 语言实现的功能,从而实现快速应用开发。 g u i 的发展可以组合应用程序中的一些相关的功能,并以精美的外观呈现给 用户使用,但是仍然不能解决功能灵活扩展的要求,用户使用应用程序提供的 g u i 的同时仍然有必要使用一种相对简单的方式来自行组合应用程序的功能,通 过二次开发,组合已有功能构造出更为复杂的功能。脚本语言的简单易用的特点 可以满足应用程序使用者的需求。 脚本语言的优势已经得到了各方的认同,摆在人们面前的问题就是:如何在 由高级程序设计语言设计开发的各种构件和应用之上部署脚本引擎来实现更灵 活的功能。 脚本引擎是脚本运行的平台和容器,是脚本运行的核心。通过构造通用脚本 引擎来快速将脚本功能扩充到应用软件中,给软件使用者提供另一种使用软件的 途径和对软件进行二次开发的手段,对于软件的发展具有重要的意义。 1 2 国内外发展现状 脚本语言是一种解释执行语言,在计算机软件领域已经被广泛的使用。如 j a v a s c r i p t 2 【3 】 4 1 在w e b 中被广泛使用,主要用于一般性计算以及在下拉菜单与 北京邮电人学硕士学位论文 页面中实现可视化效果。在j a v a s c r i p t 出现之前,也有许多脚本语言被用于某些 专用领域,如d o s 批处理文件和w i n d o w ss c r i p t 5 1 。在人们灵活使用它们的背后, 它们各自都有相应的脚本引擎支持着脚本的执行。在美国等软件科学与技术发达 的国家,脚本引擎已经被用广泛使用,脚本和脚本引擎的使用给用户和开发者带 来了极大的便利。许多国外大型软件都提供了相应的脚本机制供高级用户使用。 如i b m 公司的w e b s p h e r e 应用服务器【6 l 就提供给使用者丰富的脚本,用于管理 应用服务器的运行,甚至某些功能只能通过脚本来实现,通过g u i 是无法做到 的。另一种被广泛使用脚本语言是微软公司的v i s u a lb a s i cf o r a p p l i c a t i o n s ( v b a ) - f l ,v b a 是v i s u a lb a s i c 的一个子集,用于微软o f f i c e 应用的自动化。 可以看到在商业领域,脚本在被广泛的使用,用于完成许多高级的功能。在商业 领域,特定的应用软件集成了特定的脚本引擎,这些脚本引擎是没有通用性的。 在开源领域,各种脚本及其脚本引擎也是层出不穷。近几年先后有多种脚本 语言诞生,如r u b y 引、p y t h o n l 9 ,j y t h o n t l 0 1 。许多脚本语言使用灵活、简单,它 们大多由高级程序设计语言实现,如j a v a 和c ,几乎可以完成j a v a 、c + + 的高级 程序设计语言的全部功能。他们的脚本引擎可以很好的支持使用脚本语言完成复 杂功能,但是在实际与各种应用集成过程中仍然会遇到一些问题,如控制用户对 应用中功能构件的使用,有些功能需要提供给用户使用,有些不能暴露给用户。 表1 - 1 列出了一些同时用c 语言和j a v a 语言实现的脚本语言。其中一些语 言已经具有在c 语言实现的脚本引擎中对j v m 中的对象进行访问的能力。从本 质上说,j a v a 语言本身也可以算是一种脚本语言【l “。 表1 - 1 同时用c 语言和j a v a 语言实现的脚本语言 语言c 实现j a v a 可访问 j a v a 实现 e c m a s c r i p t i l 2 】 j se n g i n e 1 埘r h h m 【1 4 】 p y t h o n ( 9 1p y t h o nj y t h o n 1 o 】 t c v r k t i 目t c l ,i kj a c l 1 6 】 p e d 【1 7 1 【1 8 1p e r i无 j a v at b e j d kb o a n s h e l l 1 9 l 在国内,脚本引擎很少有人进行研究,偶有涉及到脚本的使用也大多依赖于 国外的一些脚本引擎,国内的产品更是很少会用到脚本和脚本引擎,也就无法给 用户提供完善的功能和使用体验。 如何设计脚本引擎、如何使脚本引擎通用化并可以在各个应用系统间移植, 如何在软件应用中快速部署脚本引擎是我们研究和本文所要论述的内容。基于研 究的考虑,我们采用j a v a 作为实现语言,借用一些成熟的脚本语言j a v a , s c r i p t 的语法来定义脚本,并自己实现全部脚本引擎并与应用集成。 2 1 3 面向应用的通用脚本引擎研究的重要性和必要性 如前面所述,脚本语言与高级程序设计语言不同,适用于不同的领域和任务。 脚本引擎是执行脚本的核心,它起到了桥接脚本语言和高级程序设计语言的作 用。脚本语言的使用者通过脚本引擎将由高级程序设计语言实现的功能进行重新 组合和“粘贴”,实现新的功能和更加复杂的功能。由此可以看到脚本引擎的重要 性和必要性。 本文所研究的面向应用的通用脚本引擎可以说是对一般脚本引擎的重新实 现和功能扩展。面向应用主要表现在此类脚本引擎的目的是对已存在的一般应用 程序的功能扩展。而通用性主要表现在此类脚本引擎可以比较容易的和可控的与 已知的应用程序进行集成,不需要对脚本引擎和原有的应用程序进行架构的重新 设计。通过使用基于j a v a 平台的、面向应用的通用脚本引擎,可以对目前所有 j a v a 平台上的应用程序进行脚本语言的扩展。j a v a 2 企业版( j 2 e e ) 刚是一种基 于j a v a 语言的用来开发分布式企业软件应用系统的平台,目前在企业级开发领 域被广泛使用,但是j 2 e e 并没有提供给使用者脚本的支持,j 2 e e 应用开发者不 能不自己开发或改动已存在的脚本引擎,成本高,难度大。通过引入通用脚本引 擎,可以快速的对j 2 e e 等大型应用进行扩展,大大降低开发成本和周期。由此 可见,面向应用的通用脚本引擎是十分重要和必要的。 本文将从脚本引擎中的关键技术切入,详细论述基于j a v a 平台的通用脚本 引擎的结构设计和具体实现,最后给出具体实例。 1 4 脚本引擎主体框架和功能 在脚本语言的选择上,我们借鉴j a v a s c r i p t 语言的语法来设计我们自己的脚 本语言。由于j a v a 语言具有面向对象、跨平台使用的特性,同时我们希望脚本 语言具有极强的扩展性和跨平台性,因此我们采用j a v a 语言作为脚本的实现语 言。对于脚本的执行,脚本引擎可以采用两种执行模式:编译执行模式和解释执 行模式。在编译执行模式下,脚本引擎分为前、后端,前端实现对于脚本的编译, 将脚本语言编译为字节码,后端使用j v m 来执行字节码实现具体的功能,我们 采用对象树和j a v a 代码作为脚本引擎中脚本到字节码编译过程中的两层中间表 示。也就是说在对脚本进行编译的过程中,脚本先后被转化为对象树、j a v a 代码 和字节码。在解释模式下,脚本引擎不需要将脚本编译为字节码,可以在前端直 接解释执行。用户可以自行决定脚本引擎的工作方式。 前端、后端的分离使得脚本引擎具有良好的移植性和扩展性,脚本通过编译 可以在各种目标环境下工作,可以通过改变前端模块来支持对各种脚本语言的编 译和解释。 3 北京邮电大学硕上学位论文 脚本引擎首先要能够对脚本的词法、语法进行定制,一种语言必须有自己的 一套词法语法作为支撑,对于脚本语言来说,语法一定要简单易用,贴近用户的 使用。我们在脚本引擎中使用j l e x 作为词法分析器的产生工具,采用c u p 作 为语法分析器和语法制导翻译器的产生工具。 脚本引擎要能够灵活定制对象、功能函数和变量,要能够实现各种复杂的数 据结构和底层应用的各种功能。我们的脚本引擎中提供了方便用户定制脚本的功 能模块,能够随着业务层的变化来扩展、定制脚本引擎,使用户可以通过脚本进 行二次开发,组合已有功能实现更为复杂的功能。 4 第二章通用脚本引擎中关键技术的研究 2 1 脚本语言的定义与分类 脚本引擎是脚本运行的平台和容器,下面我们先要明确何为脚本语言以及脚 本语言的分类。 2 1 1 脚本语言的定义 脚本语言的基本构成和一般的系统程序设计语言大体相同,可以说是系统程 序设计语言的一个子集,支持整型、浮点型、字符串型等基本数据类型,支持无 类型变量,支持顺序、循环、条件的基本语言结构【2 l 】。脚本语言是一种高层次的 程序或命令语言,脚本语言通常是解释执行而非在执行之前需要预先编译,也就 是说脚本语言是一种简化了的区别于传统的编辑编译连接运行的处理模式的 计算机编程语言。脚本语言可以是一种通用的编程语言也可以是局限于某一特 定领域,执行特定功能,运行于应用程序或系统程序之上的语畜。脚本通常是以 普通文本( a s c i i ) 的形式进行组织和存储,在每次执行之前进行解释和编译。 目前的脚本语言既可以是解释执行也可以编译执行,因为一方面实现解释器 要比实现编译器要容易,另一方面,对于脚本快速开发的需求要大于执行效率的 需求,因此脚本引擎多采用解释执行,解释执行模式是脚本语言传统的执行模式。 出于对于脚本引擎的研究,并考虑到执行效率,我们将对脚本引擎中的解释 器进行扩展,使其同时具有两种执行模式:解释执行和编译执行。设计开发解释 型脚本引擎要相对简单,但是编译型的脚本引擎运行效率更高。 2 1 2 脚本语言的分类 脚本语言是一种高层次的解释或编译执行的语言,按照功能可以分为如下几 类瞄】: 1 工作控制语言与s h e l l :这种脚本语言使用广泛,它是为了对工作进程进 行自动化控制而产生的,它可以启动和控制计算机系统和程序。这种语 言中的大部分提供命令行的用户操作界面,例如:u n i xs h e l l 。 2 g u i 脚本:伴随着具有明显优势的图形化的用户界面的产生,出现了新 型的计算机控制脚本。用户使用这种脚本通过图形化的窗口、菜单、按 钮等来进行。这种脚本通常用来自动执行一些重复操作或用来对系统进 行配置。总的来说,这种将脚本可以用来控制任何运行于具有用户图形 界面的计算机系统的应用,但这种脚本是依赖于特定语言和操作系统 北京邮电大学硕上学位论文 的。 3 面向应用的语言:许多大型的应用程序都提供给用户便于使用的脚本语 言来完成用户特定的需求。例如某些计算机游戏程序使用一些可定制的 脚本来创建游戏中的角色和游戏场景。这种脚本语言都是为特定应用创 建的,并且都借鉴了一些通用语言的特点。 4 w e b 编程语言:w e b 编程语言是一类非常重要的脚本语言。这类脚本语 言可以提供给使用者特定的能力来创建在i n t e r n e t 上使用的w e b 页。这 种语言通常可以在w e b 浏览器中解释执行。随着脚本语言的发展,这类 现代脚本语言往往具备了通用编程语言的能力。 5 文字处理语言:这种用来处理文字的脚本语言是最古老的脚本语言之 一。这类语言包括:u n i x 中的a w k 、p e r l t l ”,这些语言最初都是为了自 动化编辑u n i x 中的基于文本的配置文件,帮助用户管理计算机而设计 出来的。这种语言也在不断发展,例如p e r l 现在已经发展成为功能全面 的语言了。 6 通用功能的动态语言:一些脚本语言如p e r l ,最初是一种脚本语言,现 在已经发展成为功能全面的编程语言了。许多这类语言现在用来开发应 用程序,它们统称不再被叫做“脚本语言”了。 7 嵌入式脚本语言:嵌入式脚本语言为了代替面向应用的脚本语言而产 生。嵌入式脚本语言可以嵌入到应用程序中。应用程序开发人员( 使用 c 语言或其它编程语言) 在编写应用程序时可以预留一些接口供脚本语 言使用。嵌入式脚本语言与面向应用的脚本语言功能相似,可以认为是 面向应用的脚本语言的扩展,但是嵌入式脚本语言具有明显的优势,它 更有利于开发人员利用类似的技术使用脚本来扩展自己的应用。 2 1 3 小结 由上面两节可以看到,脚本引擎可以具有两种执行模式,脚本语言也根据功 能和用途不同分为若干类型,我们在本文中主要研究和实现同时拥有两种执行模 式的面向应用的和嵌入式的基于j a v a 的通用脚本引擎。 2 2j a v a s c r i p t 语言及其脚本引擎 在设计脚本语言及脚本引擎过程中我们首要研究了j a v a s c r i p t 脚本语言及其 脚本引擎,并大量借鉴的j a v a s c r i p t 的语法。因此本章将对j a v a s c r i p t 脚本语言 给予简要论述。 6 2 2 1j a v a s e r i p t 语言介绍 j a v a s e r i p t 语言 2 1 是n e t s c a p e 通信公司按照e c m a s e r i p t 脚本编程语言实现 的脚本语言。 j a v a s e r i p t 最初是由n e t s c a p e c o m m u n i c a t i o n s 公司开发的,名叫为m o e h a , 后来改名叫l i v e 。q e r i p t ,最终改名为j a v a s e r i p t 。j a v a s e r i p t 最先在1 9 9 5 年使用于 n c t s c a p e 浏览器版本为2 0 8 3 。到2 0 0 6 年,j a v a s e r i p t 的最新版本为1 7 。之前 的1 6 和1 5 版本除了个别不同外都是遵照e c m a - 2 6 2 版本3 来定义的。简单的 说e c m a s e r i p t 就是标准版本的j a v a s e r i p t 。j a v a s e r i p t 可以嵌入到许多主机环境 中,w e b 技术是最常见的一种。 基于w e b 的j a v a s e r i p t 最常见的一种使用是将用j a v a s e r i p t 编写的函数嵌入 到h t m l 页面中并且与d o m 交互以实现单纯h t m l 所不能实现的功能。例如 在某一位置打开一个特定大小的窗口。在提交页面之前检查和验证从w e b 页面 输入的数据也通常用j a v a s e r i p t 实现。这样也可以减轻服务器端的工作负担。可 以说j a v a s e r i p t 最经常使用于w e b 页中。 除了w e b ,j a v a s e r i p t 解释器通常可以存在多种实现从而被嵌入到各种工具 中。a d o b e a c r o b a t 和a d o b e r e a d e r 都支持将p d f 格式的文件中加入j a v a s e r i p t 。 j a v a s e r i p t 还被嵌入到许多没有脚本接口的应用中。微软公司使用的可编译的 j a v a s e r i p t 也就是j s e r i p t 作为一种操作系统脚本语言。j s e r i p t n e t 仍然与 j a v a s e r i p t 类似,但是它更加强大,支持面向对象技术的编程。p h o t o s h o p 和a d o b e c r e a t i v es u i t e 也使用了j a v a s e r i p t 作为脚本提供给使用者使用。 当j a v a s e r i p t 嵌入到宿主环境后,它都能够提供某些特殊的对象模型来访闯 宿主环境,但是j a v a s e r i p t 的核心不会改变。 2 2 2j a v a s e r i p t 脚本引擎 j a v a s e r i p t 脚本引擎是l a v a s e r i p t 程序的解释器,能够执行相应的脚本程序。 最初的j a v a s c r i p t 脚本引擎是n e t s c a p ec o m m u n i c a t i o n s 公司为了n e t s c a p e n a v i g a t o r 网络浏览器设计开发的,由c 语言来实现。从最初的j a v a s e r i p t 版本到 现在最新的版本,j a v a s c r i p t 脚本引擎不断的被重写改进,但都是遵照e c m a - 2 6 2 标准编写的。1 2 1 2 3 1 2 2 3e c m a s e r i p t n e t s c a p e 公司发明了j a v a s e r i p t ,而且n e t s e a p e 的n a v i g a t o r 2 0 也是最早应 用j a v a s e r i p t 的浏览器。此后,m i c r o s o f t 在i e 3 0 中也集成了一个与j a v a s e r i p t 7 北京邮电大学硕十学位论文 基本兼容的脚本解释器,并将该脚本称为 j s e r i p t ”。但j a v a s e r i p t 和j s e r i p t 并非 完全兼容。为此,n e t s e a l m 与e c m a ( 欧洲计算机联合会) 合作,试图将j a v a s e r i p t 标准化。标准化后的语言建立在核心j a v a s c r i p t 的基础上,是一种开放的,国际 化的程序设计语言。该语言标准于1 9 9 7 年被e c m a 采纳,标准化后的j a v a s c r i p t 被称作e c m a s e r i p t 。自此厂商可以根据该规范,并结合自身的需要,开发出自 己的脚本解释器。该标准的第一个版本就是e c m a 2 6 2 规范。到目前为止, e c m a - 2 6 2 规范己经发布到了第3 版。可以说,n e t s e a p e 集成在其浏览器中的 j a v a s e r i p t 是对e c m a s e r i p t 的一种实现,同样,m i c r o s o f t 集成在i e 中j s c r i p t 也是对e c m a s e r i p t 的一种实现。1 1 2 1 脚本引擎中所支持的脚本语言必须具有良好的结构和可用性,因此在我们的 脚本引擎中大量借鉴了e c m a s e r i p t 规范,作为实现脚本引擎的依据。 2 2 4 通用脚本引擎与j a v a s c r l p t 脚本引擎的联系与区别 由前所述,通用脚本引擎与j a v a s c r i p t 脚本引擎既有联系又有区别。从脚本 引擎支持的脚本语言来看,j a v a s e r i p t 语言是严格遵照e c m a s e r i p t 标准的,而 我们的通用脚本引擎借鉴了e c m a s e r i p t 脚本语言的规范。也就是说, e c m a s e r i p t 为这两种引擎所支持的脚本语言提供了语法、运算。除了j a v a s c r i p t 脚本语言实现了e c m a s e r i p t 外,还有其他语言对e c m a s c r i p t 进行了实现和扩 展。如:a e t i o n s e r i p t 和s t r i p t e a s e 从脚本引擎及其支持的脚本语言的适用性来说,j a v a s e r i p t 脚本引擎及其支 持的语言用通用脚本引擎及其支持的语言有着根本的区别。l a v a s e r i p t 除了实现 了e c m a s e r i p t 外,还支持文档对象模型( d o m ) 和浏览器对象模型( b o m ) 。 j a v a s e r i p t 脚本引擎通常是被嵌入到w e b 浏览器中用于解释嵌入到h t m l 页中的 j a v a s e r i p t 脚本,实现从简单的数据有效性验证到与浏览器窗口及其每一个方面 的交互。j a v a s e r i p t 的脚本引擎本质上是专用的,只有重新实现才能使用于其它 的应用场合。例如a e t i o n s e r i p t 和s e r i p t e a s e 的脚本引擎虽然支持的脚本语言都 是和j a v a s e r i p t 语言相通的e c m a s e r i p t ,但是所有脚本引擎的实现并不相同, 功能也不同。 通用脚本引擎与专用脚本引擎的区别在于通用脚本引擎为各种应用实现了 基础的框架和a p i , 我们可以对于通用脚本引擎进行简单的扩展和定制就可以用 来支持任何的应用程序。调用任意应用程序的内部对象,从而快速为各种应用程 序部署脚本引擎,执行具有相同语言特征但功能和内部对象各不相同的脚本。 2 3 脚本引擎中编译技术的研究 编译技术将在脚本引擎中大量使用,解释器是脚本引擎中的核心。在脚本引 擎中的解释器既有可以解释执行脚本又可以编译执行脚本。也就是说解释器同时 具有了编译器的功能。无论是在编译执行模式下还是在解释执行模式下,如何将 字符串形式的脚本转化为机器可理解的形式是实现脚本引擎中的重点和难点,是 实现脚本引擎功能的基础。 2 3 1 编译技术概述 在脚本引擎的设计和实现过程中,需要实现完整的带有编译功能的解释器, 在编译执行模式下,脚本引擎中的解释器就相当于一个编译器。因此首先对编译 器的原理和技术做简要论述。 简单地说,编译器是一个程序,它读入用某种语言( 源语言) 编写的程序并 将其翻译成一个与之等价的另一种语言( 目标语言) 编写的程序 2 4 1 ( 如图2 1 所 示) 。 源程序 目标程序 错误信息 图2 - l 编译器【卅 目前世界上存在着数千种源语言,每种语言都有自己的编译器。从表面看编 译器多种多样,但实际上所有的编译器都在完成相同的功能。在我们所要实现的 脚本引擎中,借用了j a v a 本身的编译器来协助编译,因此在某种程度上减小了 设计难度,并且提高了脚本引擎的可靠性。 2 3 1 1 编译的各个阶段 9 编译器是分阶段执行的。在每个阶段中将源程序从一种表示转换成另一种表 剥2 4 1 。图2 - 2 是编译器各个阶段的示意图。 目标程序 图2 - 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 r r 的相关信息可以参考相关资料。 词法分析、语法分析和语义分析将着重在后面的章节中详细论述。 i o 北京邮电人学硕七学位论文 2 3 1 2 前端与后端 编译器的多个阶段可以分为前端和后段两个大的阶段。前端包括依赖于源语 言并在很大程度上独立于目标机器的某些阶段或者某些阶段的某些部分。 前端一般包括词法分析、语法分析、符号表的建立、语义分析、中间代码生 成以及相关的错误处理。刚 后端包括编译器中依赖的目标机器的阶段或某些部分。一般来说后端完成的 任务不依赖于源语言而只依赖于中间语言。后端主要包括代码优化、代码生成、 以及相关的错误处理和符号表操作。洲 在脚本引擎中我们已经确定了使用j a v a 语言作为中间语言,因此也就是说 脚本引擎中的编译器可以采用相同的后端,j a v a 已经针对不同的机器设计了不同 的编译器。对于前端,不同的脚本语言可以设计实现不同的前端来将脚本源程序 编译成同一种中间语言( j a v a ) 2 3 1 3 编译器的构造工具 编译器的编写是比较复杂的。有一种系统专门用来辅助编译器编写,通常称 为编译器的编译器、编译器生成器或者翻译器编写系统【2 4 】。这种系统大多针对某 种语言模型,来产生相应的语言编译器。 脚本引擎用于扩展j a v a 应用,所以采用j a v a 语言来实现,因此应该采用以 j a v a 语言模型为基础的编译器生成器。 目前人们已经设计出了一些自动设计编译器特定构件的软件工具。 在实现脚本引擎的过程中,我们使用了这样一些有用的编译器的构造工具: ( 1 ) 扫描器生成器。 这类工具一般都根据正规表达式为基础来说明词法以便产生词法分析器。这 类工具产生的词法分析器的基础组织结构等效于有穷自动机【卅。 脚本引擎中采用工具j l e x 来自动产生词法分析器。 ( 2 ) 语法制导翻译引擎。 这类工具产生一系列翻译程序,这些程序在编译语法树的同时产生中间代 码。这类工具的基本思想是为分析树的每个节点关联一个或多个“翻译”,每个翻 译都由树中该节点的邻节点上的翻译来定义洲。 在脚本引擎中实际上是采用了双中间表示。第一层中间表示是对象树。就是 采用j a v a 对象的树形结构关系来表示脚本程序。第二层中间表示采用的是j a v a 代码的形式。第二层中间表示是在第一层的基础上产生的,j a v a 代码的产生借助 了自动代码生成的思想。 北京邮电大学硕士学位论义 脚本引擎中利用c u p 生成的语法分析器中包含了第一层的语法制导翻译引 擎,也就是说第一层中间表示的生成过程是语法分析和语法制导翻译同时进行 的。 ( 3 ) 自动代码生成器。 这类工具以一个规则集合为输入,这些规则定义了中间语言的每个操作到目 标机器语言的翻译。 这类工具使用的基本技术是“模板匹配”。中间代码语句被表示机器指令的模 板替代。由于变量的存放位置多种多样,对于特定模板存在很多的可能方式来替 代中间代码。踟 在脚本引擎中机器代码的产生是由j a v aj d k 的即时编译器产生的,因此我 们并不关心机器代码的产生过程。但是,对于中间表示的第二层采用j a v a 代码, 我们借鉴了机器代码生成器的思想,采用了模板技术来实现第一层中间表示与第 二层中间表示的映射。 2 3 1 a 小结 通过本小节的论述,我们已经对编译技术有了一个总的认识。对于构造脚本 引擎解释器来说,词法分析、语法分析和语法制导翻译是最重要的,也是我们必 须实现的,因此下面我们将详细对词法分析、语法分析和语法制导翻译以及使用 的两个工具进行论述和说明。 2 3 2 词法分析 对于脚本引擎来说,无论是编译模式还是解释模式,首先要对脚本进行词法 分析。 如图2 3 ,词法分析是编译的最初阶段,词法分析器的主要任务是读入输入 的字符,产生记号序列,并提交给语法分析器使用。词法分析器通常作为语法分 析器的子程序或协作程序来实现。当词法分析器收到语法分析器发出的“取下一 个记号”的命令时,词法分析器读入字符,直到识别出下一个记号。 2 4 1 传统实现词法分析器的简单方法包括两步:首先是建立一张描述元语言记号 结构的图。然后,手工的把这张图翻译成能够识别源语言记号的程序l 刎。 随着基于模式制导设计方法的应用,模式采用正规表达式的用于说明词法分 析器的“模式动作”语言j i e x ( j a v a 语言实现的l e x ) 被广泛使用,此种语言的 编译器能够产生一个识别正规表达式的有穷自动机识别器,完成词法分析的功 能。下面我们将从词法分析器的功能入手并结合脚本引擎详细论述如何通过词法 分析器识别单词。 北京邮电人学硕l :学位论文 源程序 图2 - 3 词法分析器与语法分析器之问的交互洲 词法分析器是编译器中读入源程序的部分,因此它还可以完成一些相关的辅 助任务。一个任务是滤掉源程序中的注释、空格、制表符、换行符;另一任务是 使编译器能将发现的错误信息与源程序的出错位置联系起来。因此脚本引擎中必 须对输入的脚本做相应的处理。 在词法分析中经常使用术语“记号”、“模式”、“词素”。洲 记号是源语言文法的终结符。在多数程序设计中,下列结构被处理为记号: 关键字、操作符、表示符、常量、文字串和标点符号( 如逗号、分号) 。 词素是由记号的模式所匹配的表示源程序的字符串,他们是词法单位。 模式是描述源程序中表示特定记号的词素规则的集合。 词法分析归根结底是要识别出输入字符序列中的记号,因此下面我们将迸一 步论述记号是如何描述的,如何通过词法分析器识别记号。 1 记号的描述 正规表达式是表示模式的一种重要方法。每个模式匹配一个字符串集。因此 正规表达式将作为字符串集的名字。这种表示法扩展为词法分析的模式制导语 言。【2 4 1 ( 1 ) 正规表达式 建立正规表达式时可以先定义简单的正规表达式,然后用他们构造出更复杂 的正规表达式。每个正规表达式r 表示一个语言【枷。这些定义规则说明l ( r ) 是 怎样由r 的子表达式所表示的语言以不同的方式组合形成的。洲 下面的定义字母表上的正规表达式的规则,每一条规则后带有所定义的正 规表达式所表示的语言的说明: 是正规表达式,他表示 ) ,即包含空串的集合。 1 3 北京邮电大学硕十学位论文 如果a 是上的符号,那么a 是正规表达式,表示 a ) ,也就是包含符号串a 的集合。 假定r 和s 都是正规表达式,分别表示语言 r ) 和 s ) ,则: a ( r ) l ( s ) 是正规表达式,表示u r ) uu s ) 。 b ( r x s ) 是正规表达式,表示u r ) “s ) 。 c ( r ) 是正规表达式,表示( u r ) ) 。 d ( r ) 是正规表达式,表示“r ) 。 正规表达式表示的语言叫正规集。【2 4 l ( 2 ) 缩写表示法 在正规表达式中,某些结构出现频繁,为方便起见,我们可以用缩写形式表 示他们。 一个或多个实例。一元后缀操作符+ 的意思

温馨提示

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

评论

0/150

提交评论