// Lisp.evalして、読みやすい形式に変換して返す。 // 返されたものがstring(文字列)なら、わかるように ' 'で囲って返す。 public static string eval(string e) { var lisp = new Lisp(); var o = lisp.eval(e); return lisp.SExp2string(o); }
// Lisp.evalの返し値(SExp)を読みやすい形式に変換して返す。 // 返されたものがstring(文字列)なら、わかるように ' 'で囲って返す。 public static string eval(SExp e) { var lisp = new Lisp(); var ret = lisp.eval(e); return lisp.SExp2string(ret); }
static void Main(string[] args) { //LispTest.UnitTest(); bool needHelp = true; for (int i = 0; i < args.Length;++i ) { switch (args[i]) { case "-include": // 読み込むファイルが指定されている。 eval(args[i + 1],true); needHelp = false; ++i; break; case "-import": // 読み込むファイルが指定されている。 eval(args[i + 1],false); needHelp = false; ++i; break; case "-test": // UnitTest LispTest.UnitTest(); needHelp = false; break; // http://d.hatena.ne.jp/ak11/20091122 のpatch case "-compile": try { string filename = args[++i]; string output = args[++i]; // 出力ファイルよりソースファイルが新しい時のみ処理 if (!File.Exists(output) || File.GetLastWriteTime(output) < File.GetLastWriteTime(filename)) { Console.WriteLine(filename + " => " + output); var lisp = new Lisp(); lisp.setVar("outfile", new SExp {elms = output}); SExp ret = lisp.eval(new ConvSExp().import(filename)); // Console.WriteLine(lisp.SExp2string(ret)); } } catch (Exception ex) { Console.WriteLine(ex.ToString()); } needHelp = false; break; case "-help": case "-h": Help(); needHelp = false; break; } } if (needHelp) { Help(); } }