private StmtIfRaw.IfElseStmt ParseTruePart() { StmtIfRaw.IfElseStmt eistmt = new StmtIfRaw.IfElseStmt(); eistmt.KeyToken = (LexTokenText)currLineTokenTape.Current; currLineTokenTape.MoveNext();//跳过否则如果 eistmt.ElseIfExp = ParseIfRawExpLine(); TapeMoveNext(); eistmt.Body = ParseStmtBlockRaw(eistmt.KeyToken.Position.Col); return(eistmt); }
private StmtRaw ParseIf() { StmtIfRaw ifStmt = new StmtIfRaw(); ifStmt.IfToken = (LexTokenText)currLineTokenTape.Current; StmtIfRaw.IfElseStmt ifPart = ParseTruePart(); ifStmt.ElseIfParts.Add(ifPart); while (currLineTokenTape.Current.IsKind(TokenKindKeyword.ELSEIF)) { StmtIfRaw.IfElseStmt elseifPart = ParseTruePart(); ifStmt.ElseIfParts.Add(elseifPart); } if (currLineTokenTape.Current.IsKind(TokenKindKeyword.ELSE)) { ifStmt.ElsePart = new StmtIfRaw.ElseStmt(); ifStmt.ElsePart.KeyToken = (LexTokenText)currLineTokenTape.Current; var pos = tape.Current.StartCol; TapeMoveNext(); ifStmt.ElsePart.Body = ParseStmtBlockRaw(pos); } return(ifStmt); }
public StmtIf_ElseIf(StmtIf parentStmt, StmtIfRaw.IfElseStmt raw) { ParentStmt = parentStmt; Raw = raw; StmtBody = new StmtBlock(this, raw.Body); }