前面对reXX进行了简单的介绍,下面谈点相对比较深入的东西
external data queue 对应我们已知的栈
pull,push,queue
pull 取数据,从栈顶
push 压入数据从栈顶
queue 压入数据从栈底部
如果当前的EXTERNAL DATA QUEUE没有数据可取的话,在TSO/E环境,PULL会从一下设备获取数据:
terminal (TSO/E foreground )
Input stream (systsin(TSO/E background )
使用的方式为:
newstack
push xx
push xx
queue xx
pull x
pull b
delstack
address 就是对应一个指令的运行环境,或是解释器环境
address environment_name
address value exvironmentEXpression
address
address environment commandEXp(一次有效的环境)
interpret expression
把express的值当做源代码来执行,提供了一种构造动态命令的方式
如
a="say b"
b=" say hello world"
interpret a b
output b hello world
指令upper 将表达式转换成大写形式
UPPER VARIABLELIST
字符串解析(重点掌握内容)
语法如下:
PARSE [UPPER] VALUETOPARSE [TEMPLATE]
VALUETOPARSE 的形式有:
arg *
external
numeric
pull
source
value [expression ] with *
var variable *
version
带星号的为常用的形式
template 字符串拆分的模板,和我们通常说所的匹配模式有点类似
语法形式:
varlist division_pattern varlist division_pattern
拆分是按照从左至右拆分,默认的分隔符为空格
处理的步骤如下:
按照template的pattern把源字符parse一个个子字符串,如果有多个pattern,则从左至右parse
对每个字符串parse into words操作,这一步将上一步产分的子字符串放到不同的变量列表中
其中divisionpattern不会被保留
举例说明
parse value "abc.ef.com" with a "." b ".com"
拆分步骤:
使用第一个dot 将字符串parse abc ef.com
a=abc
第二步 使用第二个.com 将 ef.com parse成 ef
b=ef
因此结果为
a=abc
b=ef
在template中使用comma时需要注意,她仅对arg有效,其他的情况下, 从第二个template开始,所有template都被赋予空值
如
parse value "abc.ef.com" with a ',' b ',' c
a=abc
b=ef
c=com
parse value "abc.ef.com" with a,b,c
a=abc.ef.com
b=
c=
在着可以用(.) 用作占位符
如:
parse value "a b cd" a b c
a=a
b=b
c=cd
parse value "a b cd" a . c
a=a
c=cd
好处是节省变量空间
rexx在解释命令时,如果一个token后没有=也没有:,则reXX会认为该命令为外部命令(address 除外)
阅读(2282) | 评论(0) | 转发(0) |