asCScriptNode *asCParser::ParseStatement() { sToken t1; GetToken(&t1); RewindTo(&t1); if( t1.type == ttIf ) return ParseIf(); else if( t1.type == ttFor ) return ParseFor(); else if( t1.type == ttWhile ) return ParseWhile(); else if( t1.type == ttReturn ) return ParseReturn(); else if( t1.type == ttStartStatementBlock ) return ParseStatementBlock(); else if( t1.type == ttBreak ) return ParseBreak(); else if( t1.type == ttContinue ) return ParseContinue(); else if( t1.type == ttDo ) return ParseDoWhile(); else if( t1.type == ttSwitch ) return ParseSwitch(); else return ParseExpressionStatement(); }
/* ParseStatement - parse a statement */ void ParseStatement(ParseContext *c, Token tkn) { /* dispatch on the statement keyword */ switch (tkn) { case T_REM: /* just a comment so ignore the rest of the line */ break; case T_DEF: ParseDef(c); break; case T_END_DEF: ParseEndDef(c); break; case T_DIM: ParseDim(c); break; case T_LET: ParseLet(c); break; case T_IF: ParseIf(c); break; case T_ELSE: ParseElse(c); break; case T_ELSE_IF: ParseElseIf(c); break; case T_END_IF: ParseEndIf(c); break; case T_END: ParseEnd(c); break; case T_FOR: ParseFor(c); break; case T_NEXT: ParseNext(c); break; case T_DO: ParseDo(c); break; case T_DO_WHILE: ParseDoWhile(c); break; case T_DO_UNTIL: ParseDoUntil(c); break; case T_LOOP: ParseLoop(c); break; case T_LOOP_WHILE: ParseLoopWhile(c); break; case T_LOOP_UNTIL: ParseLoopUntil(c); break; case T_STOP: ParseStop(c); break; case T_GOTO: ParseGoto(c); break; case T_RETURN: ParseReturn(c); break; case T_PRINT: ParsePrint(c); break; case T_IDENTIFIER: if (SkipSpaces(c) == ':') { DefineLabel(c, c->token, codeaddr(c)); break; } UngetC(c); default: SaveToken(c, tkn); ParseImpliedLetOrFunctionCall(c); break; } }
ExprNode* Parser :: ParseStatement(){ Token *token = scan.Get(); ExprNode* Statement; if(token->Value == "if") return ParseIf(); if(token->Value == "for"){ if (isCanUseBreak){ CycleStatement = ParseFor(); Statement = CycleStatement; } else { isCanUseBreak = true; CycleStatement = ParseFor(); Statement = CycleStatement; isCanUseBreak = false; } return Statement; } if(token->Value == "while"){ if (isCanUseBreak){ CycleStatement = ParseWhile(); Statement = CycleStatement; } else { isCanUseBreak = true; CycleStatement = ParseWhile(); Statement = CycleStatement; CycleStatement = nullptr; isCanUseBreak = false; } return Statement; } if(token->Value == "do"){ if (CycleStatement){ CycleStatement = ParseDoWhile(); Statement = CycleStatement; } else { isCanUseBreak = true; CycleStatement = ParseDoWhile(); Statement = CycleStatement; CycleStatement = nullptr; isCanUseBreak = false; } return Statement; } // if(isEq(token, _SEPARATION, "(")) // return ParseBlock(); if(token->Value == "return" || token->Value == "break" || token->Value == "continue") return ParseJumpStatement(); else return ParseExpr(); int *a ; int s = a - a; s++; }