|Lemon Home Page |About Code Generation |With Cmpd|

CIML について

パターンへのリンクなどの関係を表現するために クラスに関する情報を SGML 形式で保存します. 考慮すべきことを次に書きます.
  1. クラス名とその属性

    public であるかなど.

  2. 他のクラスへの関係(継承,参照・集約,生成(?))

    各関係はどのパターンのどの関係にあたるかを含む

    参照・集約については変数の項目で取り扱う

    課題としては,関係の逆を(継承される側など)どうするか, 複数の RoleRelation が含まれる可能性があるのか (継承については機能が多重化することが考えられるが,変数は?), など.

  3. 関数

    各関数はどのパターンのどの関数にあたるかを含む.

    これも,変数と同様に機能が多重化することがあり得るかが問題.

現時点では多重を許すようにしている. 暫定的な CIML の抽象構文を以下に示す.
Class          :- name, lang, package: Identifier;
                  access: AcceSpec; otherspecs: Specifiers;
                  roles: Roles; relations: Relations;
                  members: Members
Roles          :- Role*
Role           :- patternname, rolename: Identifier
Relations      :- Relation*
Relation       :- Inheritance | Creation
Inheritance    :- target: Identifier; rolrels: RoleRelations
Creation       :- target: Identifier; rolrels: RoleRelations
RoleRelations  :- RoleRelation*
RoleRelation   :- patternname, relationname: Identifier
Members        :- Member*
Member         :- Variable | Method
Variable       :- type, name, initval: Identifier;
                  access: AcceSpec;
                  otherspecs: Specifiers;
                  rolerels: RoleRelatons
Method         :- type, name: Identifier;
                  access: AcceSpec;
                  otherspecs: Specifiers;
                  args: Args; roleops: RoleOperations
                  code: Code
Args           :- Arg*
Arg            :- type, name: Identifier;
                  specs: Specifiers
RoleOperations :- RoleOperation*
RoleOperation  :- patternname, rolename, operationname: Identifier
AcceSpec       :- specifier: String
Specifiers     :- specifiers: String
Code           :- code: String
Identifier     :- name: String

Mika Ohtsuki <mika@db.is.kyushu-u.ac.jp>
Last modified: Tue Jan 21 16:37:10 1997