CN103488519B - 一种交互式脚本语言解释器的实现方法 - Google Patents

一种交互式脚本语言解释器的实现方法 Download PDF

Info

Publication number
CN103488519B
CN103488519B CN201310447472.7A CN201310447472A CN103488519B CN 103488519 B CN103488519 B CN 103488519B CN 201310447472 A CN201310447472 A CN 201310447472A CN 103488519 B CN103488519 B CN 103488519B
Authority
CN
China
Prior art keywords
script
language
binary
coded
nova
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.)
Active
Application number
CN201310447472.7A
Other languages
English (en)
Other versions
CN103488519A (zh
Inventor
毛恩沛
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
SHANGHAI YEHUO NETWORK TECHNOLOGY Co Ltd
Original Assignee
SHANGHAI YEHUO NETWORK TECHNOLOGY Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by SHANGHAI YEHUO NETWORK TECHNOLOGY Co Ltd filed Critical SHANGHAI YEHUO NETWORK TECHNOLOGY Co Ltd
Priority to CN201310447472.7A priority Critical patent/CN103488519B/zh
Publication of CN103488519A publication Critical patent/CN103488519A/zh
Application granted granted Critical
Publication of CN103488519B publication Critical patent/CN103488519B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Abstract

本发明涉及一种交互式脚本语言解释器的实现方法,包括:nova语言的编译,包括以下步骤:1)由策划人员实现nova语言的源代码;2)使用工具程序,调用编译器依次编译所有源代码,生成二进制编码的脚本;3)工具程序调用打包接口,将所有的二进制编码的脚本序列化,生成一段完整的二进制编码的脚本,将完整的二进制编码的脚本写入文件中;Nova语言的执行,包括以下步骤1)由宿主语言调用加载接口,加载包含二进制编码的脚本的文件;2)宿主语言检测需要调用的脚本,调用脚本程序;3)执行已经加载好的二进制编码的脚本。本发明的有益效果:实现程序的灵活性;由于执行时无需重新编译,效率也能有所提升。

Description

一种交互式脚本语言解释器的实现方法
技术领域
本发明涉及计算机技术领域,尤其涉及一种交互式脚本语言解释器的实现方法。
背景技术
一般二进制程序的实现过程为:由程序员编写源代码(例如C语言源代码的.c文件);经过编译程序(例如微软的编译器产品cl.exe)编译、链接,生成二进制模块并合并多个二进制模块;将包含二进制代码的模块和多种不同的资源段按照不同平台的格式(例如windows平台下的.exe程序)生成一个可执行文件;脚本程序的实现过程为:由程序员编写源代码(例如perl语言),使用二进制程序(例如perl.exe程序)解释并执行该源代码,由此可见,脚本程序对于方便实现,缩短项目流程是很有必要的。
在一个大型项目中,往往会有程序员、产品策划、美术制作等参与协同工作。但是在整个项目中,可能有一些内容经常需要变动,但是又必须由程序实现(例如在大型游戏中的攻击伤害计算),每一次的变动是由策划人员发起,却必须由程序员实现,因此往往造成程序员编码压力过大的问题。
发明内容
本发明的目的是提供一种交互式脚本语言解释器的实现方法,以克服现有技术存在的上述不足。
本发明的目的是通过以下技术方案来实现:
一种交互式脚本语言解释器的实现方法,其特征在于,包括以下步骤:
1)nova语言的编译,进一步包括以下步骤:
1.1)由策划人员实现nova语言的源代码;
1.2)使用工具程序,调用编译器依次编译所有源代码,生成二进制编码的脚本;以及
1.3)工具程序调用打包接口,将所有的二进制编码的脚本序列化,生成一段完整的二进制编码的脚本,将完整的二进制编码的脚本写入文件中;
2)nova语言的执行,进一步包括以下步骤:
2.1)由宿主语言调用加载接口,加载包含二进制编码的脚本的文件;
2.2)宿主语言检测需要调用的脚本,调用脚本程序;以及
2.3)执行已经加载好的二进制编码的脚本。
进一步地,所述脚本有一个与其绑定的ID。
进一步地,所述编译器编译源代码的流程包括词法分析、语法分析和语义分析。
进一步地,所述宿主语言提供nova脚本的支持性代码,在程序启动时已加载好所述支持性代码。
本发明的有益效果为:1、解释器框架固定,语法变动时按照格式填写语法规范,解析代码只要局部变动;2、策划脚本的编写者按照语法编写脚本源代码,而绝大部分的功能不在脚本中直接实现,而是转交给提供脚本支持的程序员。把“编译器的编写者”、“脚本语言的编写者”、“脚本语言支持的编写者”三者分离,以实现程序的灵活性;3、脚本支持字节码的序列化、反序列化功能,把编译的时刻和执行的时刻分开,和策划相关的逻辑就不再和复杂的程序逻辑混在一起,同时由于执行时无需重新编译,效率也能有所提升。
具体实施方式
本发明实施例所述的一种交互式脚本语言解释器的实现方法,包括nova语言的编译和nova语言的执行;其中,nova语言的编译包括以下步骤:1)由策划人员实现nova语言的源代码;2)使用工具程序,调用编译器依次编译所有源代码,生成二进制编码的脚本;3)工具程序调用打包接口,将所有的二进制编码的脚本序列化,生成一段完整的二进制编码的脚本,将完整的二进制编码的脚本写入到文件中;nova语言的执行包括以下步骤1)由宿主语言调用加载接口,加载包含二进制编码的脚本的文件;2)宿主语言检测需要调用的脚本,调用脚本程序;3)执行已经加载好的二进制编码的脚本;所述脚本有一个与它绑定的ID。
所述编译器编译源代码的流程包括词法分析、语法分析和语义分析;所述宿主语言提供nova脚本的支持性代码,在程序启动时已加载好所述支持性代码;调用脚本时,通过脚本的ID调用脚本程序;所述宿主语言提供脚本无法实现的功能的代码。
具体使用时,nova语言是一种轻量级、“交互式”的语言,策划人员使用nova脚本写程序,而真正实现这些逻辑的人可以是C、java甚至lua语言的程序员。双方只要制定好名字规范,就可以让程序员封装复杂的逻辑,而策划人员则直接使用这些逻辑。支持用的代码只需要针对某一个具体项目实现一次即可。因此程序员编写的代码更多是用来:优化支持用的代码,管理整个程序;策划编写的是和项目内容有关的代码。
实施例一
第一步:在脚本程序编辑阶段,编辑人员实现了如下代码:
gather物品
identifyGOODS1
identifyGOODS2
function减少物品intend
function增加物品intend
function获取个数物品end
/*endgat*/
end
如果物品.获取个数(GOODS1)>=5那么
物品.减少(GOODS2,5)
结束
这段代码的前半部分,目的是声明了一个集合叫做“物品”,其中支持3个函数调用,分
别是“减少”,“增加”,“获取个数”,而之后的“物品”就是集合名称,表示这三个函数的第一个参数都是物品的ID,此处物品可选的ID就是”GOODS1”和”GOODS2”,之后的int表示第二参数为一个数字。
后半部分实现了一段逻辑,它的意思是,如果一个ID为”GOODS1”的物品数量大于等于5个,那么就把这5个物品删除。
第二步:由工具执行编译并导出。
第三步:宿主程序添加插件,在这里java为例,启动时需要加载nova语言对于java的插件程序:
static{
System.loadLibrary(“NovaLib/NovaConvert”);
}
第四步:宿主程序添加支持:
publicvoidInvokeGoodsReduce(NovaArgsargs,NovaRetret){
}
publicvoidInvokeGoodsCount(NovaArgsargs,NovaRetret){
}
//添加对nova的支持
static
{
try{
NovaConvert.InputInvoke(“物品”,“获取个数”,“InvokeGoodsCount”);
NovaConvert.InputInvoke(“物品”,“减少”,“InvokeGoodsReduce”);
NovaConvert.InputInvoke(“我”,“血量”,“InvokeMyBlood”);
NovaConvert.InputInvoke(“我”,“获取”,“InvokeMyGet”);
NovaConvert.InputInvoke(“任务”,“已经完成”,“InvokeIsfinished”);
}catch(Exceptione){
System.err.println(e.getMessage());
}
上面这段java代码的含义是,当脚本调用到“物品”的“获取个数”函数时,脚本实际调用到的是“InvokeGoodsCount”函数。
第五步:必要的时刻添加脚本的调用:
NovaConvertnc=NovaConvert.Instance();
inti=nc.InvokeNova(newNovaSupport(null,null),“RS_SCRIPT_ID_1”);
上面的代码表示希望调用ID为”RS_SCRIPT_ID_1”的脚本程序。
第六步:执行程序:
publicvoidInvokeGoodsCount(NovaArgsargs,NovaRetret){
}
从断点命中可以看到当脚本调用“物品”的“获取个数”函数时,“InvokeGoodsCount”函数会被调用到。
本发明不局限于上述最佳实施方式,任何人在本发明的启示下都可得出其他各种形式的产品,但不论在其形状或结构上作任何变化,凡是具有与本申请相同或相近似的技术方案,均落在本发明的保护范围之内。

Claims (4)

1.一种交互式脚本语言解释器的实现方法,其特征在于,包括以下步骤:
1)nova语言的编译,进一步包括以下步骤:
1.1)由策划人员实现nova语言的源代码;
1.2)使用工具程序,调用编译器依次编译所有源代码,生成二进制编码的脚本;以及
1.3)工具程序调用打包接口,将所有的二进制编码的脚本序列化,生成一段完整的二进制编码的脚本,将完整的二进制编码的脚本写入文件中;
2)nova语言的执行,进一步包括以下步骤:
2.1)由宿主语言调用加载接口,加载包含二进制编码的脚本的文件;
2.2)宿主语言检测需要调用的脚本,调用脚本程序;以及
2.3)执行已经加载好的二进制编码的脚本。
2.根据权利要求1所述的交互式脚本语言解释器的实现方法,其特征在于:所述脚本有一个与其绑定的ID。
3.根据权利要求2所述的交互式脚本语言解释器的实现方法,其特征在于:所述编译器编译源代码的流程包括词法分析、语法分析和语义分析。
4.根据权利要求3所述的交互式脚本语言解释器的实现方法,其特征在于:所述宿主语言提供nova脚本的支持性代码,在程序启动时已加载好所述支持性代码。
CN201310447472.7A 2013-09-27 2013-09-27 一种交互式脚本语言解释器的实现方法 Active CN103488519B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201310447472.7A CN103488519B (zh) 2013-09-27 2013-09-27 一种交互式脚本语言解释器的实现方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310447472.7A CN103488519B (zh) 2013-09-27 2013-09-27 一种交互式脚本语言解释器的实现方法

Publications (2)

Publication Number Publication Date
CN103488519A CN103488519A (zh) 2014-01-01
CN103488519B true CN103488519B (zh) 2016-05-25

Family

ID=49828776

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310447472.7A Active CN103488519B (zh) 2013-09-27 2013-09-27 一种交互式脚本语言解释器的实现方法

Country Status (1)

Country Link
CN (1) CN103488519B (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106648569B (zh) * 2015-11-02 2021-04-20 腾讯科技(深圳)有限公司 目标序列化实现方法和装置
CN108427559B (zh) * 2018-03-14 2022-10-11 新华三技术有限公司 一种脚本文件生成和调用方法以及装置
CN113407162B (zh) * 2020-03-17 2023-05-30 桂林优利特医疗电子有限公司 一种带脚本解析的液路控制语言系统及构建方法

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6493719B1 (en) * 1999-07-26 2002-12-10 Microsoft Corporation Method and system for scripting for system management information
CN1763717A (zh) * 2005-11-24 2006-04-26 北京中星微电子有限公司 一种利用脚本及其编译器调用宿主软件函数的系统与方法
CN101458633A (zh) * 2007-12-13 2009-06-17 华为软件技术有限公司 通过脚本程序访问宿主程序的方法及其系统和装置
CN101667230A (zh) * 2008-09-02 2010-03-10 北京瑞星国际软件有限公司 一种监控脚本执行的方法和装置
CN102937940A (zh) * 2011-09-08 2013-02-20 微软公司 连接设备的双向扩展
CN102999370A (zh) * 2011-09-16 2013-03-27 腾讯科技(深圳)有限公司 脚本的执行方法及系统

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7509584B2 (en) * 2004-05-28 2009-03-24 Sap Ag Dynamic ECMAScript class loading

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6493719B1 (en) * 1999-07-26 2002-12-10 Microsoft Corporation Method and system for scripting for system management information
CN1763717A (zh) * 2005-11-24 2006-04-26 北京中星微电子有限公司 一种利用脚本及其编译器调用宿主软件函数的系统与方法
CN101458633A (zh) * 2007-12-13 2009-06-17 华为软件技术有限公司 通过脚本程序访问宿主程序的方法及其系统和装置
CN101667230A (zh) * 2008-09-02 2010-03-10 北京瑞星国际软件有限公司 一种监控脚本执行的方法和装置
CN102937940A (zh) * 2011-09-08 2013-02-20 微软公司 连接设备的双向扩展
CN102999370A (zh) * 2011-09-16 2013-03-27 腾讯科技(深圳)有限公司 脚本的执行方法及系统

Also Published As

Publication number Publication date
CN103488519A (zh) 2014-01-01

Similar Documents

Publication Publication Date Title
CN102246150B (zh) 转换用户脚本代码来进行调试
Edwin Software frameworks, architectural and design patterns
Rosenmüller et al. Flexible feature binding in software product lines
EP2249249A1 (en) Systems and methods for modifying code generation templates
Lytra et al. Supporting consistency between architectural design decisions and component models through reusable architectural knowledge transformations
CN103488519B (zh) 一种交互式脚本语言解释器的实现方法
US8032877B2 (en) Compiler neutral linking solution for C++ code
Bartusevics et al. Models for implementation of software configuration management
Danelutto et al. Introducing parallelism by using REPARA C++ 11 attributes
Albert et al. aPET: a test case generation tool for concurrent objects
US20070277165A1 (en) Debugging Interpreted Input
CN108121285B (zh) 基于连续功能图的应用软件协同编译方法及装置
CN113900704A (zh) 应用程序安装包的发布方法、装置、可读介质及电子设备
WO2019168693A1 (en) Compiler-generated asynchronous enumerable object
CN108536434A (zh) 一种基于高级程序设计语言实现钩子函数的方法及装置
Hähnle et al. HATS abstract behavioral specification: The architectural view
CN102331961A (zh) 并行模拟多个处理器的方法及系统、调度器
Donham A domain-specific language for microservices
US20130111432A1 (en) Validation of a system model including an activity diagram
CN103677790A (zh) 软件的函数修改方法
CN104750482A (zh) 一种构建基于MapReduce的动态脚本执行引擎的方法
Setyautami et al. Modeling multi software product lines using UML
Dong Aspect oriented programming technology and the strategy of its implementation
CN113448874A (zh) 一种单元测试脚本的生成方法及装置
CN106815003A (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
C14 Grant of patent or utility model
GR01 Patent grant