예제 #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();
}
예제 #2
0
static void ParseStatement (scontext_t owner)
{
	if (StatementIndex == MAX_STATEMENT_DEPTH)
	{
		PR_ParseError("statement overflow");
	}
	ContextHistory[StatementIndex++] = owner;

	if (TK_CHECK(TK_LBRACE))
	{
		ContextLevel += EnterContext[owner];
		do
		{
			ParseStatement(owner);
		} while (!TK_CHECK(TK_RBRACE));

		ContextLevel -= EnterContext[owner];
		StatementIndex--;
		return;
	}

	if (TK_CHECK(TK_SEMICOLON))
	{
		StatementIndex--;
		return;
	}
	if (LX_CheckFetch("return"))
	{
		ParseReturn();
		StatementIndex--;
		return;
	}
	if (LX_CheckFetch("loop"))
	{
		ParseLoop();
		StatementIndex--;
		return;
	}
	if (LX_CheckFetch("while"))
	{
		ParseWhile();
		StatementIndex--;
		return;
	}
	if (LX_CheckFetch("until"))
	{
		ParseUntil();
		StatementIndex--;
		return;
	}
	if (LX_CheckFetch("do"))
	{
		ParseDo();
		StatementIndex--;
		return;
	}
	if (LX_CheckFetch("switch"))
	{
		ParseSwitch();
		StatementIndex--;
		return;
	}
	if (LX_CheckFetch("case"))
	{
		if (owner != SCONTEXT_SWITCH)
		{
			PR_ParseError("misplaced case");
		}
		ParseCase();
		StatementIndex--;
		return;
	}
	if (LX_CheckFetch("break"))
	{
		if (BreakAncestor() == false)
		{
			PR_ParseError("misplaced break");
		}
		ParseBreak();
		StatementIndex--;
		return;
	}
	if (LX_CheckFetch("continue"))
	{
		if (ContinueAncestor() == false)
		{
			PR_ParseError("misplaced continue");
		}
		ParseContinue();
		StatementIndex--;
		return;
	}
	if (LX_CheckFetch("default"))
	{
		ParseDefault();
		StatementIndex--;
		return;
	}
	if (LX_CheckFetch("thinktime"))
	{
		ParseThinktime();
		StatementIndex--;
		return;
	}
	if (LX_CheckFetch("local"))
	{
		ParseLocalDefs();
		StatementIndex--;
		return;
	}
	if (LX_Check("float") || LX_Check("vector")
		|| LX_Check("entity") || LX_Check("string")
		|| LX_Check("void"))
	{
		ParseLocalDefs();
		StatementIndex--;
		return;
	}
	if (LX_CheckFetch("if"))
	{
		ParseIf();
		StatementIndex--;
		return;
	}

	EX_Expression(TOP_PRIORITY);
	LX_Require(";");
	StatementIndex--;
}
예제 #3
0
int CTcapParser::DoTcapParse(unsigned char* inbuf, int inbuf_len, struct TCAPParseResult *result, unsigned char tcaptpye)
{
    int iParseRslt = -1;


    char szDebug[255];
    memset(szDebug, 0, sizeof(szDebug));

    if (NULL == inbuf || inbuf_len <= 0)
    {
        Print("!!!WARN: %s:%s:DoTcapParse... the input parameter is error!", __FILE__, __FUNCTION__);
        return -1;
    }

    STcapIEHeader stTag;
    if(ParseIEHeader(inbuf, inbuf_len, &stTag) < 0)
    {
        Print("!!!WARN: %s::%d:TCAP MESSAGE PARSE TAG ERROR!", __FILE__, __LINE__);
        return -1;
    }


    memset(result,0,sizeof(*result));
    result->ucTcapMsgType = stTag.tagID;
    if(0 == tcaptpye) //ITU-T TCAP
    {
        switch (stTag.tagID)
        {
            case TCAP_MSG_BEGIN:
                iParseRslt = ParseBegin(stTag.pData, stTag.dataLen, result);
                break;

            case TCAP_MSG_CONTINUE:
                iParseRslt = ParseContinue(stTag.pData, stTag.dataLen, result);
                break;

            case TCAP_MSG_END:
                iParseRslt = ParseEnd(stTag.pData, stTag.dataLen, result);
                break;

            case TCAP_MSG_UNIDIRE:
                iParseRslt = ParseUnidire(stTag.pData, stTag.dataLen, result);
                break;

            case TCAP_MSG_ABORT:
                iParseRslt = ParseAbort(stTag.pData, stTag.dataLen, result);
                break;

            default:
                //sprintf(szDebug, "DoTcapParse... The unknown Tcap_Message is :%02x\n",stTag.tagID);
                //DEBUG(EN_PRINT_LEVEL_WARNING)(szDebug);
                Print("DoTcapParse... The unknown Tcap_Message is :%02x\n",stTag.tagID);
                break;
        }
    }
    else // ANSI TCAP
    {
        switch(stTag.tagID)
        {
            case ANSI_TCAP_PT_UNIDIRE:
                iParseRslt = ParseANSIUnidire(stTag.pData, stTag.dataLen, result);
                break;
            case ANSI_TCAP_PT_QWP:
                iParseRslt = ParseANSIQWP(stTag.pData, stTag.dataLen, result);
                break;
            case ANSI_TCAP_PT_NQWP:
                iParseRslt = ParseANSINQWP(stTag.pData, stTag.dataLen, result);
                break;
            case ANSI_TCAP_PT_RSP:
                iParseRslt = ParseANSIRsp(stTag.pData, stTag.dataLen, result);
                break;
            case ANSI_TCAP_PT_CWP:
                iParseRslt = ParseANSICWP(stTag.pData, stTag.dataLen, result);
                break;
            case ANSI_TCAP_PT_NCWP:
                iParseRslt = ParseANSINCWP(stTag.pData, stTag.dataLen, result);
                break;
            case ANSI_TCAP_PT_ABORT:
                iParseRslt = ParseANSIAbort(stTag.pData, stTag.dataLen, result);
                break;
            default:
                break;
        }
    }

    return iParseRslt;

}