変数と式

変数定義

VARS 定義 [ , 定義 ; ]*

変数定義は各ブロックの先頭で行う。行演算では行えないことに注意する。 変数の参照は定義ブロックの後のみで行える。

定義は、以下の4種類がある。

数値変数定義 #変数名
文字列変数定義 $変数名 [ :最大文字数 ]
数値配列定義 #変数名 [ 要素数 ]
文字列配列定義 $変数名 [ 要素数 ] [ : 最大文字数 ]

変数名は半角の英字で始まる英数字。 数値/文字列、変数/配列を問わず同一の名前は許さない。
変数名とその前の記号#$は間に空白を入れてはならない。
文字列の場合は最後に:の後で最大の長さを文字数で指定できる。 最大文字数を省略すると、その変数の最大文字数は1024となる。
配列は、必ず大きさを指定する(数字で直値指定)。
使用できる変数配列名は、最大で4000個程度。

データ型

取り扱うデータは以下の3種類。

  1. 数値
    符号と整数部15桁小数部15桁の数値。 入力では、不正な形式はオーバーフロー値として取り扱う。 出力では、オーバーフロー値がセットされている場合、 文字列*OVERFLOW*を出力する。
  2. 文字列
    日本語文字列。全角、半角ともに1文字として取り扱う。
  3. 論理値
    真(TRUE)または偽(FALSE)の値を取る。 入力の場合は、 有意な先頭の文字がTtまたはのとき、 真として扱い、そのほかの場合は偽として扱う。 出力の場合は、 真の場合はTRUE、偽の場合はFALSEという文字列を出力する。

定数

データ型に対応して以下の3種類の記述がある

  1. 数値定数
    そのまま数値を書く。
  2. 文字列定数
    引用符'"または?で囲む。 引用符自体を文字列定数内に各場合は二つ続けて書く。
  3. 論理定数
    次の二つの値が有る。
    TRUE
    FALSE

フィールド変数

入力フィールドに対応した変数として以下の2種類が有る。 同一のフィールドを文字列として引用しても、数値として引用してもかまわない。 フィールドを指定する番号は1から始まり、 存在しないフィールドは、文字列ならば長さ0の文字列。数値ならば0となる。 また、長さ0の文字列は数値として引用すると値は0になる。
TFGEN.EXEでは入力データが無いので意味がない。 常に、存在しないフィールドとして扱う。
将来の複数のファイルの取扱のために、ファイル番号で修飾できる。 省略するとファイル番号1。現在は全く意味がない。

  1. 数値フィールド変数
    #変数番号[@ファイル番号]
  2. 文字列フィールド変数[@ファイル番号]
    $変数番号

変数番号は1から始まる数字。 先行する記号#$と変数番号の間に空白を入れてはならない。
ファイル番号は1から始まる数字。現在はサポートするプログラムが無いので記述する必要は無い。

フィールド配列

フィールドの呼び出しを動的に行うために用意した配列。 フィールドを指定する配列添字は0から始まる事に注意。 配列添字は数式で指定できる。
ファイル番号は将来のために予約されている機能。 現在は記述する必要が無い。 1から始まる番号でファイルを指定する。数式を記述できる。
フィールド変数よりも効率が悪いので通常は使用しない。

  1. 数値フィールド配列
    #[@numファイル番号] [ num 配列添字 ]
  2. 文字列フィールド配列
    $[@numファイル番号] [ num 配列添字 ]

作業変数

変数定義で指定した変数/配列。使用する前に定義されている必要がある。 代入されていない値は、数値0あるいは長さ0の文字列。 配列の添字が不正な場合はランタイムエラーとなる。

  1. 数値作業変数
    #変数名
  2. 文字列作業変数
    $変数名
  3. 数値作業配列
    #変数名 [ num 添字 ]
  4. 文字列作業配列
    $変数名 [ num 添字 ]

関数

関数名 ([引数 [,引数 ]*])

関数呼び出し。関数の詳細は別途一覧を参照のこと。 なお、引数の区切りなど詳細は関数によって異なる。

演算子

以下、優先順位の高い順に列挙する

  1. 括弧
    ( )
    演算の優先順位を変更する
  2. 乗法演算子

    数式 乗法演算子 数式 [ 乗法演算子 数式 ]*

    * 乗算
    / 除算
    \ 整数除算
    % 整数剰余

    全て数値に対してのみ有効。 整数乗算と整数剰余は、内部でintに変換して処理している。
  3. 加法演算子
    式 加法演算子 式 [ 加法演算子 式 ]*

    + 加算、文字列連結
    - 負号、減算

    数値はそのまま通常の演算。
    文字列は加算のみ使用できる。文字列の加算は、文字列の結合。
  4. 関係演算子
    式 関係演算子 式

    > 大きい
    >= 以上
    => 以上
    = 等しい
    <= 以下
    =< 以下
    < 小さい
    >< 等しくない
    <> 等しくない
    IN 左の文字列は右の文字列に含まれる
    NI 右の文字列は左の文字列に含まれる
    HEAD_OF 左の文字列は右の文字列の先頭
    HAVE_HEAD 右の文字列は左の文字列の先頭
    TAIL_OF 左の文字列は右の文字列の末尾
    HAVE_TAIL 右の文字列は左の文字列の末尾

    結果はすべて、論理値で返す。成立した場合はTRUE、 成立しなかった場合はFALSEを返す。
    INNIHEAD_OFHAVE_HEADTAIL_OFHAVE_TAILを除く関係演算子は、全ての型に適用することができる。 大小判定の基準は以下の通り

    1. 数値
      数値の大小順。ただし、オーバーフロー値はもっとも大きい数として扱う。
    2. 文字列
      先頭から順に文字単位で内部コード順に比較する。 半角は常に全角よりも小さくなる。
    3. 論理値
      TRUEFALSEよりも大きいものとして取り扱う。

  5. 論理否定演算子
    NOT 論理式
    論理値を反転。論理値に対してのみ使用できる。
  6. 論理積演算子
    論理式 論理積演算子 論理式 [ 論理積演算子 論理式 ]*
    論理値同士の演算。結果も論理値。
    1. 論理積
      AND
      TRUE AND TRUE→ TRUE
      TRUE AND FALSE→ FALSE
      FALSE AND TRUE→ FALSE
      FALSE AND FALSE→ FALSE
    2. 論理包含
      IMP
      TRUE IMP TRUE → TRUE
      TRUE IMP FALSE → FALSE
      FALSE IMP TRUE → TRUE
      FALSE IMP FALSE → TRUE
    3. 論理同値
      EQV
      TRUE EQV TRUE → TRUE
      TRUE EQV FALSE → FALSE
      FALSE EQV TRUE → FALSE
      FALSE EQV FALSE → TRUE
  7. 論理和演算子
    論理式 論理和演算子 論理式 [ 論理和演算子 論理式 ]*
    論理値同士の演算。結果も論理値。
    1. 論理和
      OR
      TRUE ORTRUE→ TRUE
      TRUE OR FALSE→ TRUE
      FALSE OR TRUE→ TRUE
      FALSE OR FALSE→ FALSE
    2. 排他的論理和
      XOR
      TRUE XOR TRUE → FALSE
      TRUE XOR FALSE → TRUE
      FALSE XOR TRUE → TRUE
      FALSE XOR FALSE → FALSE
  8. 代入演算子

    ` 作業変数 :=

    作業変数、あるいは、作業配列要素に代入する。右辺の値を返却する。
    両辺の値は一致し無ければならない。 左辺の記述は以下の通り
    数値作業変数 #変数名
    文字列作業変数 $変数名
    数値作業配列要素 #変数名 [ num 添字 ]
    文字列作業配列要素 $変数名 [ num 添字 ]
    代入のために特別な関数LETが用意されている。そちらも参照のこと。
  9. 列挙演算子

    ,[ ,]*

    ,でつないで式を書ける。値、型ともに最後の式の値を取る。 関数の引数など、曖昧な場所での記述は出来ない。(括弧で囲めば良い)