范文大全

脚本语言范例,脚本语言

作者: 猫宁 发布日期:2024年03月05日

脚本语言范例篇1

  【关键词】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

  (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.

脚本语言范例篇2

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

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

  礼貌原则是会话中的个重要的原则貌通常被人们理解为说话人为了实现某一目的而采用的策略,比如增加或维护双方的和睦关系。出于礼貌。人们在交际中往往违反会话准则以含蓄地表达自己。礼貌是一种语用现象。在交际中通常被用来维护交际双方的面子。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)。可见。请求时的礼貌原则是通过言语行为转喻而实现的。通过运用请求脚本中的不同场境激活整个请求脚本。从而礼貌地达到请求的目的。然而,不同的言语场境在言语转喻中的代表作用和转喻连接力度是不同的。脚本核心段的转喻连接力度最大,离核心段越远,转喻连接力度越弱。它在代替整个脚本时。听者需要做出较大的语用推理。离场境核心越远,这种指代作用越容易受到外在语境的影响,转喻关系语境的依赖性越强。而与转喻连接度相反,当一个请求话语离请求脚本的核心段越远时,它越遵守礼貌原则。对于听话者面子造成的损害越小。而当请求话语与离核心段越近,越是违背了礼貌原则。所以,在表请求时,言语行为转喻的连接强弱与礼貌的强弱是反向的,呈此涨彼伏的关系。越是能代表请求脚本的话语,其礼貌性也就越弱,而越是位于请求脚本边缘的话语,其礼貌性越强

脚本语言范例篇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文件,添加以下语句:

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

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

  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

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

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

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

脚本语言范例篇5

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

  中图分类号: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); //输入一个单词符号//

  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’);

  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; //词法分析错误}

  找出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.

    热门推荐

    猜您感兴趣

    相关文章

    上一篇:安全知识的重要性,安全的重要性
    下一篇:学习经验总结,总结经验
    

    Copyright © 2022-2024 www.juzici.com

    All right reserved. 猫宁早安 版权所有

    鲁ICP备15008254号

    返回顶部重选