码迷,mamicode.com
首页 > 其他好文 > 详细

脚本解析器

时间:2016-05-13 02:57:20      阅读:201      评论:0      收藏:0      [点我收藏+]

标签:

脚本解析器

1      概述

命令脚本解析器,自创建一种脚本语法,解释执行它。目前脚本形式类似于命令,没有变量类型的概念,关键字为=、$()、if、else、while、break、continue ,解释与C语言一样。

代码上传网址:http://git.oschina.net/wjh_2010/CommandScript

2      规则

2.1    变量

类型:无类型,全为字符串看待。

作用域:当前大括号中,以及所有子大括号中,退出当前大括号则清除变量。

获得变量值:使用$(变量名)的形式获取,如果指定不存在的变量则返回““,否则返回实际的字符串值。

变量赋值:使用“=“号,如变量1=aaa

判断变量相当、大于、小于:使用命令判断

2.2    真假判断

真假判断:字符串为””为假,其他情况为真。

2.3    执行体

一对大括号中的内容为一个执行体,一个执行体分为函数执行体和条件执行体。

函数执行体:大括号前面如果有function声明的为函数执行体。其形式为:

function 函数名称

 {

执行体内容

}

条件执行体:除函数执行体外为条件执行体。执行体是否被执行有如下几种情况:

a. 依赖于紧邻上一行的命令返回值,如果为真则执行。

b. 如果紧邻上一行有else声明,则上一个执行体不执行则判断是否执行本块(无判断命令为真),上一个执行则不执行本块,忽略当前判断命令。

c. 其他情况,则必须执行。

条件执行体执行后需要忽略后面所有的else执行体;

如果没有执行,则需判断后面的else执行体是否需要执行。

2.4    循环

使用while声明一个循环体开始。while后可接命令,表示命令成功则执行,不成功则忽略本执行体。

退出循环的形式有如下几种:

a. While 后的命令返回空

b. 在循环体内部执行break操作。

2.5    条件判断

使用if 声明一个条件判断,后需要接命令。当前命令执行成功则执行紧邻的命令;如果执行失败,则忽略紧邻的执行块,并循环匹配的else。

3      关键字

根据规则,目前需要的关键字如下:

=、$()、if、else、while、break、continue

=:赋值

$():取值

If:条件判断

Else :与if匹配

while: 循环体声明

Break:打断循环

Continue:继续循环

3.1    执行流程

技术分享

当前命令执行为真,则进入紧邻的执行体,否则跳转到else。

Else:前一段执行体如果执行为真,则忽略当前执行体。

Break:跳出循环;

Continue:跳出当前循环,继续循环;

 

4      变量处理

变量只分为全局变量和局部变量,分别在两个列表中存储。对于静态变量,翻译时之间加前缀变成全局变量,只是该变量只有在运行时遇到才将其放入全局变量列表中。

4.1    局部变量

局部变量以栈式存储。遇到左大括号放入标志位V0,然后将将局部变量放入。遇到右大括号,则按栈的方式是否变量,直到释放到V0。如下图:

技术分享

执行到1{时,放入标志变量V0,然后放入V1和V2;

执行到2{时,放入标志变量V0,然后放入V3、V4和V5;

执行到3{时,放入标志变量V0;

执行到3}时,取出标志变量V0;

执行到2}时,取出V5、V4、V3和标志变量V0。

执行到1}时,取出V2、V1和标志变量V0。

4.2    查询变量

变量首先在局部变量列表中查询,如果没有查到,则在全局变量中查询。如果都没找到,则增加一个局部变量,并置空值。


 

5      处理流程

整体处理流程如下:

技术分享


脚本解析器

标签:

原文地址:http://blog.csdn.net/wjh_monkey/article/details/51336484

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!