自由モノイドプログラミング言語の作成(MonIter バージョン1.2 仕様(4))
今後は構文の説明を自動的に作成できるようにしていくとして、今はコメントに説明を書いていきます。
構文要素に対応するクラス(ExpressionStatement クラス:式のステートメント)
/// <summary> /// 式のステートメントを表すクラス:式で構成されます。 /// </summary> internal class ExpressionStatement : Statement { /// <summary> /// 式(無限自由モノイド) /// </summary> private readonly Expression expression; public ExpressionStatement(Expression expression) { this.expression = expression; } /// <summary> /// 式を評価して無限自由モノイドの値を取得します。 /// </summary> /// <param name="env">引数の値が記録されています。</param> /// <param name="prog">構文木の全体。関数の定義をここから取得します。</param> /// <returns>式の値(無限自由モノイド)</returns> public FreeMonoid<int> Eval(Env<FreeMonoidUnion> env, Prog prog) { return expression.Eval(env, prog); } /// <summary> /// 式を MonIter のコードの文字列に変換して取得します。 /// </summary> /// <returns>MonIter のコードの文字列</returns> public string Print() { return expression.Print(); } /// <summary> /// 式を Python のコードの文字列に変換して取得します。 /// </summary> /// <param name="yieldp">yield を表示するかどうか</param> /// <param name="typep">型名を表示するかどうか</param> /// <param name="indp">インデントを表示するかどうか</param> /// <param name="indcount">インデントの個数</param> /// <param name="perf">式のステートメントの文字列を変換する関数</param> /// <returns>Python のコードの文字列</returns> public string GeneratePython(bool yieldp, bool typep, bool indp, int indcount, Func<string, string> perf) { return perf(expression.GeneratePython(false, typep, false, indcount, perf)); } /// <summary> /// 式を C# のコードの文字列に変換して取得します。 /// </summary> /// <param name="yieldp">yield return を表示するかどうか</param> /// <param name="typep">型名を表示するかどうか</param> /// <param name="indp">インデントを表示するかどうか</param> /// <param name="indcount">インデントの個数</param> /// <param name="perf">式のステートメントの文字列を変換する関数</param> /// <returns>C# のコードの文字列</returns> public string GenerateCS(bool yieldp, bool typep, bool indp, int indcount, Func<string, string> perf) { return perf(expression.GenerateCS(false, typep, false, indcount, perf)); } }





