示例#1
0
        //	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;
             */
        }
示例#2
0
        //	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;
             */
        }