特殊記号を含む文字列を使ったマクロ変数の作成
[OS] ALL
[リリース] ALL
[キーワード] macro, spacial character, quote, %NRSTR
[質問]「&」や「%」を含む文字列を使ってマクロ変数を作成するには、どのようにすればよいですか。
[回答]マクロは、プログラムテキストを「トークン」と呼ばれる単位に分解する「ワードスキャナ」を通して、コンパイルされます。 トークンは、ワードスキャナが他のトークンの先頭、トークン後のブランクを検出すると終了します。
「&」や「%」は、このトークンの1種類である特殊文字であり、コンパイラにとって意味のある文字です。 クォート処理を行なうマクロ引用符関数はいくつかありますが、ここでは展開前の引数をクォートする%NRSTRマクロ引用符関数を紹介します。 %STR関数は、以下の特殊記号をクォートします。 + - * / < > = ¬ ^ ~ ; , blank AND OR NOT EQ NE LE LT GE GT また、対象となる記号の前に%記号をつけることにより、以下の記号もクォートします。 ( )
%NRSTR関数は、上記特殊記号に加え、&や%記号についてもクォートします。 例:%NRSTRマクロ引用符関数を使用したパターン例 %LET text1 = %NRSTR(M & A) ; /* テキストの全てをクォート */ %LET text2 = M %NRSTR(&) A ; /* &記号のみをクォート */ %LET an = %NRSTR(&) ; /* 事前に &記号をクォート */ %LET text3 = M &an A ; /* 事前にクォートされた値を用いる */ %PUT text1=&text1 text2=&text2 text3=&text3 ; /* 結果確認 */ 例を実行した結果は次のようになります。 text1=M & A text2=M & A text3=M & A |