标签:
脚本解析器
命令脚本解析器,自创建一种脚本语法,解释执行它。目前脚本形式类似于命令,没有变量类型的概念,关键字为=、$()、if、else、while、break、continue ,解释与C语言一样。
代码上传网址:http://git.oschina.net/wjh_2010/CommandScript
类型:无类型,全为字符串看待。
作用域:当前大括号中,以及所有子大括号中,退出当前大括号则清除变量。
获得变量值:使用$(变量名)的形式获取,如果指定不存在的变量则返回““,否则返回实际的字符串值。
变量赋值:使用“=“号,如变量1=aaa
判断变量相当、大于、小于:使用命令判断
真假判断:字符串为””为假,其他情况为真。
一对大括号中的内容为一个执行体,一个执行体分为函数执行体和条件执行体。
函数执行体:大括号前面如果有function声明的为函数执行体。其形式为:
function 函数名称
{
执行体内容
}
条件执行体:除函数执行体外为条件执行体。执行体是否被执行有如下几种情况:
a. 依赖于紧邻上一行的命令返回值,如果为真则执行。
b. 如果紧邻上一行有else声明,则上一个执行体不执行则判断是否执行本块(无判断命令为真),上一个执行则不执行本块,忽略当前判断命令。
c. 其他情况,则必须执行。
条件执行体执行后需要忽略后面所有的else执行体;
如果没有执行,则需判断后面的else执行体是否需要执行。
使用while声明一个循环体开始。while后可接命令,表示命令成功则执行,不成功则忽略本执行体。
退出循环的形式有如下几种:
a. While 后的命令返回空
b. 在循环体内部执行break操作。
使用if 声明一个条件判断,后需要接命令。当前命令执行成功则执行紧邻的命令;如果执行失败,则忽略紧邻的执行块,并循环匹配的else。
根据规则,目前需要的关键字如下:
=、$()、if、else、while、break、continue
=:赋值
$():取值
If:条件判断
Else :与if匹配
while: 循环体声明
Break:打断循环
Continue:继续循环
当前命令执行为真,则进入紧邻的执行体,否则跳转到else。
Else:前一段执行体如果执行为真,则忽略当前执行体。
Break:跳出循环;
Continue:跳出当前循环,继续循环;
变量只分为全局变量和局部变量,分别在两个列表中存储。对于静态变量,翻译时之间加前缀变成全局变量,只是该变量只有在运行时遇到才将其放入全局变量列表中。
局部变量以栈式存储。遇到左大括号放入标志位V0,然后将将局部变量放入。遇到右大括号,则按栈的方式是否变量,直到释放到V0。如下图:
执行到1{时,放入标志变量V0,然后放入V1和V2;
执行到2{时,放入标志变量V0,然后放入V3、V4和V5;
执行到3{时,放入标志变量V0;
执行到3}时,取出标志变量V0;
执行到2}时,取出V5、V4、V3和标志变量V0。
执行到1}时,取出V2、V1和标志变量V0。
变量首先在局部变量列表中查询,如果没有查到,则在全局变量中查询。如果都没找到,则增加一个局部变量,并置空值。
整体处理流程如下:
标签:
原文地址:http://blog.csdn.net/wjh_monkey/article/details/51336484