|Lemon Home Page |Code Generation |

Pseudo Code について

ここでは Pseudo Code (疑似コード)について説明を行なう. 疑似コードは,パターンのクラス間の構造情報の中に埋め込まれた 主にメソッド呼び出しの関係について定義され, クラス名や関数名をユーザが定義することによって, コードが自動生成できることを目的に設計をおこなったものである.

まず,現在のパターンでどのような疑似コードが定義されているか, 「デザインパターン」の中のものについて調べた結果を. 疑似コード一覧に示す. この一覧の特徴は,関数には基本的に

  1. テンプレートメソッドとフックメソッド
  2. サブクラスを生成して親クラスとして返すメソッド
の二種類しかないことである. ここで,テンプレートメソッドとはインターフェースとして シグネチャだけ定義されたメソッドのことであり, フックメソッドとは,そのテンプレートメソッドを内部で用いて動作を規定さ れたメソッドのことであり, テンプレートメソッドの実装を変えることにより 動作を変えるようになっている. これらのメソッドを用いることにより, フレームワークのホットスポットと呼ばれる柔軟な部分を作り出すことが可能 となる. デザインパターンの多くはテンプレートメソッドとフックメソッドから 成っており,フレームワークを構成するために用いらるものである [Pree]. 実際,デザインパターンが設計に提供する情報は, そのような柔軟性・再利用性に対するノウハウであり, アプリケーションに依存したアルゴリズムのような ものではない. 具体的なコードを記述する責任はソースコード記述者にある.

以上のようなことを踏まえて下のような簡易記述言語を設計した. 疑似コードの設計方針は次のようなものである.

必要なシンタクス

そして,具体的な演算子は必要ないとした.

例えば,Iterator Pattern の ConcreteAggregate::CreateIterator() では,
<pseudocode>
  return new "ConcreteIterator" ( "this" )
</pseudocode>
のようになる.
以下に疑似コードの文法を示す. 条件の中は大抵コメントであり,ステートメントの中にもコメントが あり得る. この文法で書かれた疑似コードは解析され PIML と同様の アブストラクトシンタックスツリーに展開される.詳細は Pseudo Code の内部表現 をみること.
statements:
      statement
    | statements statment
    ;
statement:
      method_call
    | if_statement
    | forall_statement
    | return_statement
    | assign_statement
    | dummy_statement
    ;
method_call:
      method
    | Identifier . method
    | Identifier :: method
    | constructor_call
    ;
constructor_call:
      new method
    | new Identifier :: method
    ;
method:
      Identifier ( )
    | Identifier ( args )
    ;
args:
      Identifier
    | Identifier , args
    ;
if_statement:
      if ( condition ) { statements }
    | if ( condition ) { statements } else { stetements }
    ;
forall_statement:
      forall Identifier in Identifier { statements }
    ;
condition:
      Dummy
    ;
dummy_statement:
      Dummy
    ;
return_statement:
      return method_call
    | return Identifier
    ;
assign_statement:
      Identifier = Identifier
    | Identifier = method_call
    ;

Mika Ohtsuki <mika@db.is.kyushu-u.ac.jp>
Last modified: Fri Dec 12 14:01:31 JST 1997