脚本语言范例6篇

脚本语言

脚本语言范文1

2、容易部署:大多数脚本语言都能够随时部署,而不需要耗时的编译或打包过程。

3、同已有技术的集成:脚本语言被Java或者Com这样的组件技术所包围,能够有效地利用代码。

4、易学易用:很多脚本语言的技术要求通常要低一些,能够更容易地找到大量合适的技术人员。

脚本语言范文2

【关键词】MAX Script;脚本语言;生长动画;叠加动画

MAXScript脚本语言是为了扩展3DS MAX功能而专门设计的一种语言,是面向对象编程语言中的一种。它功能强大,可以实现3DS MAX面板操作难以实现或者不能实现的一些功能,是影视和广告设计中强大有力的工具。但同时它没有很严格的格式要求,容易掌握,非常适合于没有语言基础的三维动画爱好者。

下面将以生长动画和叠加动画为例来探讨批量物体动画的脚本语言实现方法,并通过这两个实例展示脚本语言在批量物体动画中的优势。为了制作简单,实例中均以简单的长方体作为运动对象。

生长动画程序关键代码如下:

with animate on

for i=1 to 100 do

(b= box pos:(random [0,0,0] [100,100,0]) length:20 width:20 height:10

slidertime=(i-1)+20

at time slidertime b.height=b.height+50)

这段代码首先创建100个长方体,然后为每个长方体分别设置关键帧动画,而且每个长方体的关键帧位置各不相同。如果使用面板操作将需要花费大量的时间和工作量,而用代码实现就容易多了。这类动画方法在建筑生长动画中经常使用。这段动画的特点是依次生长,动画过程截图如下:

图1 第10帧截图

叠加动画的程序关键代码如下:

b=box height:60 width:20 length:20

for i=1 to 100 do

(box_copy=copy b

box_copy.pos=(random[0,0,0] [100,100,0]))

select objects

animate on

(at time 0 $.visibility=off

at time 3 $.visibility=on)

animate off

animationRange = interval 0 300

x=0

for a in selection do movekeys a(x+=3)

这段代码也是先创建100个长方体,再为每个长方体分别设置两个关键帧动画,然后需要顺序移动各物体的关键帧。如果使用面板完成是很困难的。这类动画在表现物体的叠加时经常使用。动画过程截图如下:

图2第71帧截图

通过以上两个实例可以看到,几句简单的MAXScript语句,就可以批量的创建大量物体、设置批量物体动画,这些功能是3DSMAX面板操作无法实现的。MAX Script甚至还能实现场景中物体的随机化分布,甚至可以使用脚本自己开发外挂程序提高工作效率。所以,3DS MAX Script 给3D爱好者提供了更多的拓展空间,如果有兴趣钻研,其实可以使用MAX Script实现对三维建摸、动画的精确控制,从而全面提升3DS MAX 专业水准。

参考文献

[1]亓鑫辉,张汉平.3DS MAX影视特效火星课堂—脚本应用篇[M].北京:人民邮电出版社,2011.

脚本语言范文3

关键词:TORQUE游戏开发引擎;脚本语言;武器系统

中图分类号:TP391文献标识码:A文章编号:1009-3044(2012)07-1632-05

Weapon System to Achieve Based on TGE and Script Language

ZUO Ning

(Lanzhou Jiaotong University, Lanzhou 730070, China)

Abstract: Today, computer games have become into people’s lives and become widely accepted as a form of entertainment. In recent years more and more rapid development of the industry game. At present, the more popular 3D games are the core game engine, game engine incorporates all of the underlying technology, to provide a more efficient R & D development platform, developers can make without spending too much energy to achieve, such as memory management, image rendering, collision detection, and so low-level details, but direct use of the engine to provide an excuse for game development, thereby greatly reducing the development cycle. This article uses TORQUE game development engine and scripting techniques to achieve a 3D gaming environment, the character’s weapons systems. To the role players to achieve the replacement of weapons, equipment, weapons and features in the current, more mainstream FPS type games are more common. At the same time to achieve the desired functionality of the process of analysis TOEQUE scripting language features, and further research study TORQUE engine use.

Key words: TGE; Script Language; Weapon System

从1992年第一个游戏引擎:3D Realms公司开发的Wolfenstein 3D问世至今,3D游戏开发引擎的开发已经有了将近20年的发展历史,在这20年见,世界上出现了很多优秀的游戏开发引擎同时在这些引擎的基础上也诞生了很多伟大的游戏,比如id Software DOOM引擎下诞生的《毁灭战士》、采用《帝国时代2》(Age of Empires)引擎制作的《星球大战:银河战场》等等。简单地说,游戏开发引擎就是“用于控制所有游戏功能的主程序,从计算碰撞、物理系统和物体的相对位置,到接受玩家的输入,以及按照正确的音量输出声音等等。”

Torque Game Engine简称TGE,是Garage Game公司所开发设计的3D游戏开发引擎,其封闭了很多三维场景实现过程中所需要的底层开发技术,以一个较为友好的交互界面,提供给游戏开发人员一个便捷的操作环境,无论是在三维场景模型添加还是在用户界面编辑方面都做到了简单快捷,使开发人员能够迅速将其掌握并且在此基础上实现所要完成的功能。

TGE,目前多用于第一人称射击类以及基于第一人称的FPS游戏的开发项目,其提供的脚本语言Torque Script使得开发人员能够灵活控制调配所建立场景的各种模型,为他们添加事件处理机制,并且强大的脚本语言与TGE结合后使得我们所需要的三维场景顿时生动起来,通过脚本语言的编写,可以使一个木讷的模型变得活灵活现,甚至赋予其智慧(AI),并且在游戏的设计中,设计者们可以通过此途径实现游戏内各种任务、剧情,并且在此基础上可以任意添加游戏规则。TGE和脚本语言的灵活使用,设计者们就可以实现一个属于他们自己的游戏世界。

武器系统是很多第一人称射击类游戏所必备的一部分,较好的武器系统会带给玩家真实的临场感官感受和便捷的操作性。本文主要介绍如何在TORQUE引擎的开发环境下实现为玩家装备上武器并且更换武器的功能。并且以此为例分析TORQUE SCRIPT脚本语言的特点。

1关于TORQUE SCRIPT脚本语言

TORQUE SCRIPT是专门为TGE设计的配合其场景功能调试的类C脚本语言,其语法简单明确,对于有C/C++语言基础的开发人员来说极易上手,并且其模块化设计方法在游戏的设计制作过程和后期维护方面都显得极其便捷,并且游戏源代码.CS文件通过TORQUE引擎编译机制编译后会生成二进制不可逆编译的.dso文件,这样使得能够在作品后,很好的保护原作的知识产权以及源代码。

作为一款成熟的游戏开发引擎的脚本语言,TORQUE SCRIPT包括了快速开发(大幅缩短了开发周期)、部署简便(提供了即时的部署能力,不用花费大量的时间在编译、打包等工作上)、易于上手和使用(不需要很强的编程功底的设计人员即可迅速上手)、动态代码(脚本代码能被即时的生成和执行)等优点。同时作为脚本语言也有一些缺点如运行速度较慢,不具备通用性(只是为单一开发引擎所使用)。

以下是TORQUE的文件组织结构:

图1 TORQUE的文件组织结构

其中Main.cs文件TOQRUE SCRIPT的根文件,所起到的作用是解析引擎中的通用模块并且连接到游戏相关的main.cs文件,将引擎的控制权转交给相应的游戏。文件夹common和creator是整个TORQUE开发工具的基础,其common文件夹下的是一些TORQUE引擎相关的通用模块而creator下则是一些编辑工具,编辑器需要实现很多功能的时候,没有这个模块的话大部分功能是实现不了的。Shaders文件下存放的是系统定义好的和用户自行设计的shaders。最关键的就是client和server这两个文件夹,游戏相关的大部分脚本文件都存放在这里,包括客户端的和服务器端的。Data下存放的是游戏相关的素材,包括模型、声音、纹理和少部分的脚本。

TORQUE脚本语言,主要由对象、数据块(datablock)、包(PACKAGE)组成。这里着重说明一下数据块(datablock),数据块是TORQUE脚本中的一种特殊的对象,在TORQUE游戏引擎中起到非常关键的作用,其作为一个实体描述了一组关于一个对象的属性,而对象的概念如同很多面向对象的程序设计语言一样,是一组方法和属性的集合。一个对象的存在为了描述另一个对象,这在游戏开发过程中是很常见的,比如描述玩家的生命值,弹药数量等等。数据块对象在游戏的过程中不会被其他因素所改变,这样使得创建的对象不仅有灵活的属性变化,而且有其静态数据的保护。包(PACKAGE)是TORQUE中的一种结构,其作用是封装了一系列的方法。这些方法在游戏的运行中会被动态的加载或者卸载。

2在场景中实现武器系统的思路以实现步骤

首先在场景中加入PLAYER的模型,本例中将使用TGE自带的兽人模型,将模型文件拷贝到游戏目录的data\shapes文件夹下,然后修改server目录下的player.cs脚本文件(本例中使用Torque Dev来进行脚本的编写),将player.cs文件打开后加入以下几行代码:

exec("~/data/shapes/player/player.cs");//加载模型包的脚本文件

datablock TSShapeConstructor(PlayerDts)//

{ baseShape = "~/data/shapes/player/player.dts";

sequence0 = "~/data/shapes/player/player_root.dsq root";

sequence1 = "~/data/shapes/player/player_forward.dsq run";

sequence2 = "~/data/shapes/player/player_back.dsq back";

sequence3 = "~/data/shapes/player/player_side.dsq side";

sequence4 = "~/data/shapes/player/player_fall.dsq fall";

sequence5 = "~/data/shapes/player/player_land.dsq land";

sequence6 = "~/data/shapes/player/player_jump.dsq jump";

sequence7 = "~/data/shapes/player/player_standjump.dsq standjump";

sequence8 = "~/data/shapes/player/player_lookde.dsq look";

sequence9 = "~/data/shapes/player/player_head.dsq head";

sequence10 = "~/data/shapes/player/player_headside.dsq headside";

sequence11 = "~/data/shapes/player/player_celwave.dsq celwave";

};

datablock PlayerData(PlayerBody)

{

renderFirstPerson = false;

shapeFile = "~/data/shapes/player/player.dts";

maxInv[Crossbow] = 1;//先定义本例所要用到的武器,供之后装备武器时使用}

//以上代码主要作用是加载DTS模型和将人物的行进等动画合并为一个序列这样就在场景出现了一个兽人模样的玩家模型(如图2)

图2实现加入玩家模型

接下来要做的就是将我们准备好的武器(十字火弓)给玩家装备上了,首先将装有武器模型DTS文件的crossbow文件夹拷贝到data/shapes文件夹下,然后有关此武器的脚本文件crossbow.cs拷贝到server文件夹下,打开game.cs文件,在加载玩家脚本文件的语句前添加exec("./crossbow.cs");加载此脚本,紧接着在player.cs文件内找到定义PlayerBody::onAdd方法的语句,在其中添加以下带下划线语句:

function PlayerBody::onAdd(%this,%obj)

{

parent::onAdd(%this,%obj);

%obj.mountImage(CrossbowImage,0);

%obj.setImageAmmo(0,1);

}

此函数将在引擎第一次读取玩家数据块时调用,下划线语句主要作用在于调用mountImage()和setImageAmmo()这两个库函数将武器装备给玩家模型,并且设定其弹药为无限。修改好后重载下引擎,就可以看见之前添加的Player手中拿上了一把十字火弓(如图3)。

实现此功能后,切换到游戏画面,点击鼠标左键就可以看到发射弓箭的动画了。

完成了武器的装配,下面要做的就是实现武器的切换功能,这个功能在很多的FPS游戏中很常见,实现起来的方法也是大同小异的,在TORQUE中,通过导入模型和修改脚本就可以轻松实现此功能。

首先将我们要准备切换的武器(火箭筒)模型文件下拷贝到游戏目录的data\shapes文件夹下,并且把有关此武器的脚本文件rocket.cs拷贝到游戏目录的server\文件夹下。

图3装备上武器后的玩家

打开server\文件夹下的game.cs文件,使用exec(“./rocket.cs”);语句加载火箭筒的脚本文件,然后打开client\文件夹下的config.cs文件,添加以下语句:

moveMap.bindCmd(keyboard,”g”,”commandToServer(\’use\’,\”Rocket\”);”,””);

打开client\文件夹下的defaultbind.cs文件,添加以下语句:

moveMap.bindCmd(keyboard,”g”,”commandToServer(\’use\’,\”Rocket\”);”,””);

这两条语句作用为获取键盘事件(设定为g键)并将其传送给服务器端。

还要修改一下server\下的player.cs文件,在PlayerData数据块定义中添加以下带下划线语句:

datablock PlayerData(PlayerBody)

{

renderFirstPerson = false;

shapeFile = "~/data/shapes/player/player.dts";

maxInv[Crossbow] = 1;

maxInv[Rocket] = 1;

maxInv[Rocket_LauncherAmmo] = 20;

};

这两行语句保证了,武器可以被捡起来,并且定义了其初始的弹药数量。

做好了以上几步,启动游戏引擎,进入任务编辑器,在3D环境的编辑器内,防止武器和弹药,放置好后,重新载入,看到武器可以被捡起并且装备上,同时按下“g”键,可以得到如图4的效果:

图4将本已装备的十字火弓更换为火箭炮

3结束语

本文介绍了如何使用TORQUE游戏开发引擎及其脚本语言实现3D场景内的武器系统,完成了武器系统所需要的一些基本功能,讲述了所需功能涉及的一些脚本编写的基本思路。可以看到TORQUE引擎的强大功能和其带来的设计多样性。同时Garage Game公司也在不停推出新版本的TGE,所以要使得做出的游戏画面更加细腻,情节更加生动、引人入胜,还需要做很多更深入的研究。

参考文献:

[1] Kenneth C Finney. 3D游戏开发大全[M].齐兰博,肖弈,译.北京:清华大学出版社,2005.

[2] Kenneth C Finney.3D游戏开发大全:高级篇[M].徐明亮,谷培培,译.北京:清华大学出版社,2007.

[3]张文瑞.游戏开发的脚本机制及其应用[J].科技情报开发与经济,2009,19(9):122-124.

[4]北京递归开元教育科技有限公司.网络游戏脚本编程[Z].2006.

[5]王兆其,王阳生,等.游戏开发中的引擎[J].计算机世界报,2004(12):3-5.

[6]王萍.脚本语言编程[J].东北大学学报,2003,3:37-39.

[7]林荻,交互式脚本中的决策系统[D].福州:福州大学,2006.

[8] Andrew Rollings,Dave Morris.游戏架构与设计[M].付煜,庄晓雷,等,译.北京:北京希望电子出版社,2005.

[9] Grages brand.Torque Game Engine[EB/OL].省略/torque.

脚本语言范文4

关键词:脚本描述语言;词法分析器;语法分析器

中图分类号:G642 文献标识码:B

传统的编译原理实验基本以高级程序设计语言为对象进行组织,一般包括词法分析、语法分析和语义分析等,教学内容和实验设计几乎几十年不变。由于现在的本科生毕业后很少有机会从事高级语言翻译工作,所以学生对该课程的兴趣不大。随着计算机技术的发展和基于互联网的搜索技术和智能处理技术的广泛应用,编译技术已经不再局限于高级语言的翻译和处理――利用编译原理解决更广泛的应用问题是新的需求。因此笔者在这方面也做了有益尝试。

脚本语言是随着互联网发展起来的信息描述技术,它具有以下特点:

(1) 脚本语言简单易学,开发成本较低。

(2) 脚本语言很容易被解释执行,而且花费时间比较短。

(3) 脚本描述语言设计的设备无关性。

但是,脚本描述语言没有自然语言容易理解,所以最终还是要把脚本语言翻译为自然语言(目标语言)。一般编程语言编写的程序要在计算机上运行,必须转化为计算机能够识别的机器语言,转化过程一般包括词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成等环节。我们设计的球类脚本描述语言主要用于对体育比赛视频进行标准化,所以在语言构成上没有高级语言复杂,翻译时也不需要上面提到的编译实现全过程,只需要进行词法分析、语法分析和语义分析3个环节。

1球类脚本描述语言

随着社会文明的发展与进步,体育比赛已经成为人民文化生活中不可缺少的组成部分。2008年,北京成功举办了第29届奥林匹克运动会,运动员共打破38项世界纪录,取得了骄人的成绩。作为本次奥运会科技攻关课题组的成员,我们参加了国家乒乓球队攻关项目的研究工作,为中国乒乓球队设计实现了一个基于视频标注的技、战术分析系统。我们采用编译技术翻译乒乓球脚本描述语言,实时、准确地记录并分析比赛中发生的各种技、战术细节,为教练员提供客观翔实的分析数据。

作为“编译原理”的任课教师,我们认为该课对学生系统掌握计算机基础理论十分重要,但由于学生在今后工作中很难用到编译技术,就会产生厌学思想,因此为学生设计一个好的编译原理实验成为当务之急。为此,我们结合承担的科研课题,设计了一个既让学生感兴趣,又能加深他们对编译原理思想理解的实验。

根据球类比赛的特点和脚本描述语言的设计要求,球类比赛可分为两种:一是比赛需主、客队同台(场)竞技,如沙滩排球、乒乓球、篮球、足球和网球等;二是主、客队轮流上场,比赛对手不是同台竞技,如台球和保龄球等。第一种球类比赛具有以下特点:(1)进攻/防守形成博弈;(2)博弈双方的技术动作具有相似性。为此,我们把第一种比赛的相关技、战术描述抽象成如下形式:

队员+技术动作+技术动作发生区域+技术动作结束区域

我们的设计目标主要针对第一种比赛。脚本描述语言的语法结构如图1所示。

其中单词由英文字母构成,可以采用汉语拼音的字首进行编码;句子由单词加分隔符“”构成。图2是一个乒乓球比赛脚本描述语言的案例。

2解释器的设计与实现

根据球类比赛技、战术分析的需求,设计的解释器由

词法器、语法器和语义分析模块三部分组成,如图3所示。其中词法分析器负责词法分析的预处理和输入单词的解释;语法分析器负责分析输入码的语法结构检查和解释;在词法和语法分析器的基础上,语义分析模块负责比赛技战术的分类与统计工作。下面分别介绍上述逻辑部件的设计与实现。

2.1词法分析器

根据第1节对球类比赛脚本描述语言语法结构的设计以及球类比赛描述的特点,我们对该描述语言的单词符号进行设计。单词符号有以下4种:

(1) 技术动作描述符:一般由四类字符组成,英文字母、数字、“+”和“-”。其中,英文字母是技术动作的编码,由一个编码映射表支持词法解释;数字用于描述技术动作发生的区域,该语言总是把比赛场地分割成若干个不同的区域;“+”和“-”是两个特殊符号,一般用于一些极其特殊的技、战术描述,如乒乓球中的“球”或“擦网”等。

(2) 间隔符:用于区分不同的技术动作,一般用“”表示。

(3) 保留字:为了明确标示比赛视频的开始和结束、每一小节或单局比赛的开始和结束、比赛中的暂停和开始,设计了一些保留字,如Match: Start、Match: End、Set1:Start、Set1:End等。

(4) 控制符:用于比赛中的比分调整,如ap03:05、*p02:05。

上述单词符号构成单词的词法分析状态转换描述如图4所示。

上述词法分析的算法如下:

算法1一个乒乓球脚本描述语言的词法分析算法

Input: 基于乒乓球比赛脚本简码的技战术输入码

Output: 描述语言完全码

Step1: 词法检测、运动区域补偿

Word=Read(code); // 输入一个单词符号//

Do while word‘ ’

If field(word, Last_position )=‘’ then break

else if field(word,start_position )and field(word,target_position )=

num then return //词法检测结束//

else if field(previous_word,target_position)=num

then field(word, start_position)=field(previous_word,target_position);

word=read(code);

enddo

Step2: 词法检测、动作补偿

Word=Read(code); //输入一个单词符号//

Do while word‘ ’

If field(word, style_position )‘ ’ then break;

else if word.artribute=offence and field(word,start_position )=right_domain //该动作为进攻动作//

then field(word, style_position)=‘z’;

else if word.artribute=offence and field(word,start_position )=left_domain //该动作为进攻动作//

then field(word, style_position)=‘f’;

else print(‘an error be found’);

word=read(code);

enddo

end

在上面的算法中,每一个单词由四位码构成,field(word, style_position)是单词的第一位,表示动作的方式;field(word, act_position)是单词的第二位,表示动作的类型;field(word, start_position)是单词的第三位,表示球的起点;field(word, target_position)是单词的第四位,表示球飞行的结束位置。该算法需要两次遍历输入码,因此算法的复杂性为O(L)。

2.2语法分析器

根据图1所示的脚本描述语言结构,它的文法G如图5所示:

其中:S为开始符号,表示一个输入码,T为非终结符,它可以是ε 字;C1为动作方式码,它只能产生一个表示动作方式终结符号;C2为动作分类码,它只能产生一个表示动作的终结符号;N1为动作起始区域,它只能产生一个表示区域的终结符号,N2为动作终止区域,它只能产生一个表示区域的终结符号。

例如:乒乓球比赛的输入码为:ZX16FB66T62 ZH23ZH33ZH33ZH31。它表示:正手发下旋球从1区到6区对方反手摆短从6区到6区反手挑到2区对手正手弧圈球从2区到3区正手弧圈球从3区到3区对手正手弧圈球从3区到3区正手弧圈球至对方1区后得分。

定理:文法G是LL(1)文法。

证明:为每一个非终结符求FIRST()集和FOLLOW()集如下:

FIRST(S)={w, ε}; FIRST(T)={w,ε}; FIRST(S’)

={,ε};FIRST(W)={w};

FOLLOW(S)={#}, FOLLOW(T)={ , #}; FIRST(S’)

={#}; FOLLOW(W)={, #}

由LL(1)文法的条件可知,G文法满足:

FIRST(αi) FIRST(αj)=;

FOLLOW(A) FOLLOW(A) = 

因此,G是LL(1)文法。

对文法G的语法分析可以采用递归下降法或预测分析表法。由于脚步描述语言中采用的文法符号可以自定义,符号的数量并不多,所以建议采用预测分析表来实现。下面是一个改进的预测分析表算法。

算法2基于预测分析的语法分析算法

首先把“#”,然后把文法开始符号“S”推进栈charstack;

把第一个输入符号读进a(char类型);

Flag = TRUE;

Do while (Flag)

{取栈(charstack)顶的元素放入X(char类型)中

If( X是文法中终结符号中的一个)

{If(X==a) Then

把下一个符号读进a

把栈顶的元素删除

else

Flag = FALSE; //词法错误

}

else if (X==’#’)

{if (X==a) then Flag = TRUE; //词法分析结束

else Flag = FALSE; //词法分析错误}

else

{

找出X在二维数组中的行数Row; //用二维数组表示预测分析表

找出a在二维数组中的列数Column; //CString m_strTemp[4[6]

If (m_strTemp[Row][Column]!=“ ” && m_strTemp[Row][Column]!=“E”) //E代表ε

把栈顶元素删除;

把m_strTemp[Row][Column]中的元素从后往前推入栈中;

else if (m_strTemp[Row][Column]==“E”) then 删除栈顶元素;

else Flag = FALSE;

}

}

算法2的执行时间为O(M*N),M和N分别为预测分析表的行和列下标。

3实验设计

根据第2节对球类脚本描述语言中词法、语法分析器的讨论,我们设计了两个实验:

实验一:基于球类脚本描述语言的词法分析器的设计与实现。

实验目的:通过本实验,学生掌握词法分析器的体系结构、各功能部件的设计与实现方法,为进一步学习语法分析器奠定基础,能够灵活掌握词法分析的原理和技术。

实验条件:图6给出了一个乒乓球台的分割图,用于表示击球的区域;表1和表2分别用于描述击球的方式和动作,这些描述信息可以供学生设计乒乓球脚本描述语言时参考。

实验要求:

 画出脚本描述语言的体系结构图,并定义各个功能模块的实现策略

 定义一个小型球类脚本描述语言,可以参照乒乓球比赛的技战术描述需求定义,具体形式如图6所示

 完成一个实验报告,分析具体输出结果的 语义

实验二:基于文法G的语法分析器设计与实现

实验目的:通过本实验,学生掌握语法分析器的体系结构、各功能部件的设计与实现方法,为进一步学习语义分析器奠定基础,能够灵活掌握语法分析的原理和技术。

实验条件:表3给出了预测分析表结构,学生根据所设计的描述语言填写具体预测动作。

实验要求:

 给出非简化G文法,对其进行消除左递归操作

 在实验一定义的球类脚本描述语言基础上设计具体的符号表

 手工完成预测分析表的构造,如表3所示,并用数组结构存储

 完成一个实验报告,分析具体输出结果的 语义

4结论

笔者在本文中设计了一个球类比赛脚本描述语言编译器实验,给出球类脚本描述语言的语法结构,包括词法和文法规则;给出了词法分析器和语法分析器实现需要的关键算法,为学生进一步实现奠定了基础;给出词法分析器和语法分析器实验模板,为学生完成实验规范了必要的格式和实验要求。

与传统的编译器实验相比,本文设计的编译器实验有较强的应用背景,更接近大学生的实际经历,能够激发绝大多数学生的学习热情,收到了比较好的教学效果。本实验并没有改变传统实验的本质,还是在高级语言编译器的实现技术基础上完成,只是对具体的语言背景进行了调整,同样可以达到系统掌握编译原理的教学要求,读者可以根据自己的实际情况,选择本实验作为教学补充内容。

自行设计脚本描述语言并实现其编译器是我们的一种尝试,该项工作基于我国的奥运攻关课题。在完成科研任务的同时,我们将对教学环节进行适当的补充和扩展,希望读者提出宝贵意见。

参考文献:

[1] 陈火旺,刘春林. 程序设计语言编译原理[M]. 3版. 北京:国防工业出版社,2000.

[2] 官尚元,张芝萍,徐立锋,等. C/C++代码自动生成脚本语言接口的实现[J]. 计算机工程,2005,31(8):102-104.

[3] 李爱萍,王家礼,段利国. ATLAS语言中大量关键词的处理方法研究[J]. 计算机工程与设计,2006,27(9):1581-1582,1600.

脚本语言范文5

论文摘要:和谐的人际交流与会话离不开礼貌原则。而转喻在认知语言学中是人们认识事物的一种重要方式。本文从言语行为转喻角度,探讨会话交流中礼貌原则是如何实现的,作者认为,正是借助于转喻,才使得会话中说话者与听话者在遵循礼貌原则的情况下。达成相互理解。

一引言和谐的人际会话离不开礼貌.

礼貌原则是会话中的个重要的原则貌通常被人们理解为说话人为了实现某一目的而采用的策略,比如增加或维护双方的和睦关系。出于礼貌。人们在交际中往往违反会话准则以含蓄地表达自己。礼貌是一种语用现象.在交际中通常被用来维护交际双方的面子。Leech(1983)指出,礼貌原则由六条准则(maxim)组成,分别为策略准则、慷慨准则、赞扬准则、谦虚准则、赞同准则和同情准则。Leech提出的礼貌原则概括地说,就是在所有条件相同的情况下,最大限度地表示出对他人的尊敬和友好。

以往对于礼貌原则的研究,更多是侧重于从语用学的角度。本文从认知语言学的言语行为转喻,对会话中的礼貌原则进行研究,旨在从言语行为转喻角度回答下面的问题:为什么说话者出于礼貌考虑而采用的看似与对方话语不关联的语言可以为听话者所理解?

二、转喻及言语行为转喻

在传统修辞学中,转喻是一种修辞格。但在现代的认知语言学中,转喻是人类重要的思维方式,是人类认识客观世界的重要手段.Panther&Thornburg(1999)把转喻分为三类:指称转喻、述谓转喻和言语行为转喻。指称转喻是用一概念代指另一概念.如:There are some newf aees in the classroom.(fJface代替people);述谓转喻是指用一种表达式来借代另一种表达式。如:用“1 wasa bleto finish my homework.”代替“I finished my homework.”:言语行为转喻是用一种言语行为来借代另一种言语行为。如:用疑问句“Can you passme thesalt?”代替祈使句“Pass methesalt.”言语行为转喻是由Thom burg和Panther(1997)提出的。他们从认知角度研究间接言语行为的转喻思维机制。提出言语行为脚本的概念,并认为言语行为是有结构的行为脚本,一个行为由三部分组成:(1)前段(BEFORE):指行为的准备阶段,它是行为的条件和动机;(2)核心及结果段(C0REanditsRESULT):这是行为的区别性特征,它表明行为的特点及成功完成一项行为的即时结果;(3)后段(AFTER):指行为所带来的后果(李勇忠,2003)。在行为脚本内存在着互为替代的关系,脚本内任何一部分都可根据交际的需要用于替代整个言语行为。因此,在言语交际过程中,转喻不再是词语的替代,而是激活事件整体或者事件整体激活事件部分的认知过程。

三、从言语行为转喻角度分析请求场景中的礼貌原则

在会话中,说话人是怎样采用转喻来实现礼貌原则的?并且说话人的礼貌话语如何被听话人理解。产生会话含义?笔者主要从请求场景分析会话者是如何运用转喻的思维遵循会话中的礼貌原则的。

在向他人发出请求时,可能伴随对他人面子的损害,影响话语的和谐。因此,说话人常常利用转喻的思维,使自己在提出请求时尽量符合礼貌原则。Thornburg和Panther(1997)描述了“请求”的言语行为脚本:BEFORE:H(听话人)有能力做某事,S(说话人)想要H做某事;COREanditsRESULT:S使得H有义务做某事:H有义务去做某事:AFTER:H会去做某事。(孙亚,2007)在这个脚本中,根据言语转喻的思维.任何一个场境都可以替代这个脚本.也就是说任何一个场境都可以使请求的脚本激活,从而使说话人达到请求的目的。我们下面来看几个例子:

A.I request you to give me a cup of coffee.

B.Can you give me a cup of coffee?

C.W ill you give me a cup of coffee?

D.The coffee smells very good.

这四句均可以请求他人为自己拿咖啡。对照请求脚本,A句激活了脚本中的核心场境,说话者使得听话者有义务做某事,直接达到了请求的目的,在表达请求时最不容易误解,但它违背了礼貌原则中的策略原则,直接命令他人。极大损害了别人的面子B句不是直接的命令而是询问。因此B比A更符合礼貌原则中的策略原则,即使听话人受损最小。它从字面上看是询问听话者的能力,属于请求脚本中的前场境,询问听话人有没有能力做某事。它可以激活整个请求行为脚本.达到使听话人去做某事的效果。因此,在遵循礼貌原则中的策略原则,在保全听话人的面子的情况下,通过言语行为转喻.B句激活了请求脚本.一样达到了表达请求的目的。

同样,C句是委婉的问句。它是问听话者将会给说话者拿杯咖啡吗。从字面上看没有命令的意味,使听话者受损较小。这句话可达到请求效果,是因为它是就后场境进行提问,用脚本的后场境,即听话人会去做某事来代替整个请求脚本。这样可以最大限度地使听话者受损最小,遵循对话中的礼貌原则.不至于破坏会话的和谐。句最为礼貌。它从字面上看是叙述事实句,不是施为句.它是这四个句子中最符合礼貌原则中的策略原则的。它根本没有损害听话者。在一些情况下,比如听话者是咖啡制作者的情况下,它还可以看作是对听话者的一种赞美,更符合了礼貌原则中的赞美原则。它不在请求脚本的三个场境之内,而是请求场境外的话语。听话者需更多的语用推理,才能认识到说话者的请求。在具体语境中,它可起到请求的作用,激发间接言语行为。比如说话者对刚煮了咖啡的听话者要求喝咖啡时,用“咖啡真香”表示请求这样.场境外的话语也激发了请求脚本,实现请求行为。这句请求也最为礼貌,对听话者进行了赞美。但是。这句话离核心场境的距离较远.转喻的连接力度比其他几个例子都要弱。因此,最易被误解。若我们换一个场境,其表请求的效果就全无了,如说话者是在评论咖啡的味道时。这句话仅仅是一句赞美。我们可以用图l表示

因此,D句既可以激活赞美脚本.又可以激活请求脚本。该句不是代表一个请求,而是指向一个请求。“代表和指向的区分显示了一个语句所表示场境的那个部分与该场境的转喻连接力度是有强弱差异的”(隋丽,2007)。可见.请求时的礼貌原则是通过言语行为转喻而实现的。通过运用请求脚本中的不同场境激活整个请求脚本.从而礼貌地达到请求的目的。然而,不同的言语场境在言语转喻中的代表作用和转喻连接力度是不同的。脚本核心段的转喻连接力度最大,离核心段越远,转喻连接力度越弱.它在代替整个脚本时。听者需要做出较大的语用推理。离场境核心越远,这种指代作用越容易受到外在语境的影响,转喻关系语境的依赖性越强。而与转喻连接度相反,当一个请求话语离请求脚本的核心段越远时,它越遵守礼貌原则.对于听话者面子造成的损害越小.而当请求话语与离核心段越近,越是违背了礼貌原则。所以,在表请求时,言语行为转喻的连接强弱与礼貌的强弱是反向的,呈此涨彼伏的关系。越是能代表请求脚本的话语,其礼貌性也就越弱,而越是位于请求脚本边缘的话语,其礼貌性越强

脚本语言范文6

关键词:航天嵌入式电子系统;虚拟仪器;测试语言;ATLAS;自动测试

Research of Space Embedded Electronic Systems Oriented Test Language

QIAO Yongkang,WANG huping,WANG haoju

(Xi′an Micro-electronic Research Institute,Xi′an,710075,China

Abstract:Test language are mainly divided by two category:instrument-oriented test language and signal-oriented test language.By analysing theabove two languages′ feature,and combines the feature of our country′s test systems of space embedded electronic system,this paper puts forward a new space embedded electronic system oriented test language which is based on virtual instruments.This language mainly inherits from ATLAS key action words,and is resolved into documents and configuration file.Finally this paper describes the test language′s coding pattern and its execution model.

eywords:space embedded electronic system;virtual instrument;test language;ATLAS;automatic test systemオ

随着我国航天技术的发展,航天嵌入式电子系统的复杂度不断增加,可靠度要求越来越高,产品研制周期也越来越短。这就给航天嵌入式电子系统的测试提出了新的挑战。在新一代自动测试系统中,自动测试语言――如ATLAS语言,在系统级仿真、测试与验证中起着非常重要的作用,人和机器均可翻译的自动测试语言不但可以作为用户与测试人员沟通的桥梁,而且可以编译成可执行测试代码,在目标机器上运行。

本文通过分析面向信号和面向仪器2类测试语言的优缺点,结合我国航天嵌入式电子系统测试系统的特点,提出一种基于虚拟仪器的面向航天嵌入式电子系统的测试语言,目的是将测试过程中的各种资源和功能单元进行组态,并将其涵盖于既定的测试框架中,实现“积木式”软件开发。同时,该测试语言还融入了软件工程的思想,加入测试文档和测试程序的自动生成功能,进一步提高了测试系统开发效率。

1 测试语言综述

测试语言大体上可分为2类:面向信号的测试语言和面向仪器的测试语言。

面向仪器的测试语言,如LabView主要通过直接调用仪器驱动实现测试过程,面向仪器的测试语言与具体仪器紧密相关,因此程序移植比较困难,可重用性也比较差。而面向信号的测试语言,如ATLAS(Abbreviated Test Language for All Systems),则主要通过对信号的操作(施加激励信号,测试响应信号)来映射底层测试仪器的操作,达到与仪器无关的目的,因此面向信号的测试语言具有较好的可移植性和可重用性。ATLAS语言作为一种面向信号的测试语言,还采用了类似于英语自然语言的语法格式,使得它成为一种人机均可翻译的测试语言,既可以作为工程师和测试人员之间交流的文档规范,也可以经编译后作为测试程序执行,鉴于此,ATLAS成为美国国防部首推的军方测试语言。

但由于ATALS语言是一种接近于英语自然语言的测试语言,并不适合国内用户使用;同时,为了能够满足各个方面的测试需求,IEEE组织不断对ATLAS进行修改,使得其语句非常臃肿,仅语言关键字就有1 000个(IEEE ATLAS STD-95),使得ATLAS语言的培训费用十分高昂;再者,ATLAS的编译器价格极其昂贵,使得其优势难以在国内测控领域发挥。

而另一方面,面向仪器的测试语言却在商业领域取得了长足的发展,鉴于仪器互换的问题,NI和惠普等公司联合推出了一系列的仪器驱动标准:VISA(Virtual Instrument Software Architecture)和IVI(Interchangeable Virtual Instrument)。VISA是VPP(VXI plug & play)联盟于1996年2月推出的新一代仪器I/O标准,VISA具有与仪器硬件接口无关的特性,即VISA是面向器件功能,而不是面向接口总线。使用它控制VXI,GPIB,RS 232,PXI等仪器时,不必考虑接口总线类型。如图1所示。

为了进一步提高仪器驱动程序的执行性能,达到仪器的互换,1998 年由9家公司成立的IVI基金会,在VXI-PNP 技术基础上为仪器驱动程序制定新的编程接口,在VISA 标准驱动程序上插入VXI-PNP 框架结构和类驱动程序,它通过定义类驱动器和专用驱动器实现了部分通用仪器之间的互换,缩短了程序开发时间,提高了系统的运行性能。如图2所示。

针对于此,IEEE推出ATLAS 2版本,它整合了VISA,IVI和面向对象技术,给ATLAS语言注入了新的活力。总体来讲,面向信号的语言和面向仪器的语言各有优势,面向仪器的语言具有直观,易用的特点;而面向信号的语言编写的测试程序具有较好的可重用性和仪器可互换性。

2 航天嵌入式电子系统测试需求

航天嵌入式电子系统测试主要是针对航天专用的三模冗余或两模冗余嵌入式电子计算机,这些系统在出厂前必须进行全面的测试,测试主要可分为内部测试和外部测试,内部测试主要是指那些无需借助外部测试仪器,而可以直接通过嵌入式系统内部执行测试程序所进行的测试,如CPU测试、ROM测试、RAM测试、端口测试等;外部测试则是指需要外部测试仪器配合所进行的测试,如开关量测试、串口测试、计数器测试、AD/DA测试等。

航天嵌入式电子系统测试的传统方法为:根据测试需求分别设计内部测试程序和外部测试仪器及测试程序;嵌入式电子系统和外部测试系统分别上电初始化后,外部测试系统向嵌入式电子系统上传测试程序(嵌入式系统本身的ROM内固化有1个RTOS);嵌入式系统加载测试程序后向外部测试系统发握手信号,并等待外部激励;外部测试系统向嵌入式系统发送激励信号,嵌入式系统接收激励并做出响应,如此循环下去。

为提高测试系统可重用性和测试的准确性,开展了面向航天嵌入式电子系统的测试技术研究,并对一些测试模块(软件)进行了标准化工作,如CPU测试、ROM测试、RAM测试、AD/DA测试等;同时还采用标准的基于PXI的测试仪器,以达到仪器可重用,系统可配置的目的。

3 面向航天嵌入式电子系统的测试语言

面向航天嵌入式电子系统的测试语言不但要解决外部测试问题还要解决内部测试问题,这里在融合面向信号测试语言与面向仪器测试的各自优势的基础上,通过系统建模的方法,定义了适用于航天嵌入式电子系统测试应用的测试语言,以达到测试系统的可重用及可配置的目的。

系统建模包括3个方面:信号建模,UUT(Unit Under Test,被测对象)建模和测试仪器建模3个方面。信号建模主要针对航天嵌入式电子系统所常见的接口信号类型及特点,定义出一组常见信号,用户可以通过参数设定,达到描述UUT或测试仪器接口信号特征的目的;UUT建模主要是通过对UUT外部接口,内部组件参数及体系结构的描述,达到内部测试测试程序的自动装配,UUT建模同时支持黑盒建模(仅描述其外部接口)和灰盒建模(同时描述其内部体系结构及组件参数);测试仪器建模则通过描述测试仪器的本质信号特征及关键接口特征,并最终映射实际仪器(所建立的测试仪器模型与实际仪器可能存在一对多或多对一的对应关系),达到测试程序可重用,仪器可更换的目的。

因此,本文所描述的面向航天嵌入式系统的测试语言主要包括5个部分:

信号描述及定义通过定义一组航天嵌入式电子系统常见的基本信号,如数字信号(包括开关量和脉冲量)、模拟量(DC,AC)等。用户可通过配置信号参数设定信号;

被测对象描述通过描述被测对象的接口关系,并建立状态机功能模型,仿真被测对象的功能模型,并自动生成内部测试程序。在未建立状态机功能模型时,系统可以将被测对象作为一个黑盒考虑,此时不生成被测对象内部测试程序;

测试仪器描述通过描述测试仪器,达到建立测试需求模型,并最终与1个或多个实际测试仪器相映射,测试仪器本身相当于一个信号描述集合,通过定义虚拟测试仪器,提高了测试仪器的可互换性和测试程序的可重用性。这样既保留了面向仪器测试语言的直观性和易用性,也提高了程序的可重用性;

连接关系描述连接关系描述定义了UUT与测试仪器之间的连接关系,连接关系描述还可以包含适配器描述,使得测试系统的层次性更加明显,也更有用;

测试策略描述测试测量是测试语言中的最重要的部分,通过一系列的测试动作:apply,measure,verify等,控制测试仪器完成测试过程。测试策略描述语句选择提取ATLAS关键测试语句:单信号语句、多信号语句、总线操作语句、定时和事件相关语句,并对其进行了一定的改进,使之更直观,且更易于实现到图形化语言的转换。测试语言的具体格式如下:

Signal//信号描述

信号类型(模拟/数字/脉冲量/DC电源等) 信号名

{

信号参数:如Voltage range: 0..5v;

}

UUT被测对象名

{

信号类型(TTL,模拟信号,…,自定义类型):针脚名1,针脚名2,…,针脚名n;

Input(输入引脚):针脚名1,针脚名2,…,针脚名n;

Output(输出引脚):针脚名1,针脚名2,…,针脚名n;

…//被测对象状态机描述,此功能尚未添加

Memo(说明):“”;

}

仪器类名(如开关量测试仪器,1553B测试仪器,A/D,D/A等)测试仪器名

{

信号类型(TTL,模拟信号,自定义类型):针脚名1,针脚名2,…,针脚名n;

Input(输入引脚):针脚名1,针脚名2,…,针脚名n;

Output(输出引脚):针脚名1,针脚名2,…,针脚名n;

…//各仪器所特有的属性及配置

}

CONNECTION连接关系描述名

{

仪器端引脚(输出)=>UUT端引脚(输入)

仪器端引脚(输入)

… }

TEST_ITEM测试项名//测试策略描述

{ 测试动作描述语句 }

下面是一个典型的测试策略描述:

TEST_ITEMitem1

{

Apply(VDout1.Dout,0x01;//施加激励

Verify(VDin1.Din,0x00,0 ms;//测试验证响应

Apply (VDout1.Dout,0x00;

Verify (VDin1.Din,0x00,0 ms;

Apply (VDout1.Dout,0x10;

Verify (VDin1.Din,0x00,0 ms;

Apply (VDout1.Dout,0x11;

Verify (VDin1.Din,0x01,0 ms;

}

每一个TEST_ITEM(也即测试策略描述)对应于测试框架中一个测试细则,测试细则是图形化的测试执行界面的一个子界面。

测试语言经编译/解释后生成测试框架配置文件和测试文档,用户通过加载测试框架配置文件,设置执行次数和选择测试项目,系统即开始进行测试,测试界面主要分两部分:测试总览和测试细则,其中测试总览主要采用文本框的形式显示当前的测试记录,包括当前正在进行的测试项目和捕获的错误信息等;测试细则是由一个或多个图形化的详细测试分项构成。

4 结 语

通过研究国内外测试语言发展现状,结合面向信号测试语言和面向仪器测试语言的优势,采用软件工程的思想,建立了基于虚拟仪器的面向航天嵌入式电子系统的测试语言模型,为以后的进一步研究奠定了基础。基于虚拟仪器的测试语言还处于研究的初级阶段,仍有不完善的地方,需要进一步改进。

参 考 文 献

[1]IEEE Std.771-1998.IEEE Guide to the Use of the ATLAS Specification,1998.

[2]IEEE Std.716-1995.IEEE Standard Test Language for all Systems Common/Abbreviated Test Language for All Systems (C/ATLAS,1995.

[3]于劲松,李行善.下一代自动测试系统体系结构与关键技术[J].计算机测量与控制,2005,13(1:1-3.

[4]刘勇,迟华山,许爱强.新一代通用测试语言――ATLAS 2000[J].国外电子测量技术,2006(3:56-59.