next up previous contents
: 使用例:ライントレース : バッチ処理の使用方法 : スクリプトコンバータ   目次

convertToBatch: player:メソッドの内部処理

convertToBatch: player:メソッドは非常に煩雑な処理を行っているが、大まかには内部で他のメソッドを呼び出しながら以下のように処理している。
  1. convertToBatch: player:メソッドの第二引数のプレイヤーから第一引数で指定したスクリプトのコードを得る。

  2. convertSentences: writeStream:メソッドの第一引数にコード、第二引数にコンバート結果などを書き込むストリームを与えて実際にコンバートし、戻り値にバイトストリームを得る。

  3. convertSentences: writeStream:メソッドの途中で条件文が現れたら、convertConditionExp: writeStream:メソッドの第一引数に条件文とそれに続く真/偽ブロック全体を与えて条件文をコンバートし、結果をバイトストリームとして得る。なおwriteStream:にはconvertSentences: writeStream:メソッドで受け取ったものを与える。

  4. convertConditionExp: writeStream:メソッド内で条件文をコンバートしたら、
    ifTrue:に続く真ブロック内部のコード全体、ifFalse:に続く偽ブロック内部のコード全体を順にconvertSentences: writeStream:に渡す。つまり、「テスト はい/いいえ」タイルのコンバートは必然的に再帰処理になる。ifFalseに続くブロックは条件文が偽の時のみ実行されなければならないので、6.2.9で示したような方法をとった。

  5. 最終的に全てのタイルがコンバートされてひとつのまとまったバイトストリームとなったら、それをselectedBatNum番目のbatchStorageに保存し、Workspaceにコンバート結果を表示する。

なお、batchConverterカテゴリの残りのメソッドであるfindWordNum: from:, getTokens:, isBlock:のそれぞれは、convertToBatch: player:メソッドを実行する時に補助的に使われている。



Deguchi Lab. 平成20年3月5日