非専門的シンギュラリティー研究所

無限に動き続けるシステムを表す方法を AI なども使って考えていきます。

自由モノイドのイテレーター(18)

自由モノイドプログラミング言語の作成(MonIter バージョン1.2 仕様(2))

構文要素に対応するインターフェース

Statement

式のステートメントまたは関数の定義を表します。メンバーは以下のものがあります。

  • Eval(env, prog): 構文木を評価して無限版自由モノイドの結果を取得します。
    • env: 引数の値を保存しておくオブジェクト。
    • prog: 構文木の全体。関数の定義をここから取得します。
  • Print(): 構文木から MonIter コードの文字列に変換します。
    internal interface Statement : CodeGeneratable
    {
        FreeMonoid<int> Eval(Env<FreeMonoidUnion> env, Prog prog);
        string Print();
    }
Term

関数または数値の式を表します。メンバーは Statement と同様です。

    internal interface Term : CodeGeneratable
    {
        FreeMonoid<int> Eval(Env<FreeMonoidUnion> env, Prog prog);
        string Print();
    }
DomainExpression

数値の式を表します。メンバーは以下のものがあります。

  • Eval(env): 構文木を評価して無限版自由モノイドの結果を取得します。
    • env: 引数の値を保存しておくオブジェクト。
  • Print(): 構文木から MonIter コードの文字列に変換します。
    internal interface DomainExpression : CodeGeneratable
    {
        Number Eval(Env<FreeMonoidUnion> env);
        string Print();
    }
CodeGeneratable

PythonC# のコードを生成するインターフェースです。メンバーは以下のものがあります。

  • GeneratePython(yieldp, typep,indp, indcount, perf): 構文木から Python コードの文字列に変換します。
    • yieldp: yield を表示するかどうかを表します。
    • typep: 型名を表示するかどうかを表します(現状は表示していないので使っていません)。
    • indp: インデントを表示するかどうかを表します。
    • indcount: インデントの個数。
    • perf: 式のステートメントを変換する関数。
  • GenerateCS(yieldp, typep, indp, indcount, perf): 構文木から C# コードの文字列に変換します。
    • yieldp: yield return を表示するかどうかを表します。
    • typep: 型名を表示するかどうかを表します(C# では型名を表示しなければならないので使っていません)。
    • indp: インデントを表示するかどうかを表します。
    • indcount: インデントの個数。
    • perf: 式のステートメントを変換する関数。
    internal interface CodeGeneratable
    {
        string GeneratePython(bool yieldp, bool typep, bool indp, int indcount, Func<string, string> perf);
        string GenerateCS(bool yieldp, bool typep, bool indp, int indcount, Func<string, string> perf);
    }