예제 #1
0
        public override ICodeNode Parse(Token token)
        {
            token = NextToken(); // after method
            ICodeNode methodNode = IntermediateCodeFactory.CreateICodeNode("method");

            StatementParser statementParser = new StatementParser(this);
            statementParser.ParseList(token, ref methodNode, "end", "missing_end");
            token = CurrentToken();
            return methodNode;
        }
예제 #2
0
        public override void Parse()
        {
            ICode = IntermediateCodeFactory.CreateICode();
            Stopwatch.Start();
            Token token = NextToken();
            ICodeNode rootNode = null;

            if (token.Text == "method")
            {
                StatementParser parser = new StatementParser(this);
                rootNode = parser.Parse(token);

                token = CurrentToken(); //this should now be "end_of_file"
            }
            else
            {
                ErrorHandler.Singleton.Flag(token, "unexpected_token", this);
            }
            if (token.TokenType != "semicolon")
            {
                ErrorHandler.Singleton.Flag(token, "missing_end", this);
            }

            if (rootNode != null)
            {
                ICode.Root = rootNode;
            }

            Stopwatch.Stop();

            Parser.OnMessage(this, MessageType.ParserSummary, new Dictionary<string, object>
            {
                {"LineNumber", token.LineNumber},
                {"ErrorCount" , ErrorCount},
                {"Elapsed" , Stopwatch.Elapsed}
            });
        }