private Program TestParseProgram(string input) { var l = new Lexer.Lexer(input); var p = new Parser.Parser(l); return(p.ParseProgram()); }
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)); }
public void Parse() { Contract.Requires(Tokenizer != null); Contract.Requires(TokenStream != null); Parser = new Parser.Parser(TokenStream); AstTree = Parser.ParseProgram(); PrintDebug(AstTree, "Parse tree"); }