CN101261579A - 一种实现VBScript语言跨平台应用的方法 - Google Patents
一种实现VBScript语言跨平台应用的方法 Download PDFInfo
- Publication number
- CN101261579A CN101261579A CNA200710064279XA CN200710064279A CN101261579A CN 101261579 A CN101261579 A CN 101261579A CN A200710064279X A CNA200710064279X A CN A200710064279XA CN 200710064279 A CN200710064279 A CN 200710064279A CN 101261579 A CN101261579 A CN 101261579A
- Authority
- CN
- China
- Prior art keywords
- vbscript
- script
- language
- syntax tree
- node
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
本发明公开了一种实现VBScript语言跨平台应用的方法,它是通过把VBScript脚本语言直接转换成可跨平台应用的java语言,来实现VBScript语言跨平台应用的目的。具体方法是:第一步,解析VBScript脚本语言生成语法树;第二步,根据生成的语法树生成与VBScript脚本语言相对应的java语言。本发明突破了以往任何方法的思维模式,从根本上提出了将VBScript脚本语言直接转换成程序语言的方法,把脚本语言与脚本语言计算引擎彻底分离,不再“脚本级执行”是本发明的最大优点。
Description
技术领域
本发明涉及一种使VBScript语言可以跨平台应用的方法。
背景技术
脚本语言是一种非编译语言,它可以直接被浏览器解释执行,常用的脚本语言有Microsoft推出的VBScript语言和Netscaper的JavaScript语言,它们是众多脚本语言中较为优秀的一种。
VBScript脚本语言是程序开发语言Visual Basic家族的新成员,它具有强大的灵活性和格式化功能,它将灵活的Script应用到了更广泛的领域。但它有一个根本的瓶颈问题,就是只能局限在Windows平台上运行,只适用于IE浏览器,在Microsoft的32位Windows API、16位Windows API和Macintosh提供的VBScript二进制实现程序上运行,很难象任何标准程序语言一样,跨平台直接应用。现阶段,软件领域还没有任何开源或免费的软件产品支持它在非windows平台运行(比如Unix)。这给VBScript脚本语言的重用性和可移植性造成了严重的影响。
由Sun公司推出的完全基于java技术的ASP4.0软件能够支持VBScript5.5在Linux,Solaris,AIX或微软的Windows平台等系统上直接移植应用,它对于VBScript脚本语言的支持是靠支持能够跨平台的计算引擎来实现的,并在计算引擎中,内置了“COM-to-Java”的绑定规则,实现了脚本语言对部分内置com对象的支持,但其主要针对的是Web应用类业务,使用前提是必须购买java的Web服务器6.0或以上版本,并且,对于如何支持VBScript脚本语言的具体细节,Sun网站并没有对外公布任何信息。截至今日,业界对于VBScript的应用,很少脱离过Web浏览器,从未独立于脚本引擎,这就大大阻碍了VBScript脚本语言的应用场景和可用性。
发明内容
为了满足对VBScript脚本语言多场景、多平台应用的需求,解决VBScript语言除了依赖计算引擎外很难直接跨平台应用的缺点,本发明的目的是提供一种把脚本语言与脚本语言计算引擎彻底脱离,实现VBScript脚本语言跨平台应用的方法。
为实现上述目的,本发明采用以下技术方案:一种实现VBScript语言跨平台应用的方法,其特征在于:将VBScript脚本语言直接转换成可跨平台应用的java语言,具体方法是:
第一步:解析VBScript脚本语言生成语法树;
A、对VBScript脚本语言进行词法扫描,把VBScript中的保留关键字、非保留关键字、数据类型、内置函数、运算符等VBScript脚本语言本身的“静态规则”存储到内存中;清空内存中的“动态规则”,并根据当前脚本实际内容,通过专门的一趟词法分析过程,把自定义函数名及对应参数个数这些动态规则过滤出来,存储到内存中,以动态决定每一段特定的VBScript脚本到java代码的生成过程;
B、进行词法分析,遵照上一步在内存中存储的“静态规则”和“动态规则”,从VBScript脚本语言中分离出一个个字符串,并分别配上简单数据类型的记号;
C、对词法分析的结果进行语法分析,将词法分析输出的记号集合采用自顶向下的方式,解析出一个个可执行的语句节点,语句节点从同一父类继承,某些结点可递归或嵌套其它结点,最终形成语法树,并进行语法树堆栈检查;
第二步:根据生成的语法树生成与VBScript脚本语言相对应的java语言;
A、对语法树进行上下文相关性、类型匹配检查及类型转换;
B、从语法树根结点开始,顺序把每一个结点递归输出对应的java代码。
附图说明
图1为本发明实现VBScript语言跨平台应用的方法流程图。
具体实施方式
本发明是通过把VBScript脚本语言转换成可跨平台应用的java语言,来实现VBScript语言跨平台应用的目的,其效果是让VBScript脚本语言脱离任何脚本执行环境,能够象java语言一样,以使VBScript脚本语言成为能够在各种平台上灵活应用的“程序语言”。
如图1所示,本发明实现VBScript语言跨平台应用的方法包括以下步骤:
第一步:解析VBScript脚本语言生成语法树;
第二步:根据生成的语法树生成与VBScript脚本语言相对应的java语言。
解析VBScript脚本语言生成语法树的方法是:
第一步:对VBScript脚本语言进行词法扫描,把VBScript中的保留关键字、非保留关键字、数据类型、内置函数、运算符等VBScript脚本语言本身的“静态规则”存储到内存中;清空内存中的“动态规则”(上一次VBScript脚本语言转换到java代码时存储到内存中的,若为第一次执行,为空),并根据当前脚本实际内容,通过专门的一趟词法分析过程,把自定义函数名及对应参数个数这些动态规则过滤出来,重新存储到内存中,以动态决定每一段特定的VBScript脚本到java代码的生成过程。
其目的是:把词法分析的“静态规则”(对于任何特定的一段VBScript脚本语言不变)和“动态规则”(根据特定的VBScript脚本语言而定)存储到内存中。
第二步:进行词法分析,遵照上一步在内存中存储的“静态规则”和“动态规则”,从VBScript脚本语言中分离出一个个字符串,并分别配上简单数据类型的记号(token)。
其目的是:把一行行VBScript字符串解析为一个个记号集合。
第三步:对词法分析的结果进行语法分析,将词法分析输出的记号集合采用自顶向下的方式,解析出一个个可执行的语句节点,语句节点从同一父类继承,某些结点(如IF语句)可递归或嵌套其它结点,最终形成语法树,并进行语法树堆栈检查。
在语法分析过程中,在内存中应记录变量在上下文中的联系、数据类型发生变化的变量、未初始化的变量及作为自定义函数参数的变量,这些内存数据结构将在java代码输出过程中,作为实现VBScript弱数据类型到java强数据类型匹配和转换的依据。对于自定义函数结点(含递归和函数嵌套调用),其实现方案是一次单独的VBScript脚本到java代码的生成过程。
本发明根据生成的语法树生成java语言,将VBScript脚本语言转换成可跨平台应用的java语言的方法包括以下步骤:
第一步:对语法树进行上下文相关性、类型匹配检查及类型转换。
上下文相关性及类型匹配检查,实际上在解析VBScript脚本语言生成语法树步骤中的语法分析过程中已经进行,在根据生成的语法树生成java语言之前再次进行类型匹配检查和类型转换是从语法分析过程中存储在内存中的数据记录开始反复进行的。
上下文相关性,类型匹配检查及类型转换的原则包含:
原则1:变量第一次使用时检查其类型,以后该变量在作用域内使用时,若类型发生变化,则该变量由简单数据类型转换为变体类型,以后出现的该变量类型全部转换为变体类型;对以前出现该变量的任意一处重新进行检查,进行变量的简单数据类型到变体类型的转换,转换后,赋值语句左值出现的新的变体类型变量做同样处理,直到没有需要转换的变体类型变量为止。
原则2:自定义函数返回值类型全部为变体类型;当某个变量作为参数传入时,简单数据类型的参数变量转换为变体类型,以后出现的该变量,其类型全部转换为变体类型;对以前出现该变量的任意一处重新进行检查,进行变量的简单数据类型到变体类型的转换,转换后,赋值语句左值出现的新的变体类型变量做同样处理,直到没有需要转换的变体类型变量为止。
第二步:根据语法树生成java语言,并输出java代码。
对语法树进行语义检查后,从语法树根结点开始,顺序把每一个结点递归输出对应的java代码,其目标是保证java代码和对应VBScript脚本代码执行结果的一致性。
根据语法树生成java语言的几条具体指导方法如下:
1、对于java里无对应功能的VBScript内置函数及内置com组件,提供单独的java工具类实现代码输出,这样的内置函数或com对象调用,就直接映射为工具类里的对应函数。
2、提供单独的实现VBScript日期功能的java类来完成VBScript对应日期函数的映射。
3、提供java变体类支持VBScript弱数据类型到java强数据类型的转换,并作为整个代码生成过程中语义检查的基础类。
如图1所示,本发明在将VBScript脚本语言转换成可跨平台应用的java语言的整个代码生成过程中贯穿有出错处理程序。无论哪一步,哪一个运行过程,出错处理程序都会维护当前记号或语法树结点所在的VBScript脚本字符串的位置信息(行号),并在代码生成的每一个过程进行错误检查,从而尽量详细的报告出错信息,帮助定位排错。
综上所述,目前,已有的解决VBScript语言跨平台应用的方法都没有脱离解释执行的模式,都是通过支持特定平台的计算引擎来解释执行VBScript脚本语言来实现的;而本发明恰恰突破了以往任何方法的思维模式,从根本上提出了将VBScript脚本语言直接转换成程序语言的方法,把脚本语言从脚本引擎解放出来,不再“脚本级执行”是本发明的最大优点。
利用上述技术方案,本公司已经实现了VBScript到java的代码生成,并把该成果应用到了上海移动10086合号项目中,实现了使VBScript不再依赖任何脚本计算引擎,象java语言一样直接在AIX刀片机上运行的初衷。对于被跨平台开发困扰过的人来说,把非跨平台脚本转换为跨平台语言,然后仅靠安装java虚拟机就使脚本语言(VBScript)跨平台应用的积极影响就更加可见一斑了。毫无疑问,脚本语言到程序语言的转换也必将程序语言的全部优势带入脚本语言本身。
Claims (3)
1. 一种实现VBScript语言跨平台应用的方法,其特征在于:将VBScript脚本语言直接转换成可跨平台应用的java语言,具体方法是:
第一步:解析VBScript脚本语言生成语法树;
第二步:根据生成的语法树生成与VBScript脚本语言相对应的java语言。
2. 根据权利要求1所述的实现VBScript语言跨平台应用的方法,其特征在于:所述解析VBScript脚本语言生成语法树的方法是:
A、对VBScript脚本语言进行词法扫描,把VBScript脚本语言本身的“静态规则”存储到内存中;清空内存中的“动态规则”,并根据当前脚本语言实际内容,把自定义函数名及对应参数个数这些“动态规则”过滤出来,存储到内存中,以动态决定每一段特定的VBScript脚本到java代码的生成过程;
B、进行词法分析,遵照上一步在内存中存储的“静态规则”和“动态规则”,从VBScript脚本语言中分离出一个个字符串,并分别配上简单数据类型的记号;
C、对词法分析的结果进行语法分析,将词法分析输出的记号集合采用自顶向下的方式,解析出一个个可执行的语句节点,语句节点从同一父类继承,某些结点可递归或嵌套其它结点,最终形成语法树,并进行语法树堆栈检查。
3. 根据权利要求2所述的实现VBScript语言跨平台应用的方法,其特征在于:所述根据生成的语法树生成与VBScript脚本语言相对应的java语言的方法是:
A、对语法树进行上下文相关性、类型匹配检查及类型转换;
B、从语法树根结点开始,顺序把每一个结点递归输出对应的java代码。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNA200710064279XA CN101261579A (zh) | 2007-03-08 | 2007-03-08 | 一种实现VBScript语言跨平台应用的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNA200710064279XA CN101261579A (zh) | 2007-03-08 | 2007-03-08 | 一种实现VBScript语言跨平台应用的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN101261579A true CN101261579A (zh) | 2008-09-10 |
Family
ID=39962051
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNA200710064279XA Pending CN101261579A (zh) | 2007-03-08 | 2007-03-08 | 一种实现VBScript语言跨平台应用的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101261579A (zh) |
Cited By (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102014023A (zh) * | 2010-12-03 | 2011-04-13 | 汉柏科技有限公司 | 基于VB Script的网络设备产品自动化测试方法 |
CN102479130A (zh) * | 2010-11-25 | 2012-05-30 | 上海宇芯科技有限公司 | 一种跨平台跨语言单芯片系统的验证方法 |
CN102521008A (zh) * | 2011-12-28 | 2012-06-27 | 用友软件股份有限公司 | 程序编译装置和程序编译方法 |
CN103529773A (zh) * | 2013-09-18 | 2014-01-22 | 国家电网公司 | 一种行为控制脚本语言的自动化转化方法 |
CN103631632A (zh) * | 2013-11-29 | 2014-03-12 | 华为技术有限公司 | 移植方法及源到源编译器 |
CN103984539A (zh) * | 2014-04-14 | 2014-08-13 | 美的集团股份有限公司 | 一种家电设备运行方法及系统 |
CN104572072A (zh) * | 2014-12-01 | 2015-04-29 | 北京百度网讯科技有限公司 | 一种对基于mvc模式的程序的语言转换方法与设备 |
CN105005496A (zh) * | 2015-06-25 | 2015-10-28 | 桂林力港网络科技有限公司 | 一种跨语言转换网络数据包定义文件的处理系统及方法 |
CN106970802A (zh) * | 2017-04-25 | 2017-07-21 | 北京航天飞行控制中心 | 在领域特定语言中集成编程脚本语言的方法及装置 |
CN107168872A (zh) * | 2017-05-11 | 2017-09-15 | 网易(杭州)网络有限公司 | 代码检查的方法、装置、存储介质和处理器 |
CN108806797A (zh) * | 2018-06-27 | 2018-11-13 | 思派(北京)网络科技有限公司 | 一种医疗数据的处理方法及系统 |
CN111506314A (zh) * | 2020-04-08 | 2020-08-07 | 网易(杭州)网络有限公司 | 项目开发的方法、装置、服务器及介质 |
CN112269566A (zh) * | 2020-11-03 | 2021-01-26 | 支付宝(杭州)信息技术有限公司 | 脚本生成处理方法、装置、设备及系统 |
WO2021208867A1 (zh) * | 2020-04-14 | 2021-10-21 | 华为技术有限公司 | 一种跨平台的代码转换方法及设备 |
CN116610557A (zh) * | 2023-04-10 | 2023-08-18 | 前海飞算云智软件科技(深圳)有限公司 | 动作绑定信息排错方法、装置、存储介质及电子设备 |
-
2007
- 2007-03-08 CN CNA200710064279XA patent/CN101261579A/zh active Pending
Cited By (23)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102479130A (zh) * | 2010-11-25 | 2012-05-30 | 上海宇芯科技有限公司 | 一种跨平台跨语言单芯片系统的验证方法 |
CN102479130B (zh) * | 2010-11-25 | 2015-09-09 | 上海宇芯科技有限公司 | 一种跨平台跨语言单芯片系统的验证方法 |
CN102014023A (zh) * | 2010-12-03 | 2011-04-13 | 汉柏科技有限公司 | 基于VB Script的网络设备产品自动化测试方法 |
CN102521008A (zh) * | 2011-12-28 | 2012-06-27 | 用友软件股份有限公司 | 程序编译装置和程序编译方法 |
CN102521008B (zh) * | 2011-12-28 | 2014-12-10 | 用友软件股份有限公司 | 程序编译装置和程序编译方法 |
CN103529773A (zh) * | 2013-09-18 | 2014-01-22 | 国家电网公司 | 一种行为控制脚本语言的自动化转化方法 |
CN103529773B (zh) * | 2013-09-18 | 2015-01-21 | 国家电网公司 | 一种行为控制脚本语言的自动化转化方法 |
CN103631632A (zh) * | 2013-11-29 | 2014-03-12 | 华为技术有限公司 | 移植方法及源到源编译器 |
CN103984539A (zh) * | 2014-04-14 | 2014-08-13 | 美的集团股份有限公司 | 一种家电设备运行方法及系统 |
CN104572072B (zh) * | 2014-12-01 | 2017-09-29 | 北京百度网讯科技有限公司 | 一种对基于mvc模式的程序的语言转换方法与设备 |
CN104572072A (zh) * | 2014-12-01 | 2015-04-29 | 北京百度网讯科技有限公司 | 一种对基于mvc模式的程序的语言转换方法与设备 |
CN105005496A (zh) * | 2015-06-25 | 2015-10-28 | 桂林力港网络科技有限公司 | 一种跨语言转换网络数据包定义文件的处理系统及方法 |
CN105005496B (zh) * | 2015-06-25 | 2018-05-08 | 桂林力港网络科技有限公司 | 一种跨语言转换网络数据包定义文件的处理系统及方法 |
CN106970802A (zh) * | 2017-04-25 | 2017-07-21 | 北京航天飞行控制中心 | 在领域特定语言中集成编程脚本语言的方法及装置 |
CN106970802B (zh) * | 2017-04-25 | 2024-04-09 | 北京航天飞行控制中心 | 在领域特定语言中集成编程脚本语言的方法及装置 |
CN107168872A (zh) * | 2017-05-11 | 2017-09-15 | 网易(杭州)网络有限公司 | 代码检查的方法、装置、存储介质和处理器 |
CN108806797A (zh) * | 2018-06-27 | 2018-11-13 | 思派(北京)网络科技有限公司 | 一种医疗数据的处理方法及系统 |
CN111506314A (zh) * | 2020-04-08 | 2020-08-07 | 网易(杭州)网络有限公司 | 项目开发的方法、装置、服务器及介质 |
CN111506314B (zh) * | 2020-04-08 | 2024-05-14 | 网易(杭州)网络有限公司 | 项目开发的方法、装置、服务器及介质 |
WO2021208867A1 (zh) * | 2020-04-14 | 2021-10-21 | 华为技术有限公司 | 一种跨平台的代码转换方法及设备 |
CN112269566A (zh) * | 2020-11-03 | 2021-01-26 | 支付宝(杭州)信息技术有限公司 | 脚本生成处理方法、装置、设备及系统 |
CN116610557A (zh) * | 2023-04-10 | 2023-08-18 | 前海飞算云智软件科技(深圳)有限公司 | 动作绑定信息排错方法、装置、存储介质及电子设备 |
CN116610557B (zh) * | 2023-04-10 | 2024-02-09 | 前海飞算云智软件科技(深圳)有限公司 | 动作绑定信息排错方法、装置、存储介质及电子设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101261579A (zh) | 一种实现VBScript语言跨平台应用的方法 | |
EP3971706A2 (en) | Method, apparatus and electronic device for deploying operator in deep learning frame work | |
US8645938B2 (en) | System and method for replacing code | |
CN110704063B (zh) | 编译和执行智能合约的方法及装置 | |
US8806452B2 (en) | Transformation of computer programs and eliminating errors | |
CN101185116A (zh) | 在软件程序中使用强数据类型表示语音识别语法 | |
WO2008097816A2 (en) | Direct access of language metadata | |
CN111427583A (zh) | 组件的编译方法、装置和电子设备及计算机可读存储介质 | |
CN106649110B (zh) | 软件测试方法及系统 | |
CN116149671B (zh) | 用于翻译智能合约语言的方法和装置、电子设备 | |
CN110489124B (zh) | 源代码执行方法、装置、存储介质及计算机设备 | |
CN112905271A (zh) | 一种应用程序接口api的调用方法、装置及电子设备 | |
CN110737431B (zh) | 软件开发方法、开发平台、终端设备及存储介质 | |
CN110659022A (zh) | 一种基于Java自动调用Python脚本的方法 | |
CN111539200B (zh) | 一种生成富文本的方法、装置、介质和电子设备 | |
CN114676436A (zh) | 一种基于结构化变异的安卓应用多媒体解析库漏洞挖掘系统及方法 | |
CN1282917A (zh) | 一种软件模拟测试方法 | |
CN114047923A (zh) | 错误代码定位方法、装置、存储介质以及电子设备 | |
Jain et al. | Sklee: A dynamic symbolic analysis tool for ethereum smart contracts (tool paper) | |
CN101751321B (zh) | 一种动态可视化查看变量的实现方法及系统 | |
CN104657162A (zh) | 一种服务环境修改方法和装置 | |
CN117724804B (zh) | 一种虚拟机指令集的生成方法、装置及设备 | |
CN112162776B (zh) | 依赖关系获取方法及装置 | |
CN117075912B (zh) | 用于程序语言转换的方法、编译方法及相关设备 | |
CN117421056B (zh) | 系统加载方法及装置、存储介质、计算机程序产品和芯片 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Open date: 20080910 |