Пример #1
0
        public void repl()
        {
            // Can't seem to get ResourceLoader to figure out to use *our* assembly
            // by default.
            var assembly = Assembly.GetCallingAssembly();

            ResourceLoader.ExecuteResource(assembly, env, "Lisp.REPL.lisp");

            /*
             * // TODO: We ought to implement the repl in Lisp also
             * // i.e. expose (read), (eval), (print) as builtin functions.
             * Console.WriteLine("First Class Lisp REPL. Ctrl-Z + Enter to exit.");
             * prompt();
             * string line;
             * var t = System.Console.In;
             * while ((line = Console.ReadLine()) != null)
             * {
             *  try
             *  {
             *      var parsed = new Parser(Scanner.Create(line)).parse();
             *      var result = evaluator.Evaluate(env, parsed);
             *      Console.WriteLine("{0}", result);
             *      prompt();
             *  }
             *  catch (Exception e)
             *  {
             *      Console.Error.WriteLine("Error: {0}", e);
             *      prompt();
             *  }
             * }
             */
        }
Пример #2
0
 public static Environment AddTo(Environment env)
 {
     env = Arithmetic.Extend(env).ToMutable();
     env = env.Extend("append", Append.Instance);
     env = SymbolFunctions.Extend(env);
     ResourceLoader.ExecuteResource(env, "LispEngine.Bootstrap.Builtins.lisp");
     env = Reader.AddTo(env);
     return(env);
 }
Пример #3
0
 public static LexicalEnvironment AddTo(LexicalEnvironment env)
 {
     env = Arithmetic.Extend(env);
     env.Define("append", Append.Instance);
     env = SymbolFunctions.Extend(env);
     ResourceLoader.ExecuteResource(env, "LispEngine.Bootstrap.Builtins.lisp");
     ResourceLoader.ExecuteResource(env, "LispEngine.Bootstrap.Library.lisp");
     env = Reader.AddTo(env);
     return(env);
 }
        public static LexicalEnvironment Create()
        {
            var env = CreateSandbox();

            // Adding reflection builtins enables a lisp engine
            // to execute any code.
            env = ReflectionBuiltins.AddTo(env);
            // Add functions for reading files, executing lisp programs
            // defined in files.
            ResourceLoader.ExecuteResource(new Statistics(), typeof(StandardEnvironment).GetTypeInfo().Assembly, env, "LispEngine.Bootstrap.IO.lisp");
            return(env);
        }
Пример #5
0
 public static Environment AddTo(Environment env)
 {
     // Invoke a given instance method on an object
     env = env.Extend("make-instance-method", new MakeInstanceMethod().ToStack());
     env = env.Extend("new", new New().ToStack());
     // Bring all static symbols from a particular assembly into the current environment.
     env = env.Extend("ref", new Ref());
     env = env.Extend("atom", new WrapAtom().ToStack());
     // Define "." as a macro to invoke a given method
     ResourceLoader.ExecuteResource(env, "LispEngine.ReflectionBinding.ReflectionBuiltins.lisp");
     return(env);
 }
Пример #6
0
        public static LexicalEnvironment AddTo(LexicalEnvironment env)
        {
            env = Arithmetic.Extend(env);
            env.Define("append", Append.Instance);
            env = SymbolFunctions.Extend(env);
            var assembly = typeof(Builtins).GetTypeInfo().Assembly;

            ResourceLoader.ExecuteResource(new Statistics(), assembly, env, "LispEngine.Bootstrap.Builtins.lisp");
            ResourceLoader.ExecuteResource(new Statistics(), assembly, env, "LispEngine.Bootstrap.Library.lisp");
            env = Reader.AddTo(env);
            return(env);
        }
Пример #7
0
 public static LexicalEnvironment AddTo(LexicalEnvironment env)
 {
     // Invoke a given instance method on an object
     env.Define("make-instance-method", DelegateFunctions.MakeDatumFunction(MakeInstanceMethod, ",make-instance-method"));
     env.Define("get-static-method", DelegateFunctions.MakeDatumFunction(GetStaticMethod, ",get-static-method"));
     env.Define("get-type", new GetTypeFunction().ToStack());
     env.Define("new", new New().ToStack());
     env.Define("atom", new WrapAtom().ToStack());
     // Define "dot" and "slash" as a macros which allow us to use
     // Clojure-style syntax for invoking and referring to methods.
     ResourceLoader.ExecuteResource(env, "LispEngine.ReflectionBinding.ReflectionBuiltins.lisp");
     return(env);
 }
Пример #8
0
 static void Main(string[] args)
 {
     try
     {
         var env = StandardEnvironment.Create();
         env.Define("args", DatumHelpers.atomList(args));
         var statistics = new Statistics();
         env = statistics.AddTo(env);
         ResourceLoader.ExecuteResource(statistics, Assembly.GetExecutingAssembly(), env, "Lisp.REPL.lisp");
     }
     catch (Exception ex)
     {
         Console.Error.WriteLine("ERROR:\n{0}\n{1}\n", ex, ex.StackTrace);
     }
 }