脚本解析器

脚本解析器

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      处理流程

整体处理流程如下:

时间: 2024-08-02 15:53:28

脚本解析器的相关文章

ubuntu10.04 默认脚本解析器更改(./sdk.unpack: 2: source: not found)

ubuntu10.04 系统默认的SH(脚本解析器)为dash,可以使用 ls -l /bin/sh 命令查看. dash解析器的解析效率很高,但是功能不如bash那么强大,因此,在解析有些命令时,会出现找不到的错误. 修改默认脚本解析器为bash,方法如下: 1.命令行输入:sudo dpkg-reconfigure dash 2.选择

optparse 模块—— 命令行选项的解析器

15.5 optparse 模块--  命令行选项的解析器 注意:从2.7版本后不再使用:optparse模块不推荐使用,python不再更新该模块,后续的发展将推荐使用argparse模块. 支持python2.3及以上版本 optparse模块比旧的getopt模块具有更方便.更灵活.功能更强大的解析命令行选项的库.optparse使用一种更加声明式的命令行解析风格:你创建一个OptionParser实例,填充选项,并解析命令行.optparse允许用户指定选项,使用传统的GNU/POSIX

浩哥解析MyBatis源码(十一)——Parsing解析模块之通用标记解析器(GenericTokenParser)与标记处理器(TokenHandler)

原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/6724223.html 1.回顾 上面的几篇解析了类型模块,在MyBatis中类型模块包含的就是Java类型与Jdbc类型,和其间的转换处理.类型模块在整个MyBatis功能架构中属于基础组件之一,是提前注册到注册器中,并配置到Configuration中备用. 从这一篇开始解析Parsing解析模块,这个模块不同于Type模块,这个模块更像是一套工具模块.本篇先解析通用标记解析器Gene

PHP Simple HTML DOM解析器

一直以来使用php解析html文档树都是一个难题.Simple HTML DOM parser 帮我们很好地解决了使用 php html 解析 问题.可以通过这个php类来解析html文档,对其中的html元素进行操作 (PHP5+以上版本). 解析器不仅仅只是帮助我们验证html文档:更能解析不符合W3C标准的html文档.它使用了类似jQuery的元素选择器,通过元素的id,class,tag等等来查找定位:同时还提供添加.删除.修改文档树的功能.当然,这样一款强大的html Dom解析器也

解析器解析全过程

首先,我们先让大家看一下python解析器的全流程: 我们编辑器编写好源代码->保存成文件.如果源代码中有编码声明而且用的编辑器支持该语法,那么该文件就以相应的编码方式保存在磁盘中. 注意:编码声明和源文件的编码不一定是一致的,你完全可以在编码声明中声明编码为utf-8,但是用GB2312来保存源文件.当然,我们不可能自寻烦恼,故意写错,而且,好的IDE也能强制保证两者的一致性,但是,如果我们用记事本或者editplus等编辑器来编写代码的话,一不小心就会出现这种问题的. 得到一个.py文件后,

javascript编写自己的模板解析器

编写自己的模板解析器 因为最近在研究artTemplate,ejs,baaiduTemplate等模板,所以,一时兴起,自己也写了个简单的模板解析器. 一个最基本的模板解析器,需要有什么功能呢? 读取变量值 解析模板语句 按照这个思路,我们编写一个简单的解析器,需求如下: 读值: <%= 变量名 %> 语句支持: <% if( type == 1 ){ %> good! <%}%> 总体来说,就是如果模板如下: 我叫:<%= name %> <br/&

SpringMVC与Freemarker的集成以及多视图解析器配置

一.Spring MVC视图解析器 视图解析器的工作流程大致是这样的:Controller的某个方法执行完成以后,返回一个视图(比如:listUser),视图解析器要做的工作就是找到某个对象 来完成视图的渲染,或者跳转到其他的逻辑视图.这里的渲染对象通常就是我们的jsp文件或者我们下面用的Freemarker(例如listUser.jsp或者 listUser.ftl).渲染完成以后,将解析结果发送到客户端浏览器. 下面介绍一下本文需要用到的解析器(更多解析器资料,请参考 http://e-fr

XML 解析器

所有现代浏览器都内建了供读取和操作 XML 的 XML 解析器.解析器把 XML 转换为 XML DOM 对象 - 可通过 JavaScript 操作的对象. 解析 XML 文档为DOM对象 方法一: var xmlhttp=null; if (window.XMLHttpRequest){// code for IE7+, Firefox, Chrome xmlhttp=new XMLHttpRequest(); }else{// code for IE6, IE5 xmlhttp=new A

设计模式---领域规则模式之解析器模式(Interpreter)

前提:领域规则模式 在特定领域内,某些变化虽然频繁,但可以抽象为某种规则.这时候,结合特定领域,将问题抽象为语法规则,从而给出该领域下的一般性解决方案. 典型模式 解析器模式:Interpreter 一:解释器模式Interpreter (一)概念 一些应用提供了内建(Build-In)的脚本或者宏语言来让用户定义他们能够在系统中进行的操作.Interpreter模式的目的就是使用一个解释器为用户提供一个一门定义语言的语法表示的解释器,然后通过解释器来解释语言中的句子.Interpreter模式