コンパイラ

とりあえずforward文完成。
実装方法が結構めちゃくちゃである。

  • 記号表にOPCODEのlistを持たせてる。(もうこの時点でry)
  • 記号表を保持する、forward専用のスタックをつくり、forward文がきたら、procedureをそこに入れてく。
  • call文がきたら、コードを生成するが、あとで定義部のアドレスを、calのアドレスのところに入れなければいけないので、コードのポインタを、forwardスタックの中の記号表のOPCODEのlistに保持。
  • 定義部がきたらforwardスタックからそのprocedureを探してOPCODEのlist全てに定義部の開始アドレスを挿入。
  • forwardスタックからそのprocedureを削除。

といった感じ。

とてもダメなことはわかるんだが、どう直したら素敵になれるかがよくわからない。
そして、今まで作ってきたコードも既にスパゲッティなのでイジルにイジれない。
というわけで、まぁ、いいか。動いたし。