public void Fatal(ILangErrorCode errorCode, Parser parser) { Parser.OnMessage(parser, MessageType.SyntaxError, new Dictionary<string, object>() { {"LineNumber", 0}, {"Position", 0}, {"TokenText", ""}, {"Error", "FATAL ERROR: " + errorCode} }); Environment.Exit(errorCode.Status); }
public void Flag(Token token, ILangErrorCode errorCode, Parser parser) { Parser.OnMessage(parser, MessageType.SyntaxError, new Dictionary<string, object>() { {"LineNumber", token.LineNumber}, {"Position", token.Position}, {"TokenText", token.Text}, {"Error", errorCode} }); if (++errors > MAX_ERROR) Fatal("too_many_errors", parser); }
public ILang(string file, string flags) { flags = "-x -i"; bool xref = flags.Contains("-x"); bool inter = flags.Contains("-i"); try { using (_source = new Source(new StreamReader(file))) { Source.Message += new EventHandler<MessageEventArgs>(MessageEmitted); Parser.Message += new EventHandler<MessageEventArgs>(MessageEmitted); _parser = new ILangParserFactory().GetParser(_source); _parser.Parse(); _iCode = _parser.ICode; _symTab = _parser.SymbolicTable; _executor = new Executor(); _executor.Process(_iCode, _symTab); } if (xref) { CrossReferencer.Print(ILangParser.Stack); } if (inter) { Console.WriteLine(); new SyntaxTreePrinter(Console.Out).Print(_iCode); } } catch (Exception e) { Console.WriteLine("******* Internal error. *******"); Console.WriteLine(e.Message); Console.WriteLine(e.StackTrace); } }