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(); }
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--; }
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; }