パステルステッチ C++ インターフェース

この文書について

この文書は、C++ で実装されたパステルステッチのインタープリターにおいて、C++ とパステルステッチとのインターフェースを定義するものである。この文書では、C++ を「ホスト言語」、パステルステッチを「ゲスト言語」と称する。

この文書では、C++ とは C++11 を指すものとする。

ホスト言語のクラス

ホスト言語では、ゲスト言語とのインターフェースのために、以下のクラスが用意されている。

pastelstitch::StaticEnvironment クラス

pastelstitch::StaticEnvironment クラスは、パステルステッチの静的環境である。パステルステッチのインタープリターを動作させるには、まず、StaticEnvironment クラスのインスタンスをデフォルトコンストラクターで生成する。続いて、そのインスタンスに対して以下のメンバー関数を実行する。

pastelstitch::StaticEnvironment クラスは以下のメンバー関数を持つ。

void load (tinyxml2::XMLDocument &document)

pastelstitch::StaticEnvironment クラスのメンバー関数 load は、パステルステッチのオブジェクトコードを読み取る。引数 documentTinyXML-2 の XMLDocument クラスである。pastelstitch::StaticEnvironment の 1 個のインスタンスに対して、load メンバー関数を複数回実行することができる。そのときは、複数のオブジェクトコードを順に結合したかのようなプログラムが得られる。

void initialize ()

pastelstitch::StaticEnvironment クラスのメンバー関数 initialize は、パステルステッチのインタープリターがイニシャライズ実行を行う。実行位置がプログラムの終端に達するか、制御構文 halt が実行されると、このメンバー関数は終了する。

注意 pastelstitch::StaticEnvironment クラスの load メンバー関数を実行してから、run メンバー関数を実行するまでの間に、この initialize メンバー関数を実行する必要がある。

void run ()

pastelstitch::StaticEnvironment クラスのメンバー関数 run は、パステルステッチのインタープリターが本体実行を行う。実行位置がプログラムの終端に達するか、制御構文 halt が実行されると、このメンバー関数は終了する。

void run (const std::map <std::string, std::shared_ptr <pastelstitch::Value>> &arguments, std::map <std::string, std::shared_ptr <pastelstitch::Value>> &return_arguments)

pastelstitch::StaticEnvironment クラスのメンバー関数 run の 2 引数のオーバーロードは、本体実行を行う。引数 arguments は引数の名前と値のマップである。これらの引数はゲスト言語からコンティニュエーション変数で参照できる。引数 return_arguments はゲスト言語の制御構文 halt の引数の名前と値のマップである。

void run (pastelstitch::CompoundVector address)

pastelstitch::StaticEnvironment クラスのメンバー関数 run の 1 引数のオーバーロードは、コンティニュエーションを実行する。引数 address で指定されたベクトルをアドレスとして記憶装置から値を読み出し、その値がコンティニュエーションであれば、そのコンティニュエーションを実行する。行位置がプログラムの終端に達するか、制御構文 halt が実行されると、このメンバー関数は終了する。また、記憶装置から読み出した値がコンティニュエーションでなければ、何もせずにこのメンバー関数を終了する。

void run (pastelstitch::CompoundVector address, const std::map <std::string, std::shared_ptr <pastelstitch::Value>> &arguments, std::map <std::string, std::shared_ptr <pastelstitch::Value>> &return_arguments)

pastelstitch::StaticEnvironment クラスのメンバー関数 run の 3 引数のオーバーロードは、引数 address で指定されたベクトルをアドレスとして記憶装置から値を読み出し、その値がコンティニュエーションであれば、そのコンティニュエーションを実行する。引数 arguments は引数の名前と値のマップである。これらの引数はゲスト言語からコンティニュエーション変数で参照できる。引数 return_arguments はゲスト言語の制御構文 halt の引数の名前と値のマップである。

bool is_continuation (pastelstitch::CompoundVector address) const

pastelstitch::StaticEnvironment クラスのメンバー関数 is_continuation は、引数 address で指定されたベクトルをアドレスとして記憶装置から値を読み出し、その値がコンティニュエーションであれば true、そうでなければ false を返す。

void add_primitive_operation (pastelstitch::CompoundVector address, std::shared_ptr <pastelstitch::PrimitiveOperation> primitive_operation)

pastelstitch::StaticEnvironment クラスのメンバー関数 add_primitive_operation は、プリミティブ演算を登録する。引数 address のベクトルでアドレスを指定する。引数 primitive_operation は、pastelstitch::PrimitiveOperation クラスの派生クラスのインスタンスへの共有ポインターである。

pastelstitch::PrimitiveOperation クラス

pastelstitch::PrimitiveOperation クラスは、パステルステッチのプリミティブ演算である。PrimitiveOperation クラスは純粋バーチャルクラスであり、メンバー関数 void operator () () が純粋バーチャル関数になっている。プリミティブ演算を作成するには、PrimitiveOperation クラスの派生クラスを宣言し、その派生クラスのメンバー関数 void operator () () の実体を定義する必要がある。さらに、プリミティブ演算を登録するには、PrimitiveOperation クラスの派生クラスのインスタンスを作成し、静的環境 (pastelstitch::StaticEnvironment クラス) のメンバー関数 add_primitive_operation で登録する。

pastelstitch::PrimitiveOperation クラスには以下のメンバー関数がある。これらのメンバー関数は void operator () () 関数で使用できる。

std::shared_ptr <class pastelstitch::Value> get_argument (std::string proposition = std::string ("main")) const

pastelstitch::PrimitiveOperation クラスの get_argument メンバー関数は、プリミティブ演算の引数の値を得る。引数 proposition を省略すると引数 main の値を得る。得られた値を書き換えてはいけない。そのまま他のメンバー関数 (set_return_value) に渡すか、pastelstitch::Value クラスの新たなインスタンスを作成して、それを使用すること。

void set_return_value (std::shared_ptr <class pastelstitch::Value>)

pastelstitch::PrimitiveOperation クラスの set_return_value メンバー関数は、プリミティブ演算の戻り値を指定する。このメンバー関数を実行せずにメンバー関数 void operator () () を終了したときは、戻り値は真偽値型の false になる。

pastelstitch::Value クラス

pastelstitch::Value クラスはパステルステッチの値である。パステルステッチの値に新たなプリミティブな型を追加するには、pastelstitch::Value クラスの派生クラスを宣言する。pastelstitch::Value クラスは以下のメンバー関数を持つ。

このうち std::string format () const は純粋バーチャルメンバー関数なので、派生クラスでこのメンバー関数を定義する必要がある。他のメンバー関数は、pastelstitch::Value クラスで定義されている動作が不適であるときのみ、派生クラスで定義すればよい。また、これらのメンバー関数と名前が同じで意味が異なるメンバー関数を、派生クラスで定義してはいけない。

std::string format () const

pastelstitch::Value クラスの format メンバー関数は、値を文字列に変換したものを返す。プリミティブ演算 print では、この文字列が表示される。また、値を文字列型に変換したとき、この文字列が使われる。この文字列から元の値が復元できるようにする必要はない。このメンバー関数は純粋バーチャルメンバー関数なので、派生クラスで必ず定義する必要がある。

bool is_true () const

pastelstitch::Value クラスの is_true メンバー関数は、この値が真偽値の「真」と解釈されるかどうかを返す。パステルステッチでは、真偽値型の false のみを偽と解釈し、それ以外の値はすべて真と解釈するべきである。pastelstitch::Value クラスの is_true メンバー関数は常に true を返す。pastelstitch::BooleanValue クラスを除いて、派生クラスでこのメンバー関数を定義するべきではない。

bool is_vector () const

pastelstitch::Value クラスの is_vector メンバー関数は、値がベクトルとして解釈できるかどうかを返す。このメンバー関数を派生クラスで定義するべきではない。

void get_vector (class pastelstitch::CompoundVector &compound_vector) const

pastelstitch::Value クラスの get_vector メンバー関数は、値がベクトルとして解釈できるならば、そのベクトルを参照渡しで返す。このメンバー関数を派生クラスで定義するべきではない。

ゲスト言語の命令

ゲスト言語では、ホスト言語とのインターフェースのために、以下の命令が用意されている。

制御構文 halt

制御構文 halt を実行すると、パステルステッチのインタープリターを停止し、ホスト言語に制御を戻す。実行位置がプログラムの終端に達した場合も同様である。

CC0
To the extent possible under law, Hakaba Hitoyo has waived all copyright and related or neighboring rights to パステルステッチ C++ インターフェース. This work is published from: 日本.