private StmtIf.StmtIfTrue ParseTruePart() { StmtIf.StmtIfTrue eistmt = new StmtIf.StmtIfTrue(); eistmt.KeyToken = tape.Current; tape.MoveNext();//跳过否则如果 eistmt.Condition = ParseRawExpLine(); eistmt.Body = ParseStmtBlock(eistmt.KeyToken.Position); return(eistmt); }
private Stmt ParseIf() { StmtIf ifStmt = new StmtIf(); ifStmt.IfToken = tape.Current; StmtIf.StmtIfTrue ifPart = ParseTruePart(); ifStmt.Parts.Add(ifPart); while (tape.CurrentKind == TokenKind.ELSEIF) { StmtIf.StmtIfTrue elseifPart = ParseTruePart(); ifStmt.Parts.Add(elseifPart); } if (tape.CurrentKind == TokenKind.ELSE) { CodePosition pos = tape.Current.Position; tape.MoveNext(); ifStmt.ElsePart = ParseStmtBlock(pos); } return(ifStmt); }