private Program TestParseProgram(string input)
        {
            var l = new Lexer.Lexer(input);
            var p = new Parser.Parser(l);

            return(p.ParseProgram());
        }
Example #2
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());
                }
            }
        }
        private IObject TestEval(string input)
        {
            var l       = new Lexer.Lexer(input);
            var p       = new Parser.Parser(l);
            var program = p.ParseProgram();
            var env     = new Environment();

            return(new Evaluator().Eval(program, env));
        }
Example #4
0
        public void Parse()
        {
            Contract.Requires(Tokenizer != null);
            Contract.Requires(TokenStream != null);

            Parser = new Parser.Parser(TokenStream);

            AstTree = Parser.ParseProgram();
            PrintDebug(AstTree, "Parse tree");
        }