private void AnalyRaw(StmtRaw raw) { Stmt stmt = CreateStmt((StmtRaw)raw); Stmt stmt2 = stmt.Analy(); Stmts.Add(stmt2); }
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); }
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); } }
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(); } }