Rexx Land
Syntax


 Statements
 REXXでは文の区切りは改行かセミコロンです。各行の最後にセミコロンをつける必要はありません。複数行にまたがった文を記述するには、行の最後をコンマで終了します。(ただし、YTREXXでは、コンマによる行の結合はサポートしていません)

コメント Comments
 REXXでは、/* から*/までをコメントとみなします。IBMのREXXでは伝統的に最初の行がコメント行である必要がありましたが、REGINAおよびYTREXXではこの制限はありません。逆にREGINAではLINUXの制限から最初の行は#! /usr/local/bin/rexxである必要があります。

文字と文字列 Characters and Strings
 REXXプログラム中で使用できる文字は、英数字および記号です。このような文字や文字列をデータとして扱いたいときは、'(クオート)または”(ダブルクオート)でくくります。また、文字列の中に'や"を含めたいときは、その文字を続けて2度記述してください。例えば、''''は「'」を示します。これは"'"と同じ意味です。REXXのデータには型という概念はありません。ある決まった演算の時以外はいつも文字列としてデータは保持されています。データ以外の場所では、英字はすべて大文字として解釈されます。

変数 Variables
 REXXの変数は、単純変数とSTEM変数があります。単純変数は、任意の長さの英字で始まる英数字または_(アンダーライン)であらわされます。REXXでは、変数名はすべて大文字として扱われます。従って、alphとAlpha ALPHAはどれも同じ変数を指します。
 単純変数には、代入文を用いて値を代入することができます。代入された値はいつでも文字列として保持されており、長さの制限はありません。
 STEM変数はいわば配列を実現するために実装されており、単純変数のあとに.(ドット)と添え字を記述します。例えば、A.1, A.2, A.3など。もちろんA.I, A.Xなども大丈夫ですが、添え字部分に式を記述することはできません。また符号もつけることはできません。従って、A.(-1)と書きたいときは、X=-1; A.X=...と記述することになります。添え字にさらに添え字を加えることもできます。(何段階でも制限はありません)また、添え字を書かずに.(ドット)で終わったSTEM変数は、それ全体をさします。例えば、A.1=0; A.2=0... と書く代わりにA.=0と記述することが可能です。同様にX.3.=40;は、X.3.で始まる全てのSTEM変数を40に設定します。

ラベル Labels
 SIGNAL命令のジャンプ先やCALL命令あるいは関数のエントリとしてラベルは使用されます。ラベルは、任意の長さの英字で始まる英数字または_(アンダーライン)です。ラベルの定義は、文の先頭にラベル名と:を空白をはさまずに記述します。プログラム中に同じ名前のラベルは出現してはなりません。

代入文 Assignments
 変数名=式; の形式で記述された文は代入文として処理されます。式を計算した後、変数名に値が代入されます。

演算子 Operators
 式中で使える演算子は四則演算が+-*/, 整数除算が% 剰余が// べき乗が^または**です。
 比較演算は < > <= >= =(等しい) <>(等しくない)
 論理演算は & (論理積) | (論理和) !(否定)
 文字列演算が || (連結) スペース(空白文字を挟んでの連結)
 です。演算子の強さは、(単項マイナス、プラス) べき乗 (*/%//)、比較、論理演算、文字列演算の順です。演算によっては、演算対象が数値である必要があります。もしこれを満たしていない式の場合には実行時エラーが発生します。

命令 Instructions
 REXXは次のキーワードで始まる文を命令文として解釈します。*はYTREXXでインプリメントされていない命令です。**は細かい仕様が異なる命令です。
 以下の命令、および代入文以外の文は全て外部コマンドとして渡されます。YTREXXでは、イベントが発生しますので、イベントハンドラを記述することで対応する処理を実現できます。REGINAでは、LINUXのコマンドとして解釈されます。

ARG*
引数リストをparseするための命令です。parse命令も参照してください。PARSE UPPER ARG と等価です。
CALL**
サブルーチンを呼び出すための命令です。CALL サブルーチン名 引数, 引数, ...の形式で使われます。引数はすべて値渡しです。サブルーチン内で引数を参照するには、ARG関数を使います。
DO**
DO〜ENDブロックを形成します。DO ENDブロックには、単純ブロックと繰り返しブロックがあります。単純ブロックはIF文中のTHENやELSEの後などにDO ENDでくくることにより複数の文を記述することができます。繰り返しブロックは、DO var=start TO end BY step 条件部 のように記述されます。varは繰り返し制御変数名、startはその初期値、endは終了値、stepは一回終わるごとにvarに加算される数を示します。start,end,stepはそれぞれ式でも構いません。BYは省略すると1と解釈されます。TOを省略すると終了条件はチェックされません。条件部にはWHILEかUNTILに続けて条件を記述できます。記述すると、終了条件としてチェックされます。また条件部にFOREVERを記述するとLEAVE命令を実行するまで永遠にループの中を実行しつづけます。
DROP*
変数を変数領域から削除します。
ELSE
IF 条件 THEN 文/ブロック ;ELSE 文/ブロック の形式で記述され、条件が満たされなかったときにELSE以下の文を実行します。ELSE文はオプショナルです。IF文の入れ子の場合には、最も近いIF THENに対応します。
THENの前には文区切りがあってもなくても構いませんが、ELSEの前には必ず必要です。また、THEN,ELSEのあとには文区切りはあっても無くても構いません。
END
DOブロックの終了、SELECTブロックの終了を示します。
EXIT
現在のREXXプログラムを終了します。
IF
IF THEN ELSEブロックを形成します。
INTERPRET
式をプログラムとして実行します。
ITERATE**
もっとも内側の繰り返しDO ENDブロックのDOに戻って実行します。
LEAVE**
もっとも内側の繰り返しDO ENDブロックを終了します。
NOP
何もしない命令です。THEN文やWHEN OTHERWISEの後にセミコロンを書いても空文は無視されますので、そのような場合に何もしないことを明示するために使われます。
NUMERIC*
有効桁数の設定、数値比較の誤差範囲の設定等に使われます。
OPTIONS*
インタープリタ毎の設定に使用されます。
PARSE**
文字列のテンプレートマッチングを行い、変数に代入する命令です。PARSE VAR var templateもしくはPARSE VALUE value WITH templateなどの書式で記述されます。varは変数名、valueは式を記述し、ともに計算結果をtemplateに従って文字列マッチングを行います。templateは変数名、文字列('abc'など)を空白を挟んで並べたもので、式の結果を先頭から順にtemplateに割り振っていきます。例えば、PARSE VALUE 'A B C D E' WITH X Y Zでは、結果はX='A', Y='B', Z='C D E'となります。また、PARSE VALUE 'A B C D E' WITH X 'C' Y では、X='A B', Y='D E'となります。変数名の代わりに.(ドット)を記述すると、その部分に対応する文字列はどこにも代入されません。
PROCEDURE
サブルーチンや関数定義中で、変数のスコープを設定するために使われます。サブルーチン中でPROCEDURE命令を実行すると、呼び出したプログラムと実行中のサブルーチンの間で変数名は完全に分離されます。PROCEDUREにつづいてEXPOSE var1 var2 .. サブキーワードを記述すると、var1, var2...については、呼び出したプログラムと共有します。varにSTEM変数を指定することもできます。YTREXXでは、(var)の形式(varを評価した結果をexposeする)はサポートしていません。
PULL*
スタックから一行取り出し、テンプレートマッチングを行います。
PUSH*
スタックの先頭に一行追加します。
QUEUE*
スタックの最後に一行追加します。
RETURN
サブルーチンや関数定義を終了します。RETURN 式 と記述すると、式の計算結果を関数の値として返します。CALLで呼ばれた場合には、RCという変数に入ります。REXXでは、関数とサブルーチンは全く同一のものです。CALL で呼ばれるか、計算式中で呼ばれるかの違いだけです。すなわち、CALL LINEOUT X,'STR'は、RC=LINEOUT(X,'STR')と全く同じです。

SAY
画面/標準出力に書き出します。
SELECT
SELECT WHEN OTHERWISE ENDブロックを形成します。
SIGNAL**
制御をラベルで指定される場所に移動します。
THEN
IF THEN ELSEで使用されます。
TRACE*
プログラムの実行を監視し、途中経過を報告します。


Yukkun's HomePageへ BBJapan HomePageへ