示例#1
0
        private void AnalyRaw(StmtRaw raw)
        {
            Stmt stmt  = CreateStmt((StmtRaw)raw);
            Stmt stmt2 = stmt.Analy();

            Stmts.Add(stmt2);
        }
示例#2
0
        private List <StmtRaw> ParseStmtCall()
        {
            List <StmtRaw> list = new List <StmtRaw>();

            while (currLineTokenTape.HasCurrent)
            {
                StmtRaw stmt = ParseStmtCallSingle();
                if (stmt != null)
                {
                    list.Add(stmt);
                }
            }
            TapeMoveNextNotBuildLine();
            return(list);
        }
示例#3
0
        public object ParseCurrent()
        {
            if (!tape.HasCurrent)
            {
                return(null);
            }
            //Debugr.WriteLine(tape.Current.ToString());
            //if (tape.Current.ToString().IndexOf("之和")!=-1)
            //{
            //    Debugr.WriteLine(tape.Current.ToString());
            //}
            BuildCurrentLineTape();
            LexToken firstToken = currLineTokenTape.First;

            if (firstToken.IsKind(TokenKindKeyword.IF))
            {
                StmtRaw stmt = ParseIf();
                return(stmt);
            }
            else if (firstToken.IsKind(TokenKindKeyword.Dang))
            {
                StmtRaw stmt = ParseWhile();
                return(stmt);
            }
            else if (firstToken.IsKind(TokenKindKeyword.Repeat))
            {
                StmtRaw stmt = ParseRepeat();
                return(stmt);
            }
            else if (firstToken.IsKind(TokenKindKeyword.Loop))
            {
                StmtRaw stmt = ParseForeach();
                return(stmt);
            }
            else if (firstToken.IsKind(TokenKindKeyword.Catch))
            {
                StmtRaw stmt = ParseCatch();
                return(stmt);
            }
            else
            {
                List <StmtRaw> stmts = ParseStmtCall();
                return(stmts);
            }
        }
示例#4
0
 private Stmt CreateStmt(StmtRaw raw)
 {
     if (raw is StmtCallRaw)
     {
         StmtCall stmt = new StmtCall((StmtCallRaw)raw, this);
         return(stmt);
     }
     else if (raw is StmtCatchRaw)
     {
         StmtCatch stmt = new StmtCatch((StmtCatchRaw)raw, this);
         return(stmt);
     }
     else if (raw is StmtForeachRaw)
     {
         StmtForeach stmt = new StmtForeach((StmtForeachRaw)raw, this);
         return(stmt);
     }
     else if (raw is StmtIfRaw)
     {
         StmtIf stmt = new StmtIf((StmtIfRaw)raw, this);
         return(stmt);
     }
     else if (raw is StmtRepeatRaw)
     {
         StmtRepeat stmt = new StmtRepeat((StmtRepeatRaw)raw, this);
         return(stmt);
     }
     else if (raw is StmtWhileRaw)
     {
         StmtWhile stmt = new StmtWhile((StmtWhileRaw)raw, this);
         return(stmt);
     }
     else
     {
         throw new CCException();
     }
 }