Esempio n. 1
0
 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);
 }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
 public StmtIf_ElseIf(StmtIf parentStmt, StmtIfRaw.IfElseStmt raw)
 {
     ParentStmt = parentStmt;
     Raw        = raw;
     StmtBody   = new StmtBlock(this, raw.Body);
 }