/// <summary> /// 式からなる<see cref="KecaknoahAst"/>をプリコンパイルします。 /// </summary> /// <param name="ast">対象の<see cref="KecaknoahAst"/></param> /// <returns>プリコンパイル結果</returns> public KecaknoahIL PrecompileExpression(KecaknoahAst ast) { var result = new KecaknoahIL(); result.PushCodes(PrecompileExpression(ast.RootNode)); return(result); }
/// <summary> /// 1つのソースコード全体からなる<see cref="KecaknoahAst"/>をプリコンパイルします。 /// </summary> /// <param name="ast">対象の<see cref="KecaknoahAst"/></param> /// <returns>プリコンパイル結果</returns> public KecaknoahSource PrecompileAll(KecaknoahAst ast) { var result = new KecaknoahSource(); current = result; foreach (var i in ast.RootNode.Children) { if (i is KecaknoahClassAstNode) { result.classes.Add(PrecompileClass(i as KecaknoahClassAstNode)); } else if (i is KecaknoahFunctionAstNode) { result.methods.Add(PrecompileFunction(i as KecaknoahFunctionAstNode)); } else { throw new InvalidOperationException("トップレベルにはクラスとメソッド以外おけません"); } } current = null; return(result); }