CN103488519B - 一种交互式脚本语言解释器的实现方法 - Google Patents
一种交互式脚本语言解释器的实现方法 Download PDFInfo
- 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
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脚本的支持性代码,在程序启动时已加载好所述支持性代码。
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)
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)
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)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7509584B2 (en) * | 2004-05-28 | 2009-03-24 | Sap Ag | Dynamic ECMAScript class loading |
-
2013
- 2013-09-27 CN CN201310447472.7A patent/CN103488519B/zh active Active
Patent Citations (6)
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 |