Exemple #1
0
        public void Start(TextReader reader, TextWriter writer)
        {
            var env      = new Environment();
            var macroEnv = new Environment();

            while (true)
            {
                writer.Write(Prompt);
                var line = reader.ReadLine();
                if (string.IsNullOrEmpty(line))
                {
                    return;
                }

                var l = new Lexer.Lexer(line);
                var p = new Parser.Parser(l);

                var program = p.ParseProgram();
                if (p.Errors.Any())
                {
                    PrintParserErrors(writer, p.Errors);
                    continue;
                }

                var evaluator = new Evaluator.Evaluator();
                evaluator.DefineMacros(program, macroEnv);
                var expanded  = evaluator.ExpandMacros(program, macroEnv);
                var evaluated = evaluator.Eval(expanded, env);
                if (evaluated != null)
                {
                    writer.WriteLine(evaluated.Inspect());
                }
            }
        }