一种基于手机中间件的JavaScript解释器系统的制作方法

文档序号:28800029发布日期:2022-02-08 19:30阅读:122来源:国知局
一种基于手机中间件的javascript解释器系统
技术领域
1.本发明涉及基于手机中间件的javascript解释器系统,是一种基于手机一种手机中间件平台系统。


背景技术:

2.目前国外与国内市场上手机可以分为两类:smart phone:;f口fe芦汀ure phone,smartphone硬件配置高,特点在于采用了开放式的智能的操作系统,例如symbian、windows mobile,用户在终端可以享受多层次的应用体验。而featurephone则采用了相对封闭的实时操作系统,硬件配置相对较低,终端应用方面也乏善可陈。但是基于一种新型的手机平台中间件技术(vre手机中间件),可以在feature phone平台上扩展丰富的应用,其中基于f阻汀ure phone手机平台的浏览器就是其中之一。而通过javascript脚本解释器来支持对javascript脚本语言白勺解释执行是手机平台浏览器的核心功能之一。
3.javascript是一种轻型的、解释型的程序设计语言,而且具有面向对象的能力。该语言的通用核心已经嵌入了netscape、internet explorer和其他的pc平台的web浏览器中,而且它能用表示web浏览器窗口及其内容的对象使web程序设计增色不少。javascript的客户端版本把可执行的内容添加到了网页中,这样一来,网页就不再是静态的h丁ml了,而是包含与用户进行交互的程序、控制浏览器的程序以及动态创建html内容的程序。


技术实现要素:

4.基于上述问题,特此发明基于手机中间件的javascript解释器系统;该系统基于封闭手机系统之上的一种手机中间件平台,采用doug lea内存管理算法对非常有限的系统内存进行管理,小内存块的有效利用率比较低,针对该手机中间件的内存特点,开发了基于封闭手机系统手机中间件上的一款javascript解释器系统,该系统分为解释前端和解释后端两部分,采取语法分析驱动词法分析和语义动作策略,并基于语法制导思想构造了javascript生成抽象语法树的属性文法。
具体实施方式
5.基于手机中间件平台vre设计的javascript解释器系统分为前端和后端两部分。系统前端中,选用词法分析模块驱动词法分析和语法动作模块,相对于有些解释器结构中采用的单词链表和语句链表作为前端解释的载体的策略,极大地节省了小内存大规模的申请使用。前端系统通过语法分析模块中分析动作的驱动,调用词法分析模块中产生式归约所需要的单词符号,当一个产生式归约成功后,调用语法动作模块生成抽象语法子树。当一个可执行语句集归约完毕后,与之对应的抽象语法树(ast)构造完毕。由javascript解释器主控模块对抽象语法树进行遍历,生成自定义格式的中间字节码。对后端系统而言,前端系统产生的中间代码即为所需的目标码,对其进行解释执行并输出结果即可。前端系统的词
法分析模块和语法分析模块所使用的文法是ecma一262第二版中的文法。ecma一262是欧洲计算机制造商协会(ecma)制定的脚本预研的国际标准。javascript v1.3完全兼容ecma一262,而ecma一262第二版只是修改了第一版中的~些错误。在前端系统中,根据javascript词法规则构造确定有限自动机(dfa),由确定有限自动机可以很容易地构造词法分析器。语法分析和语义部分则采用lalr分析方法和语法制导翻译方法。前端系统产生的中间代码采用自定义的字节码。采用字节码的好处是字节码与平台无关,在不同的平台上使用不同的解释器对它进行解释执行,即可实现在字节码级与各平台兼容,不仅仅局限于vre手机平台,不必对字节码做任何修改。
6.此分析解释器主要分为:1. 1词法分析器构造;根据ecma-262中javascript词法规则定义,构造出dfa的状态转换矩阵表,可以比较容易地构造出词法分析器。词法分析器以javascript源代码字符串作为输入,每次将源码字符串中的下一个单词符号信息返回给语法分析器。鉴于javascript语言基于其对象的特性,词法分析器返回给语法分析器的单词符号信息应该兼容基本数据类型和对象类型。符号信息数据类型定义如下:typedef struct lexer..word..info{int type; //单词符号类型union{int keyword; ,/关键字int intvalue; //整型数值float fvalue; //浮点型数值char*strvalue;//变量名、对象名、函数名或字符串等指针}wvalue;}lexer..word..i nfo;词法分析器在返回给语法分析模块结果之前,将识别结果写入符号表中。在该javascript解释器系统中,词法分析器被语法分析器驱动。
7.2. 语法分析器构造;解释器的前端系统的构架设计有多种方案,有的解决方法是把词法分析器、语法分析器和语义动作部件作为平行的部件来对待,即首先对整个源文件进行词法分析得到单词串链表,然后语法分析器逐个读取单词串进行词法分析并得到语句序列链表,最后语义动作对整个语句序列链表采取对应的语义处理。这种设计思路需要单词链表和语句链表作为中间数据结构来支撑,会造成小内存块的大规模占用,鉴于douglea内存管理算法的特性,这种策略并不适合在手机中间件采用。
8.该javascript解释器在解释前端的设计上,语法分析器在逻辑上高于词法分析器和语义动作部件,采取“即用即取”的策略,节省了单词链表等中间数据结构的内存开销。语法分析模块负责驱动语法分析和语义动作两个模块,在通过lalr分析法进行产生式归约的过程中,逐个获取javascript单词符号并根据每条产生式的语义规则调用对应的语义动作。面向词法分析与语义动作驱动的lalr语法分析器算法如下:begin初始化lalr归约状念为0状态;
do//调用洲法分析,得到一个啦词符号word;lf(word有效&&lalr归约未到acc态)按照lalr分析表,基于符号栈做侈进、归约和跳转等操作,有归约时调用列应语义动作:elseif(lalr归约未到acc态)break:elseerror:while(word有效&&lalr归约未到acc态)endlalr语法分析过程中,基于符号栈和语法树指针栈进行操作。终结符非终结符的操作都基于一个符号栈来进行;在分析过程中生成的抽象语法树指针放在与符号栈对应的语法树指针栈中。
9.3. 语义动作模块构造;语法分析器运行过程中,当某个产生式被归约时,调用语义动作模块生成产生式的抽象语法子树(subas-i-)。本系统参照语法制导语义分析方法,构造了javascript语法生成抽象语法树的属性文法,以javascript中对象加法运算语法的属性文法为例,举例如下:a.》a+aa.ptr=newastnode(+,2,a1.ptr,a2.p仃)a.》a.bb.ptr=newastnode(.,1,null,null)+(b.ptr).value=b.valuea.ptr=newastnod《.,2,a1.ptr,b.ptr)a.》ba.ptr=newastnode(null,l,null,null)

(a.ptr).value=b.value其中,a表示对象,b表示对象或属性。属性文法中,如果产生式右侧有与左侧同名的非终结符,则对右侧的非终结符依次缀以编号表示。函数原型astnode*newastnode(int op—type, int op—count。astnode*oprand—node。

),它的功能是生成抽象语法树的子节点并返回节点指针。基于语法制导翻译法的思想,在每个产生式进行归约时,依照它们对应的语义文法,每归约产生一个非终结符,它所对应的抽象语法子树都要弹入语法分.析器中维护的指针栈中。一旦一个产生式被归约,符号栈顶几个元素即被弹出,归约产生的非终结符弹入,同时抽象语法树指针栈顶对应几个元素也被弹出后指针赋值后再弹入。
10.4. 解释后端设计;解释器的后端系统实际上是一个解释自定义字节码的虚拟机。后端虚拟机系统是由字节码解释控制程序和函数调用关系栈、操作数栈、变量数据栈和对象信息记录表五部分组成的。其中,字节码字节控制程序根据字节码的操作符码,对操作数进行操作,比如进栈出栈等。函数调用关系栈记录了javascript各种可执行代码的相互调
用关系,每当进入一个新的可执行代码,就在函数调用关系栈栈顶压入当前可执行代码的的执行上下文环境信息。操作数栈主要甩于进行各种计算和中间结果的保存。中间字节码的所有计算均基于它来进行。变量数据栈用于记录字节码执行时的变量信息。每当进入一个新的可执行代码,就在变量数据栈压入当前可执行代码的局部变量信息(包括变量名称、类型、值等),一旦当前的可执行代码执行完毕,变量数据栈项元素即被弹出,同时函数调用关系栈和操作数栈中相关元素弹出。对象信息记录表是存储各种javascript对象的内存区。由于手机中间件平台的可用内存资源有限和小内存块利用不充分的特点,将固定长度的结构数组作为对象信息记录表。对象记录表中记录包括对象的属性个数、对象的属性信息等。在javascript中,对象的方法也被视作对象的属性。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1