3.5.4 条件语句和循环语句
宏命令中提供了类似程序设计语言中的“条件语句”和“循环语句”结构,用以控制和改变宏文件中命令运行的次序。
1.条件语句
要改变宏文件中命令执行的顺序,可以通过条件判断语句实现,其句法与FORTRAN 77的if-then-else语句相似但不是完全相同:
IF expr
commands
ELSEIF expr
commands
ELSE
commands
ENDIF
其中expr表示逻辑表达式,其形式为:
token op token
这里token是常量、宏参数、暂存块变量或头段变量,op是下面逻辑运算符之一:
GT,GE,LE,LT,EQ,NE
在求逻辑运算表达式的值之前,token都要转换成浮点数,现行版本条件语句段最多可以嵌套10层,分支结构ELSEIF和ELSE在条件语句段中是可选项,其中ELSEIF分支的个数没有限制。注意与FORTRAN 77不同的是,这里的逻辑表达式没有用圆括号括起来,而且在IF和ELSEIF后也没有THEN。
2.循环语句
循环语句可以很方便地实现一系列命令的重复执行,或是通过遍历元素列表固定重复次数,或者重复执行直至满足某个条件。你也能够中断(不到执行结束)一个循环。下面说明这组句法:
DO variable=start,stop{,increment}
commands
ENDDO
DO variable FROM start TO stop{BY increment}
commands
ENDDO
DO variable LIST entrylist
commands
ENDDO
DO variable WILD{DIR name}entrylist
commands
ENDDO
WHILE expr
commands
ENDDO
BREAK
variable是循环变量名。执行循环时它的当前值可作为宏参数存储,并且可在它的名字前冠以美元符号($)用于循环体(即命令)中。
start是循环变量的开始值,它必须是一个整型数。
stop是循环变量的终止值,它也必须是一个整型数。
increment是循环变量的增值选项,如果忽略它,则缺省值设为1。
entrylist是步长不限的循环变量的列表。
它们可能是整数、浮点数或字符串。在DO WILD语句中,entrylist由同时包含普通字符和通配符的字符串组成。执行循环前,这个列表扩展为与字符串相应的一系列文件。expr是逻辑表达式,与条件测试一节说明的一样。
现行版本循环嵌套的最多层次是10层。
3.在SAC宏中执行其他程序
需要时,SAC宏内也能执行其他程序。用户可以向程序传递一个可选择的命令。如果程序是交互的,还可以向它输入信息。下面给出这个语句的形式:
RUN program{message}
{inputlines}
ENDRUN
宏参数、暂存块变量、头段变量和内嵌函数都能用于上述语句。在这个程序执行之前,它们要全部代入计算。这个程序完成后,ENDRUN行后的SAC宏再继续执行。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。