自由モノイドプログラミング言語の作成(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
Python と C# のコードを生成するインターフェースです。メンバーは以下のものがあります。
- GeneratePython(yieldp, typep,indp, indcount, perf): 構文木から Python コードの文字列に変換します。
- yieldp: yield を表示するかどうかを表します。
- typep: 型名を表示するかどうかを表します(現状は表示していないので使っていません)。
- indp: インデントを表示するかどうかを表します。
- indcount: インデントの個数。
- perf: 式のステートメントを変換する関数。
- GenerateCS(yieldp, typep, indp, indcount, perf): 構文木から C# コードの文字列に変換します。
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); }





