예제 #1
0
        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);
        }
예제 #2
0
        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);
        }
예제 #3
0
파일: ILang.cs 프로젝트: isakkarlsson/ILang
        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);
            }
        }