演算子


新しい演算子の定義

iduoでは自由に演算子を定義できます。

演算子の実行関数は次のように定義します。
procedure Operation(aLeft, aRight: TVar; var aReturn: TVar);
aLeft, aRightは演算子の左右にある値を指します。
aReturnは演算結果です。

例:
// 乗算演算子の定義
procedure _power(aLeft, aRight: TVar; var aReturn: TVar);
var
  b: int64;
  i, p: integer;
begin
  b := GetVarValue(aLeft, 0);
  p := GetVarValue(aRight, 0);
  for i :=0 to p-1 do b := b * b;
  SetVar(aReturn, b);
end;
次にこの演算子をiduoに登録します。
iduoConstsユニットにあるOperatorsという演算子リストのEntryOperatorメソッドを呼び出して登録します。
procedure EntryOperator(Name: string; Proc: TOperationProc; Argtype: integer; Level: integer; otype: integer);
Name: 演算子の識別子(@や+など)
Proc: 実際に演算を実行する手続き
Argtype: 結合規則
AT_BOTH_LR: 左右の値を結合、左から右に演算
AT_BOTH_RL: 左右の値を結合、右から左に演算
AT_RIGHT_RL: 右の値を結合、右から左に演算
AT_LEFT_LR: 左の値を結合、左から右に演算
Level: 演算順序。若いほど優先されます。0が最優先でOPERATOR_LEVEL_MAXが一番最後に演算されます。
otype: 演算子のタイプ
OT_Normal: 演算後、結合する。
OT_Subst: 演算後、左の変数に代入し、結合する。
OT_Inc:  インクリメント・デクリメント演算子。(Argtype、Levelは無視される。)
例:
// 演算子を登録する
Operators.EntryOperator('pow', _power, AT_BOTH_LR, 0);

iduoMountユニットに主要な演算子が定義されているので、参考にしてみてください。