tgl.interpreter
クラス Interpreter

java.lang.Object
  上位を拡張 tgl.interpreter.Interpreter
すべての実装されたインタフェース:
STreeVisitor

public class Interpreter
extends java.lang.Object
implements STreeVisitor

コンパイラが生成した構文木の列を解釈実行するためのメソッドを提供する。 言語tglの処理系tglcのこの版での実装では、各構文木への処理を行うために Visitorパターンを採用している。このクラスは、構文木を解釈実行するための ビジタを実装している。
caseXXXという名前をもつメソッドは、構文木のクラスXXXのインスタンスを 解釈実行するための処理を行う。


コンストラクタの概要
Interpreter(SystemProcManager procManager)
          インタプリタを作成する。
 
メソッドの概要
 void caseAssignTree(AssignTree tree)
          代入文を解釈実行する。
 void caseBinExprTree(BinExprTree tree)
          二項演算子をもつ式を評価する。
 void caseCallTree(CallTree tree)
          手続きを呼び出すための処理を行う。
 void caseCode(Code code)
          構文木の列(中間コード)に含まれる構文木を、列の先頭から順に解釈実行する。
 void caseCondTree(CondTree tree)
          条件を評価する。
 void caseIfTree(IfTree tree)
          if文を解釈実行する。
 void caseLocalVarTree(LocalVarTree tree)
          局所変数のための領域をフレーム中に確保する。
 void caseNumNode(NumNode node)
          数をインタプリタがもつスタックの先頭に積む。
 void caseRepeatTree(RepeatTree tree)
          repeat文を解釈実行する。
 void caseReturnTree(ReturnTree tree)
          手続きから呼び出し側へ戻るための処理を行う。
 void caseUniExprTree(UniExprTree tree)
          単項演算子をもつ式を評価する。
 void caseVarNode(VarNode node)
          変数から値を取り出す。
 void caseWhileTree(WhileTree tree)
          while文を解釈実行する。
 void interpret()
          プログラムの解釈実行を行う。
 void setMemory(Memory memory)
          中間コード領域、静的データ領域を含むメモリをインタプリタに格納する。
 void setSpeed(int speed)
          実行スピードを設定する。
 
クラス java.lang.Object から継承されたメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

コンストラクタの詳細

Interpreter

public Interpreter(SystemProcManager procManager)
インタプリタを作成する。

パラメータ:
procManager - システム定義手続きマネジャのインスタンス
メソッドの詳細

setMemory

public void setMemory(Memory memory)
中間コード領域、静的データ領域を含むメモリをインタプリタに格納する。

パラメータ:
memory - メモリのインスタンス

setSpeed

public void setSpeed(int speed)
実行スピードを設定する。引数の値が大きくなるほど、実行速度が 遅くなる。

パラメータ:
speed - 実行スピードを設定するためのパラメータ

interpret

public void interpret()
プログラムの解釈実行を行う。


caseCode

public void caseCode(Code code)
構文木の列(中間コード)に含まれる構文木を、列の先頭から順に解釈実行する。 インスタンス変数 returnNow の値がtrueならば、直前に解釈実行した構文木が return文そのものか、return文を本体に含むif文、while文、repeat文であることを 表わす。そのため、returnNow の値が true のときは、次の構文木の解釈実行を 行わずにただちに中間コードの実行を終了する。

定義:
インタフェース STreeVisitor 内の caseCode
パラメータ:
code - 構文木の列
関連項目:
returnNow

caseAssignTree

public void caseAssignTree(AssignTree tree)
代入文を解釈実行する。

定義:
インタフェース STreeVisitor 内の caseAssignTree
パラメータ:
tree - 代入文の構文木

caseIfTree

public void caseIfTree(IfTree tree)
if文を解釈実行する。真となった条件に対応する文リストのコードを 解釈実行する。条件がすべて偽だったときは、else節の文リストの コードを解釈実行する。

定義:
インタフェース STreeVisitor 内の caseIfTree
パラメータ:
tree - if文の構文木

caseWhileTree

public void caseWhileTree(WhileTree tree)
while文を解釈実行する。条件が真の間、本体の文リストのコードを 解釈実行する。

定義:
インタフェース STreeVisitor 内の caseWhileTree
パラメータ:
tree - while文の構文木

caseRepeatTree

public void caseRepeatTree(RepeatTree tree)
repeat文を解釈実行する。式の評価結果により決まる実行回数だけ、 本体の文リストのコードを解釈実行する。

定義:
インタフェース STreeVisitor 内の caseRepeatTree
パラメータ:
tree - repeat文の構文木

caseCallTree

public void caseCallTree(CallTree tree)
手続きを呼び出すための処理を行う。実引数を左から順番に評価して、 その値をスタックにプッシュする。ユーザ定義手続きを呼び出すときは、 呼び出される手続きのフレームを指すようにフレームポインタを更新して、 手続き本体のコードを解釈実行する。手続き本体の解釈実行が終了したら、 returnNow の値を false に変更する。これにより、この手続き呼び出しを 含む構文木の列中の次の構文木の解釈実行を行うように、caseCode に伝える。 システム定義手続きを呼び出すときは、システム定義手続きに対応するクラスの execute メソッドを呼び出す。

定義:
インタフェース STreeVisitor 内の caseCallTree
パラメータ:
tree - 手続き呼び出しの構文木
関連項目:
returnNow, caseCode(Code), SystemProc.execute(SystemProcManager, Stack)

caseReturnTree

public void caseReturnTree(ReturnTree tree)
手続きから呼び出し側へ戻るための処理を行う。フレームを解放して、 呼び出し側のフレームを指すようにフレームポインタの値を変更する。 戻り値のための式が指定されているならば、その式を評価した値が スタックの先頭にプッシュされた状態で呼び出し側に戻る。 return文の構文木の解釈実行が終了した後は、この構文木を含むコードの 次の構文木を解釈実行せずに、ただちにコードの解釈実行を終了して 呼び出し側まで戻る必要がある。そのため、このメソッドの実行では、 インスタンス変数 returnNow の値を true に変更し、このreturn文以後の 構文木の解釈実行を行わないようにメソッド caseCode に伝える。

定義:
インタフェース STreeVisitor 内の caseReturnTree
パラメータ:
tree - return文の構文木
関連項目:
returnNow, caseCode(Code)

caseLocalVarTree

public void caseLocalVarTree(LocalVarTree tree)
局所変数のための領域をフレーム中に確保する。初期化のための式が指定されて いるならば、確保した領域の値はその式を評価した値になる。指定されていなければ 確保した領域の値は null になる。

定義:
インタフェース STreeVisitor 内の caseLocalVarTree
パラメータ:
tree - 局所変数宣言の構文木

caseBinExprTree

public void caseBinExprTree(BinExprTree tree)
二項演算子をもつ式を評価する。評価結果はインタプリタがもつ スタックの先頭に積まれる。

定義:
インタフェース STreeVisitor 内の caseBinExprTree
パラメータ:
tree - 二項演算子をもつ式の構文木

caseUniExprTree

public void caseUniExprTree(UniExprTree tree)
単項演算子をもつ式を評価する。評価結果はインタプリタがもつ スタックの先頭に積まれる。

定義:
インタフェース STreeVisitor 内の caseUniExprTree
パラメータ:
tree - 単項演算子をもつ式の構文木

caseVarNode

public void caseVarNode(VarNode node)
変数から値を取り出す。取り出した値はインタプリタがもつ スタックの先頭に積まれる。

定義:
インタフェース STreeVisitor 内の caseVarNode
パラメータ:
node - 変数の構文木

caseNumNode

public void caseNumNode(NumNode node)
数をインタプリタがもつスタックの先頭に積む。

定義:
インタフェース STreeVisitor 内の caseNumNode
パラメータ:
node - 数の構文木

caseCondTree

public void caseCondTree(CondTree tree)
条件を評価する。評価により得られた真理値はインタプリタがもつ スタックの先頭に積まれる。

定義:
インタフェース STreeVisitor 内の caseCondTree
パラメータ:
tree - 条件の構文木