CN103488519A - 一种交互式脚本语言解释器的实现方法 - Google Patents
一种交互式脚本语言解释器的实现方法 Download PDFInfo
- Publication number
- CN103488519A CN103488519A CN201310447472.7A CN201310447472A CN103488519A CN 103488519 A CN103488519 A CN 103488519A CN 201310447472 A CN201310447472 A CN 201310447472A CN 103488519 A CN103488519 A CN 103488519A
- Authority
- CN
- China
- Prior art keywords
- script
- language
- nova
- binary
- interactive
- 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.)
- Granted
Links
Landscapes
- Devices For Executing Special Programs (AREA)
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脚本的支持性代码,在程序启动时已加载好所述支持性代码。
进一步的,调用脚本时,通过脚本的ID调用脚本程序。
进一步的,所述宿主语言提供脚本无法实现的功能的代码。
本发明的有益效果为:1、解释器框架固定,语法变动时按照格式填写语法规范,解析代码只要局部变动;
2、策划脚本的编写者按照语法编写脚本源代码,而绝大部分的功能不在脚本中直接实现,而是转交给提供脚本支持的程序员。把“编译器的编写者”、“脚本语言的编写者”、“脚本语言支持的编写者”三者分离,以实现程序的灵活性;
3、脚本支持字节码的序列化、反序列化功能,把编译的时刻和执行的时刻分开,和策划相关的逻辑就不再和复杂的程序逻辑混在一起,同时由于执行时无需重新编译,效率也能有所提升。
具体实施方式
本发明实施例所述的一种交互式脚本语言解释器的实现方法,包括nova语言的编译和nova语言的执行;其中,nova语言的编译包括以下步骤:1)由策划人员实现nova语言的源代码;2)使用工具程序,调用编译器依次编译所有源代码,生成二进制编码的脚本;3)工具程序调用打包接口,将所有的二进制编码的脚本序列化,生成一段完整的二进制编码的脚本,将完整的二进制编码的脚本写入到文件中;Nova语言的执行包括以下步骤1)由宿主语言调用加载接口,加载包含二进制编码的脚本的文件;2)宿主语言检测需要调用的脚本,调用脚本程序;3)执行已经加载好的二进制编码的脚本;所述源代码有一个与它绑定的ID。
所述编译器编译源代码的流程包括词法分析、语法分析和语义分析;所述宿主语言提供nova脚本的支持性代码,在程序启动时已加载好所述支持性代码;调用脚本时,通过脚本的ID调用脚本程序;所述宿主语言提供脚本无法实现的功能的代码。
具体使用时,nova语言是一种轻量级、“交互式”的语言,策划人员使用nova脚本写程序,而真正实现这些逻辑的人可以是C、java甚至lua语言的程序员。双方只要制定好名字规范,就可以让程序员封装复杂的逻辑,而策划人员则直接使用这些逻辑。支持用的代码只需要针对某一个具体项目实现一次即可。因此程序员编写的代码更多是用来:优化支持用的代码,管理整个程序;策划编写的是和项目内容有关的代码。
实施例一
第一步:在脚本程序编辑阶段,编辑人员实现了如下代码:
gather 物品
identify GOODS1
identify GOODS2
function 减少 物品 int end
function 增加 物品 int end
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”);
}
第四步:宿主程序添加支持:
public void InvokeGoodsReduce (NovaArgs args, NovaRet ret){
}
public void InvokeGoodsCount (NovaArgs args, NovaRet ret){
}
// 添加对nova的支持
static
{
try{
NovaConvert.InputInvoke (“物品”, “获取个数”, “InvokeGoodsCount”);
NovaConvert.InputInvoke (“物品”, “减少”, “InvokeGoodsReduce”);
NovaConvert.InputInvoke (“我”, “血量”, “InvokeMyBlood”);
NovaConvert.InputInvoke (“我”, “获取”, “InvokeMyGet”);
NovaConvert.InputInvoke (“任务”, “已经完成”, “InvokeIsfinished”);
}catch (Exception e) {
System.err.println (e.getMessage ());
}
上面这段java代码的含义是,当脚本调用到“物品”的“获取个数”函数时,脚本实际调用到的是“InvokeGoodsCount”函数。
第五步:必要的时刻添加脚本的调用:
NovaConvert nc = NovaConvert. Instance();
int i = nc.InvokeNova (new NovaSupport (null,null), “RS_SCRIPT_ID_1”);
上面的代码表示希望调用ID为”RS_SCRIPT_ID_1”的脚本程序。
第六步:执行程序:
public void InvokeGoodsCount (NovaArgs args, NovaRet ret) {
}
从断点命中可以看到当脚本调用“物品”的“获取个数”函数时,”InvokeGoodsCount”函数会被调用到。
本发明不局限于上述最佳实施方式,任何人在本发明的启示下都可得出其他各种形式的产品,但不论在其形状或结构上作任何变化,凡是具有与本申请相同或相近似的技术方案,均落在本发明的保护范围之内。
Claims (6)
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脚本的支持性代码,在程序启动时已加载好所述支持性代码。
5.根据权利要求4所述的交互式脚本语言解释器的实现方法,其特征在于:调用脚本时,通过脚本的ID调用脚本程序。
6.根据权利要求5所述的交互式脚本语言解释器的实现方法,其特征在于:所述宿主语言提供脚本无法实现的功能的代码。
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 true CN103488519A (zh) | 2014-01-01 |
CN103488519B 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) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106648569A (zh) * | 2015-11-02 | 2017-05-10 | 腾讯科技(深圳)有限公司 | 目标序列化实现方法和装置 |
CN108427559A (zh) * | 2018-03-14 | 2018-08-21 | 新华三技术有限公司 | 一种脚本文件生成和调用方法以及装置 |
CN113407162A (zh) * | 2020-03-17 | 2021-09-17 | 桂林优利特医疗电子有限公司 | 一种带脚本解析的液路控制语言系统及构建方法 |
Citations (7)
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 |
US20050268243A1 (en) * | 2004-05-28 | 2005-12-01 | Martin Moser | Dynamic ecmascript class loading |
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 | 腾讯科技(深圳)有限公司 | 脚本的执行方法及系统 |
-
2013
- 2013-09-27 CN CN201310447472.7A patent/CN103488519B/zh active Active
Patent Citations (7)
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 |
US20050268243A1 (en) * | 2004-05-28 | 2005-12-01 | Martin Moser | Dynamic ecmascript class loading |
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 | 腾讯科技(深圳)有限公司 | 脚本的执行方法及系统 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106648569A (zh) * | 2015-11-02 | 2017-05-10 | 腾讯科技(深圳)有限公司 | 目标序列化实现方法和装置 |
CN108427559A (zh) * | 2018-03-14 | 2018-08-21 | 新华三技术有限公司 | 一种脚本文件生成和调用方法以及装置 |
CN113407162A (zh) * | 2020-03-17 | 2021-09-17 | 桂林优利特医疗电子有限公司 | 一种带脚本解析的液路控制语言系统及构建方法 |
CN113407162B (zh) * | 2020-03-17 | 2023-05-30 | 桂林优利特医疗电子有限公司 | 一种带脚本解析的液路控制语言系统及构建方法 |
Also Published As
Publication number | Publication date |
---|---|
CN103488519B (zh) | 2016-05-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110096338B (zh) | 智能合约执行方法、装置、设备及介质 | |
US20090222827A1 (en) | Continuation based declarative definition and composition | |
CN110149800B (zh) | 一种用于处理与源程序的源代码相关联的抽象语法树的装置 | |
US10579349B2 (en) | Verification of a dataflow representation of a program through static type-checking | |
CN104932905A (zh) | 一种aadl到c语言的代码自动生成方法 | |
CN105468428B (zh) | 一种安卓源代码编译方法及系统 | |
Hong et al. | The application guide of mixed programming between MATLAB and other programming languages | |
US20160246622A1 (en) | Method and system for implementing invocation stubs for the application programming interfaces embedding with function overload resolution for dynamic computer programming languages | |
CN103744682B (zh) | 一种分开编译异构混编程序的方法和系统 | |
CN101458633B (zh) | 通过脚本程序访问宿主程序的方法及其系统和装置 | |
CN104915199B (zh) | 一种将Flash项目转换为Html5项目的方法与装置 | |
Bouraqadi et al. | Test-driven development for generated portable Javascript apps | |
US20080098377A1 (en) | Compiler neutral linking solution for c++ code | |
CN107015840B (zh) | 一种解析器的快速执行方法及快速执行系统 | |
CN103488519A (zh) | 一种交互式脚本语言解释器的实现方法 | |
CN104572102A (zh) | Java中的中文乱码解决方法 | |
CN108121285B (zh) | 基于连续功能图的应用软件协同编译方法及装置 | |
JP2014211864A (ja) | 未完成ソフトウェアの分析 | |
Grechanik et al. | Design of large-scale polylingual systems | |
CN100362817C (zh) | 软件模块的测试方法 | |
CN105786465A (zh) | 一种脚本语言执行方法及装置 | |
US20130111432A1 (en) | Validation of a system model including an activity diagram | |
Kwon et al. | Assessment of the Java programming language for use in high integrity systems | |
CN111596923B (zh) | Haxe静态链接库构建方法、装置和电子设备 | |
CN113448874A (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 |