Ejemplo n.º 1
0
 // Lisp.evalして、読みやすい形式に変換して返す。
 // 返されたものがstring(文字列)なら、わかるように ' 'で囲って返す。
 public static string eval(string e)
 {
     var lisp = new Lisp();
     var o = lisp.eval(e);
     return lisp.SExp2string(o);
 }
Ejemplo n.º 2
0
 // Lisp.evalの返し値(SExp)を読みやすい形式に変換して返す。
 // 返されたものがstring(文字列)なら、わかるように ' 'で囲って返す。
 public static string eval(SExp e)
 {
     var lisp = new Lisp();
         var ret = lisp.eval(e);
         return lisp.SExp2string(ret);
 }
Ejemplo n.º 3
0
        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();
            }
        }