复合符号

复合符号 允许在引用变量时替换其名称中的变量。

一个复合符号包含至少一个句点和至少两个其他字符。 它不能以数字或句点开头,如果复合符号中只有一个句点,那么它不能是最后一个字符。

名称以 词干 开头 (符号的该部分直到第一个句点 (包括第一个句点))。 后跟 tail,名称的部分 (由句点定界) 是常量符号,简单符号或 null。 复合符号的 派生名称 是符号的主干 (大写) ,后跟尾部,其中所有简单符号都已替换为其值。 尾部本身可以由字符 A-Za-z0-9@ # $ ¢ . ! ? 以及下划线组成。 尾部的值可以是任何字符串,包括空字符串和包含空格的字符串。 例如:
taila='* ('
tailb=''
stem.taila=99
stem.tailb=stem.taila
say stem.tailb        /* Displays: 99                 */
/* But the following instruction would cause an error */
/*         say stem.* (                               */
不能在词干后使用带有嵌入符号 (例如, 12.3E+5) 的常量符号; 在这种情况下,整个符号将不是有效的符号。
这些是复合符号:
FRED.3
Array.I.J
AMESSY..One.2.
<.F.R.E.D>.<.A.B>
在使用符号之前 (即,在引用时) ,语言处理器会替换尾部 (示例中的IJOne ) 中任何简单符号的值,从而生成新的派生名称。 然后,此派生名称将与简单符号一样使用。 即,它的值在缺省情况下是派生名称,或者 (如果它用作赋值的目标) 它的值是由派生名称命名的变量的值。

对符号的替换允许对具有公共主干的变量集合进行任意索引 (下标)。 替换的值可以包含任何字符 (包括句点和空格)。 仅执行一次替换。

总结: 由符号引用的复合变量的派生名称
s0.s1.s2. --- .sn
由以下人员提供
d0.v1.v2. --- .vn
其中 d0 是符号 s0的大写形式, v1vns1sn的常量或简单符号的值。 任何符号 s1-sn 都可以为空。 值 v1-vn 也可以为空,并且可以包含任何字符 (特别是,小写字符不会转换为大写,空格不会被除去,句点没有特殊意义)。
下面是从 REXX 程序中小摘录的一些示例:
a=3       /* assigns '3' to the variable A    */
z=4                 /*   '4'      to Z        */
c='Fred'            /*   'Fred'   to C        */
a.z='Fred'          /*   'Fred'   to A.4      */
a.fred=5            /*   '5'      to A.FRED   */
a.c='Bill'          /*   'Bill'   to A.Fred   */
c.c=a.fred          /*   '5'      to C.Fred   */
y.a.z='Annie'       /*   'Annie'  to Y.3.4    */

say  a  z  c  a.a  a.z  a.c  c.a  a.fred y.a.4
/* displays the string:                     */
/*    "3 4 Fred A.3 Fred Bill C.3 5 Annie"  */

您可以使用复合符号来设置下标不一定是数字的数组和变量列表,从而为程序员提供很大的作用域。 一个有用的应用是设置一个数组,在该数组中下标取自一个或多个变量的值,实现一种形式的关联内存 (内容可寻址)。

实现最大值: 变量名称在替换前后的长度不能超过 250 个字符。

注: 根据仿真器配置中使用的代码页,以下字符可能在 REXX 联机帮助中以不同方式显示: @ # $ ¢。 另请参阅 CICS 文档中使用的约定和术语