// Create as much of the parse tree as possible. public override int CreateParseSubTree(ref CLexicalAnalyzer plexAnal, ref CSymbolTable pSymbolTable) { CToken pToken = null; //try { //Munch a <{> if ((CLexicalAnalyzer.LEX_FAIL == plexAnal.GetNextToken(ref pToken, ref pSymbolTable)) || pToken == null || (pToken.GetSubType() != RUL_TOKEN_SUBTYPE.RUL_LBRACK)) { if (pToken.GetSubType() != RUL_TOKEN_SUBTYPE.RUL_COLON) { //throw (C_UM_ERROR_INTERNALERR); } } //Munch List of statments... //try { m_pStmtList = new CStatementList(); m_pStmtList.CreateParseSubTree(ref plexAnal, ref pSymbolTable); } /* * catch (CRIDEError* perr) * { * pvecErrors.push_back(perr); * plexAnal.MoveTo( * RUL_SYMBOL, * RUL_RBRACK, * pSymbolTable); * } */ //Munch a <}> if ((CLexicalAnalyzer.LEX_FAIL == plexAnal.GetNextToken(ref pToken, ref pSymbolTable)) || pToken == null || (pToken.GetSubType() != RUL_TOKEN_SUBTYPE.RUL_RBRACK)) { //ADD_ERROR(C_CS_ERROR_MISSINGRBRACK); plexAnal.UnGetToken(); } return(1); } /* * catch (CRIDEError* perr) * { * pvecErrors.push_back(perr); * plexAnal.MovePast( * RUL_SYMBOL, * RUL_SEMICOLON, * pSymbolTable); * } * catch (...) * { * throw (C_UM_ERROR_UNKNOWNERROR); * } * return PARSE_FAIL; */ }
// Create as much of the parse tree as possible. public override int CreateParseSubTree(ref CLexicalAnalyzer plexAnal, ref CSymbolTable pSymbolTable) { int i32Ret = 0; CToken pToken = null; //try { if ((CLexicalAnalyzer.LEX_FAIL == plexAnal.GetNextToken(ref pToken, ref pSymbolTable)) || pToken == null || (pToken.GetSubType() != RUL_TOKEN_SUBTYPE.RUL_LBRACK)) { //DELETE_PTR(pToken);//clean up memory even on errors //throw (C_UM_ERROR_INTERNALERR); } m_pDeclarations = new CDeclarations(); i32Ret = m_pDeclarations.CreateParseSubTree(ref plexAnal, ref pSymbolTable); m_pStmtList = new CStatementList(); i32Ret = m_pStmtList.CreateParseSubTree(ref plexAnal, ref pSymbolTable); if (0 == i32Ret) { if ((CLexicalAnalyzer.LEX_FAIL == plexAnal.GetNextToken(ref pToken, ref pSymbolTable)) || pToken == null || (pToken.GetSubType() != RUL_TOKEN_SUBTYPE.RUL_RBRACK)) { //DELETE_PTR(pToken);//clean up memory, even on errors //throw (C_UM_ERROR_INTERNALERR); return(i32Ret); } else { return(1); } } return(0); } /* * catch (CRIDEError* perr) * { * //if nobody has bothered to catch the error till now, * //what else can be done but to just eat it and keep quiet... * pvecErrors.push_back(perr); * } * catch (...) * { * throw (C_UM_ERROR_UNKNOWNERROR); * } * return i32Ret; */ }