[
,
定義 ;
]*
変数定義は各ブロックの先頭で行う。行演算では行えないことに注意する。 変数の参照は定義ブロックの後のみで行える。
定義は、以下の4種類がある。
数値変数定義 | # 変数名 |
文字列変数定義 | $ 変数名 [ : 最大文字数 ]
|
数値配列定義 | # 変数名 [ 要素数 ] |
文字列配列定義 | $ 変数名 [ 要素数 ]
[ : 最大文字数 ]
|
変数名は半角の英字で始まる英数字。
数値/文字列、変数/配列を問わず同一の名前は許さない。
変数名とその前の記号#
、$
は間に空白を入れてはならない。
文字列の場合は最後に:
の後で最大の長さを文字数で指定できる。
最大文字数を省略すると、その変数の最大文字数は1024となる。
配列は、必ず大きさを指定する(数字で直値指定)。
使用できる変数配列名は、最大で4000個程度。
取り扱うデータは以下の3種類。
*OVERFLOW*
を出力する。
TRUE
)または偽(FALSE
)の値を取る。
入力の場合は、
有意な先頭の文字がT
、t
または真
のとき、
真として扱い、そのほかの場合は偽として扱う。
出力の場合は、
真の場合はTRUE
、偽の場合はFALSE
という文字列を出力する。
データ型に対応して以下の3種類の記述がある
'
、"
または?
で囲む。
引用符自体を文字列定数内に各場合は二つ続けて書く。
TRUE | 真 |
FALSE | 偽 |
入力フィールドに対応した変数として以下の2種類が有る。
同一のフィールドを文字列として引用しても、数値として引用してもかまわない。
フィールドを指定する番号は1から始まり、
存在しないフィールドは、文字列ならば長さ0の文字列。数値ならば0となる。
また、長さ0の文字列は数値として引用すると値は0になる。
TFGEN.EXE
では入力データが無いので意味がない。
常に、存在しないフィールドとして扱う。
将来の複数のファイルの取扱のために、ファイル番号で修飾できる。
省略するとファイル番号1。現在は全く意味がない。
#
変数番号[@
ファイル番号]
[@
ファイル番号]
$
変数番号
変数番号は1から始まる数字。
先行する記号#
、$
と変数番号の間に空白を入れてはならない。
ファイル番号は1から始まる数字。現在はサポートするプログラムが無いので記述する必要は無い。
フィールドの呼び出しを動的に行うために用意した配列。
フィールドを指定する配列添字は0から始まる事に注意。
配列添字は数式で指定できる。
ファイル番号は将来のために予約されている機能。
現在は記述する必要が無い。
1から始まる番号でファイルを指定する。数式を記述できる。
フィールド変数よりも効率が悪いので通常は使用しない。
#[@num
ファイル番号]
[ num
配列添字 ]
$[@num
ファイル番号]
[ num
配列添字 ]
変数定義で指定した変数/配列。使用する前に定義されている必要がある。 代入されていない値は、数値0あるいは長さ0の文字列。 配列の添字が不正な場合はランタイムエラーとなる。
#
変数名$
変数名#
変数名 [ num
添字 ]
$
変数名 [ num
添字 ]
関数名
([引数 [,引数 ]*])
関数呼び出し。関数の詳細は別途一覧を参照のこと。 なお、引数の区切りなど詳細は関数によって異なる。
以下、優先順位の高い順に列挙する
(
式 )
数式 乗法演算子 数式 [
乗法演算子 数式 ]*
* | 乗算 |
/ | 除算 |
\ | 整数除算 |
% | 整数剰余 |
int
に変換して処理している。
[
加法演算子 式 ]*
+ | 加算、文字列連結 |
- | 負号、減算 |
> | 大きい |
>= | 以上 |
=> | 以上 |
= | 等しい |
<= | 以下 |
=< | 以下 |
< | 小さい |
>< | 等しくない |
<> | 等しくない |
IN | 左の文字列は右の文字列に含まれる |
NI | 右の文字列は左の文字列に含まれる |
HEAD_OF | 左の文字列は右の文字列の先頭 |
HAVE_HEAD | 右の文字列は左の文字列の先頭 |
TAIL_OF | 左の文字列は右の文字列の末尾 |
HAVE_TAIL | 右の文字列は左の文字列の末尾 |
結果はすべて、論理値で返す。成立した場合はTRUE
、
成立しなかった場合はFALSE
を返す。
IN
、
NI
、
HEAD_OF
、
HAVE_HEAD
、
TAIL_OF
、
HAVE_TAIL
を除く関係演算子は、全ての型に適用することができる。
大小判定の基準は以下の通り
TRUE
はFALSE
よりも大きいものとして取り扱う。NOT
論理式[
論理積演算子 論理式 ]*
AND
TRUE | AND | TRUE | → TRUE |
TRUE | AND | FALSE | → FALSE |
FALSE | AND | TRUE | → FALSE |
FALSE | AND | FALSE | → FALSE |
IMP
TRUE | IMP | TRUE | → TRUE |
TRUE | IMP | FALSE | → FALSE |
FALSE | IMP | TRUE | → TRUE |
FALSE | IMP | FALSE | → TRUE |
EQV
TRUE | EQV | TRUE | → TRUE |
TRUE | EQV | FALSE | → FALSE |
FALSE | EQV | TRUE | → FALSE |
FALSE | EQV | FALSE | → TRUE |
[
論理和演算子 論理式 ]*
OR
TRUE | OR | TRUE | → TRUE |
TRUE | OR | FALSE | → TRUE |
FALSE | OR | TRUE | → TRUE |
FALSE | OR | FALSE | → FALSE |
XOR
TRUE | XOR | TRUE | → FALSE |
TRUE | XOR | FALSE | → TRUE |
FALSE | XOR | TRUE | → TRUE |
FALSE | XOR | FALSE | → FALSE |
`
作業変数 :=
値
数値作業変数 | # 変数名 |
文字列作業変数 | $ 変数名 |
数値作業配列要素 | # 変数名 [ num 添字 |
文字列作業配列要素 | $ 変数名 [ num 添字 |
LET
が用意されている。そちらも参照のこと。
式 ,
式 [ ,
式 ]*
,
でつないで式を書ける。値、型ともに最後の式の値を取る。
関数の引数など、曖昧な場所での記述は出来ない。(括弧で囲めば良い)