Ejemplo n.º 1
0
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();
}
Ejemplo n.º 2
0
/* 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;
    }
}
Ejemplo n.º 3
0
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++;


}