ステートメントの評価の順序

スクリプトが実行される場合、スクリプトは解釈・実行されるためLabTalkのインタプリタに送られ、以下のような手続きで評価されます。

スクリプトは、その構成要素のステートメントに分割されます。

各ステートメントは、 代入文マクロ文コマンド文算術文関数文の順序で文型が確定されます。 インタプリタは最初に明示されている(括弧や引用符中に隠されていない)代入演算子を検索します。 それが見つからないと、次に最初の語がマクロ名かどうかを調べます。 その次にそれがコマンド名かどうかを調べます。 次にインタプリタは算術演算子を検索し算術文かどうかをチェックし、最後にその文が関数文かどうかを調べます。

ステートメント解釈の優先順序が、スクリプトの実行に大きく影響することもあります。 例えば、次の代入文について考えてみましょう。

type = 1;

この代入文は、変数typeに1を割り当てます。 ステートメント解釈の順序に従い、代入はコマンドの前に行われるので、typeがLabTalkのコマンドであるにも関わらず、代入操作が行なわれます。 しかし、次のステートメントでは、コマンド文が算術表現より先に評価されるので、コマンドtypeが実行されます。

type + 1;

つまり、この2番目の例では、文字列「+1」が出力されます。

次の評価ルールに従い、受け取られた順に評価されていきます。

  • 代入文: 代入演算子の左辺の文字列変数は、括弧で囲まれていない限り展開されません。 それ以外の全ての文字列変数は展開され、置換記法(%()$())は置換処理されます。
  • コマンド文: コマンドがただの文字列である場合、それは置換プロセッサには送られません。 そうでない場合は、展開・置換処理が行なわれます。
  • 算術文: 数式は、全て一旦置換プロセスを経て展開されます。