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

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

Info

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
Application number
CN201310447472.7A
Other languages
English (en)
Other versions
CN103488519B (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

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所述的交互式脚本语言解释器的实现方法,其特征在于:所述宿主语言提供脚本无法实现的功能的代码。
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 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)

* Cited by examiner, † Cited by third party
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)

* 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
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 腾讯科技(深圳)有限公司 脚本的执行方法及系统

Patent Citations (7)

* 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
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)

* Cited by examiner, † Cited by third party
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