当前位置:七道奇文章资讯编程技术VC/C++编程
日期:2011-03-22 13:54:00  来源:本站整理

手把手教你写脚本引擎(二)——号令脚本[VC/C++编程]

赞助商链接



  本文“手把手教你写脚本引擎(二)——号令脚本[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

这次要实现的是一个情势最简单的脚本.这种脚本唯一号令、标号及跳转构成,看起来就跟汇编一样,不过好是对比好读的.固然这种脚本语言的语法非常简单,但是最基本的要素还是要有的.

作为一个脚本引擎,为了可以在各种各样的符合的宿主程序中利用,脚本本身最好不要触及到具体的范畴.当然,假如这个脚本被成立的目的仅仅是为了某个范畴的话,那就无所谓了.因此,一个脚本引擎需求一个查抄和运行代码的机制、运行时环境的保护以及一个功效充足利用的插件系统.一个完好的脚本引擎至少需求以下部件:

1、代码数据构造.代码的数据构造用来存放经过解析的脚本代码.事实上注释型的脚本引擎,也就是边履行边解析代码字符串的脚本引擎是对比难做,并且效率也不高的.脚本代码经过事前解析,可以查抄一出一些在运行之前就可以够查抄的错误.并且我们把脚本的代码重新处理成一个数据构造之后,履行也变得越发简单掌握.

2、运行时环境.运行时环境用于存放脚本在运行的历程中产生的数据,比方仓库、变量和状况信息等.关于一个已知的代码,差别的运行时环境代表差别的脚本履行流程.为了让脚本可以同时(但不一定是并发)履行,将运行时环境独立出来也就显得必要了.

3、语法解析器.语法解析器用于将代码转换成等价的代码数据构造,并在发现代码出错的时刻输出符合的错误信息.

4、插件.插件是脚本与外部环境交互的途径之一.有了插件系统,我们可认为脚本引擎增添额外的、跟脚本引擎无关的功效,比方文件操作、屏幕输入输出等.假如必要的话,插件系统可以将脚本引擎与范畴信息彼此断绝,系统将变得越发简单利用.

5、虚拟机.虚拟机用于履行代码并返回呼应的后果.我们在利用脚本引擎时直接跟虚拟机举行交互,虚拟机则调和上述4个部件的彼此合作.

在知道了这些之后,我们便可以开始开辟一个基于号令的脚本引擎了.为了越发具体以及明确地报告开辟历程以及原理,在这里将构造一门简单的基于号令的语言.一门语言至少还是要有分支和循环的.但是为了简化,我们将分支和循环分化成判断与跳转.语言可以安闲增添标号,标号将作为跳转的目标而呈现.这门语言利用以下语法:

<值>:值可以是整数、小数、字符串或名字.

<名>:名可以是变量名大概标号等,利用字母与下划线开始,后接不定数目的字母、下划线与数字.

<名>::名字后接冒号代表一个标号.这个标号代表着一个指令的位置,用于指定跳转目标.

goto <名>:goto用于直接跳转到一个位置持续履行.

set <名> <值>:set用于将一个值赋值给一个指命名字的变量.这个变量不存在则成立.

opcode <名> <值> <值>:opcode可以是add、minus、mul、div、idiv或mod.这6个号令将两个值举行加、减、乘、除、整除及求余,并将后果赋值给一个指命名字的变量.这个变量不存在则成立.

if <值>[ opcode <值>] goto <名>:if用于判断一个条件并在条件满意被满意的时刻跳转到指定的地方.条件可以是一个值,这个值必须是整数,并且在这个值不为0的时刻条件被满意.条件也可以是一个对比,这个时刻opcode可以是is、is_not、less_than、greater_than、less_equal或greater_equal,辨别在第一个值等于、不等于、小于、大于、小于或等于、大于或等于第二个值的时刻满意条件.

exit:完毕履行

<名> <值>*:假如号令名称不是上面的5种的此中一种的话,那么这个号令将被传送给插件举行履行.这个时刻,号令可以有肆意的参数.

在这种语法下,我们可以假定宿主程序给了我们write、writeln和read号令用于输入输出,并得到一个判断输入的数字能否质数的程序:

write "请输入一个数字:"

read Number
 if Number less_then 2 goto FAIL
  if Number is 2 goto SUCCESS
 set Divisor 2
LOOP_BEGIN:
 if Number is Divisor goto SUCCESS
 mod Remainder Number Divisor
 if Remainder is 0 goto FAIL
 add Divisor Divisor 1
 goto LOOP_BEGIN
SUCCESS:
 writeln Number "是质数."
 exit
FAIL:
 writeln Number "不是质数."


  以上是“手把手教你写脚本引擎(二)——号令脚本[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • 手把手教你若何巧妙删除那些删不掉的视频文件
  • 手把手教你如安在Ubuntu下安装配置vsftpd
  • 手把手教你从注册表排除苹果工具条
  • 有问题?手把手教你当Windows 7专家
  • 手把手教你在苹果笔记本上装Win7系统
  • 五分钟包学会 手把手教你用U盘装Win8
  • 手把手教你玩转Windows8
  • 怎么去掉迅雷7上的广告|手把手教你去迅雷7广告或右侧新闻
  • <b>手把手教你写脚本引擎(三)——简单的高级语言(1,基本原理)</b>
  • <b>手把手教你写脚本引擎(四)——简单的高级语言(2,处理语法)</b>
  • <b>手把手教你写脚本引擎(五)——简单的高级语言(3,标记表)</b>
  • <b>手把手教你写脚本引擎(一)——挑选语言的特点</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .