Exemple #1
0
        public CToken(CToken token)
        {
            m_Type          = token.m_Type;
            m_SubType       = token.m_SubType;
            m_pszLexeme     = token.m_pszLexeme;
            m_pszDDItemName = null;
            //Anil August 26 2005 For handling DD variable and Expression
            if (token.m_pszDDItemName != null)
            {
                m_pszDDItemName = token.m_pszDDItemName;
            }

            m_nSymbolTableIndex    = token.m_nSymbolTableIndex;
            m_i32constant_pool_idx = token.m_i32constant_pool_idx;
            m_i32LineNo            = token.m_i32LineNo;
            m_bIsGlobal            = token.m_bIsGlobal; //Vibhor 070705: Added
            m_bIsRoutineToken      = false;             //Anil Octobet 5 2005 for handling Method Calling Method
            m_bIsReturnToken       = false;             //Anil Octobet 5 2005 for handling Method Calling Method

            m_nSymbolTableScopeIndex = 0;               //SCR26200 Felix for handling Nested Depth of Symbol

            if (token.m_pCompound != null)
            {
                m_pCompound = new COMPOUND_DATA();
                m_pCompound = token.m_pCompound;
            }
        }
Exemple #2
0
 //	Allo\w Visitors to do different operations on the node.
 public override int Execute(
     CGrammarNodeVisitor pVisitor,
     CSymbolTable pSymbolTable,
     ref INTER_VARIANT pvar,
     RUL_TOKEN_SUBTYPE AssignType = RUL_TOKEN_SUBTYPE.RUL_ASSIGN)//Anil August 26 2005 to Fix a[exp1] += exp2
 {
     return(pVisitor.visitExpression(this, pSymbolTable, ref pvar, AssignType));
 }
 //	Allow Visitors to do different operations on the node.
 public override int Execute(CGrammarNodeVisitor pVisitor, CSymbolTable pSymbolTable,
                             ref INTER_VARIANT pvar, RUL_TOKEN_SUBTYPE AssignType = RUL_TOKEN_SUBTYPE.RUL_ASSIGN)
 {
     return(pVisitor.visitComplexDDExpression(
                this,
                pSymbolTable,
                ref pvar,
                AssignType));
 }
Exemple #4
0
        //	Allow Visitors to do different operations on the node.
        public override int Execute(CGrammarNodeVisitor pVisitor, CSymbolTable pSymbolTable,
                                    ref INTER_VARIANT pvar, RUL_TOKEN_SUBTYPE AssignType = RUL_TOKEN_SUBTYPE.RUL_ASSIGN) //Anil August 26 2005 to Fix a[exp1] += exp2
        {
            if ((object)pvar != null)                                                                                    // stevev 19nov09 - make 'for(;;)' statement work
            {
                byte[] b = { 1 };
                pvar.SetValue(b, 0, VARIANT_TYPE.RUL_UNSIGNED_CHAR);      // stevev 19nov09 - make 'for(;;)' statement work
            }

            return(VISIT_NORMAL);
        }
Exemple #5
0
 //	Allow Visitors to do different operations on the node.
 public override int Execute(CGrammarNodeVisitor pVisitor, CSymbolTable pSymbolTable,
                             ref INTER_VARIANT pvar, RUL_TOKEN_SUBTYPE AssignType = RUL_TOKEN_SUBTYPE.RUL_ASSIGN)//Anil August 26 2005 to Fix a[exp1] += exp2
 {
     //Anil Octobet 5 2005 for handling Method Calling Method
     return(pVisitor.visitReturnStatement(
                this,
                pSymbolTable,
                ref pvar,
                AssignType));
     //	return VISIT_RETURN;
 }
Exemple #6
0
        //	Allow Visitors to do different operations on the node.
        public override int Execute(CGrammarNodeVisitor pVisitor, CSymbolTable pSymbolTable,
                                    ref INTER_VARIANT pvar, RUL_TOKEN_SUBTYPE AssignType = RUL_TOKEN_SUBTYPE.RUL_ASSIGN) //Anil August 26 2005 to Fix a[exp1] += exp2
        {
            int nReturn = pVisitor.visitProgram(this, pSymbolTable, ref pvar, AssignType);                               //Anil August 26 2005 to Fix a[exp1] += exp2

            /*
             * if (nReturn == VISIT_ERROR)// emerson april2013
             * {
             *  throw (C_UM_ERROR_INTERNALERR);
             * }
             */
            return(nReturn);
        }
Exemple #7
0
 public CToken(string szLexeme)
 {
     m_pszLexeme              = szLexeme;
     m_pszDDItemName          = null;//Added By Anil August 22 2005
     m_pCompound              = null;
     m_Type                   = RUL_TOKEN_TYPE.RUL_TYPE_NONE;
     m_SubType                = RUL_TOKEN_SUBTYPE.RUL_SUBTYPE_NONE;
     m_nSymbolTableIndex      = -1;
     m_i32constant_pool_idx   = -1;
     m_i32LineNo              = -1;
     m_bIsGlobal              = false; //Vibhor 070705: Added
     m_bIsRoutineToken        = false; //Anil Octobet 5 2005 for handling Method Calling Method
     m_bIsReturnToken         = false; //Anil Octobet 5 2005 for handling Method Calling Method
     m_nSymbolTableScopeIndex = 0;     //SCR26200 Felix for handling Nested Depth of Symbol
 }
Exemple #8
0
        int m_nSymbolTableScopeIndex; //SCR26200 Felix for handling Nested Depth of Symbol

        public CToken()
        {
            m_pszLexeme     = null;
            m_pszDDItemName = null;//Anil August 26 2005 For handling DD variable and Expression
            ////m_pCompound = null;
            m_Type                   = RUL_TOKEN_TYPE.RUL_TYPE_NONE;
            m_SubType                = RUL_TOKEN_SUBTYPE.RUL_SUBTYPE_NONE;
            m_nSymbolTableIndex      = -1;
            m_i32constant_pool_idx   = -1;
            m_i32LineNo              = -1;
            m_bIsGlobal              = false; //Vibhor 070705: Added
            m_bIsRoutineToken        = false; //Anil Octobet 5 2005 for handling Method Calling Method
            m_bIsReturnToken         = false; //Anil Octobet 5 2005 for handling Method Calling Method
            m_nSymbolTableScopeIndex = 0;     ///SCR26200 /Felix for handling Nested Depth of Symbol
            m_pCompound              = new COMPOUND_DATA();
        }
Exemple #9
0
        public void TokenType_to_VariantType(RUL_TOKEN_TYPE token, RUL_TOKEN_SUBTYPE subtoken, ref VARIANT_TYPE vt)
        {
            switch (subtoken)
            {
            case RUL_TOKEN_SUBTYPE.RUL_CHAR_CONSTANT:
            case RUL_TOKEN_SUBTYPE.RUL_CHAR_DECL:
                vt = VARIANT_TYPE.RUL_CHAR;
                break;

            case RUL_TOKEN_SUBTYPE.RUL_LONG_LONG_DECL:
                vt = VARIANT_TYPE.RUL_LONGLONG;
                break;

            // Walt EPM 08sep08 - added
            case RUL_TOKEN_SUBTYPE.RUL_UNSIGNED_SHORT_INTEGER_DECL:
                vt = VARIANT_TYPE.RUL_USHORT;
                break;

            case RUL_TOKEN_SUBTYPE.RUL_SHORT_INTEGER_DECL:
                vt = VARIANT_TYPE.RUL_SHORT;
                break;

            case RUL_TOKEN_SUBTYPE.RUL_UNSIGNED_INTEGER_DECL:
                vt = VARIANT_TYPE.RUL_UINT;
                break;

            // end add  Walt EPM 08sep08
            case RUL_TOKEN_SUBTYPE.RUL_INT_CONSTANT:
            case RUL_TOKEN_SUBTYPE.RUL_INTEGER_DECL:
            case RUL_TOKEN_SUBTYPE.RUL_LONG_DECL:
                vt = VARIANT_TYPE.RUL_INT;
                break;

            case RUL_TOKEN_SUBTYPE.RUL_REAL_CONSTANT:
            case RUL_TOKEN_SUBTYPE.RUL_REAL_DECL:
                vt = VARIANT_TYPE.RUL_FLOAT;
                break;

            case RUL_TOKEN_SUBTYPE.RUL_DOUBLE_DECL:
                vt = VARIANT_TYPE.RUL_DOUBLE;
                break;

            case RUL_TOKEN_SUBTYPE.RUL_UNSIGNED_CHAR_DECL:
                vt = VARIANT_TYPE.RUL_UNSIGNED_CHAR;
                break;
            }
        }
Exemple #10
0
        public CToken(string szLexeme, RUL_TOKEN_TYPE Type, RUL_TOKEN_SUBTYPE SubType, COMPOUND_DATA cmpData, int i32LineNo)
        {
            m_pszLexeme     = szLexeme;
            m_pszDDItemName = null;//Added By Anil August 22 2005

            m_Type                 = Type;
            m_SubType              = SubType;
            m_nSymbolTableIndex    = -1;
            m_i32constant_pool_idx = -1;
            m_i32LineNo            = i32LineNo;
            m_bIsGlobal            = false; //Vibhor 070705: Added

            m_pCompound               = new COMPOUND_DATA();
            m_pCompound.m_szName      = cmpData.m_szName;
            m_pCompound.m_szAttribute = cmpData.m_szAttribute;
            m_bIsReturnToken          = false; //Anil Octobet 5 2005 for handling Method Calling Method
            m_bIsRoutineToken         = false; //Anil Octobet 5 2005 for handling Method Calling Method
            m_nSymbolTableScopeIndex  = 0;     //SCR26200 Felix for handling Nested Depth of Symbol
        }
Exemple #11
0
 public void SetSubType(RUL_TOKEN_SUBTYPE SubType)
 {
     m_SubType = SubType;
 }
Exemple #12
0
 public CCompoundExpression(CExpression f, CExpression s, RUL_TOKEN_SUBTYPE Op)
 {
     m_pFirstExp  = f;
     m_pSecondExp = s;
     m_Operator   = Op;
 }
Exemple #13
0
 public virtual int visitIFExpression(IFExpression pExpression, CSymbolTable pSymbolTable,
                                      ref INTER_VARIANT pvar, RUL_TOKEN_SUBTYPE AssignType = RUL_TOKEN_SUBTYPE.RUL_ASSIGN) //Anil August 26 2005 to Fix a[exp1] += exp2
 {
     return(0);
 }
Exemple #14
0
 //	Allow Visitors to do different operations on the node.
 public override int Execute(CGrammarNodeVisitor pVisitor, CSymbolTable pSymbolTable,
                             ref INTER_VARIANT pvar, RUL_TOKEN_SUBTYPE AssignType = RUL_TOKEN_SUBTYPE.RUL_ASSIGN)//Anil August 26 2005 to Fix a[exp1] += exp2
 {
     return(VISIT_BREAK);
 }
Exemple #15
0
 public CCompoundExpression()
 {
     m_pFirstExp  = null;
     m_pSecondExp = null;
     m_Operator   = RUL_TOKEN_SUBTYPE.RUL_SUBTYPE_NONE;
 }
Exemple #16
0
        public override int visitArrayExpression(CArrayExpression pArrExp, CSymbolTable pSymbolTable,
                                                 ref INTER_VARIANT pvar, RUL_TOKEN_SUBTYPE AssignType)
        {
            //try
            {
                int             i32Idx    = pArrExp.GetToken().GetSymbolTableIndex();
                CVariable       pVariable = pSymbolTable.GetAt(i32Idx);
                INTER_SAFEARRAY prgsa     = pVariable.GetValue().GetValue().prgsa;

                //evaluate the expressions...
                EXPR_VECTOR pvecExpressions = pArrExp.GetExpressions();
                List <int>  vecDims         = new List <int>();
                prgsa.GetDims(ref vecDims);

                if (vecDims.Count != pvecExpressions.Count)
                {
                    //throw (C_TC_ERROR_DIM_MISMATCH, pArrExp);
                }
                byte[] by;
                switch (prgsa.Type())
                {
                case VARIANT_TYPE.RUL_CHAR:
                    by = new byte[1];
                    //by[0] = ' ';
                    by[0] = 0;
                    pvar.SetValue(by, 0, prgsa.Type());
                    break;

                case VARIANT_TYPE.RUL_INT:
                    by = new byte[4];
                    by = BitConverter.GetBytes((int)0);
                    pvar.SetValue(by, 0, prgsa.Type());
                    break;

                case VARIANT_TYPE.RUL_BOOL:
                    by    = new byte[1];
                    by[0] = 0;
                    pvar.SetValue(by, 0, prgsa.Type());
                    break;

                case VARIANT_TYPE.RUL_FLOAT:
                    by = new byte[4];
                    by = BitConverter.GetBytes((float)0.0);
                    pvar.SetValue(by, 0, prgsa.Type());
                    break;

                case VARIANT_TYPE.RUL_DOUBLE:
                    by = new byte[4];
                    by = BitConverter.GetBytes((double)0.0);
                    pvar.SetValue(by, 0, prgsa.Type());
                    break;

                case VARIANT_TYPE.RUL_CHARPTR:
                case VARIANT_TYPE.RUL_SAFEARRAY:
                case VARIANT_TYPE.RUL_DD_STRING:
                case VARIANT_TYPE.RUL_UNSIGNED_CHAR:
                    by    = new byte[1];
                    by[0] = 0;
                    pvar.SetValue(by, 0, prgsa.Type());
                    break;
                }
                return(TYPE_SUCCESS);
            }

            /*
             * catch (CRIDEError* perr)
             * {
             *      pvecErrors.push_back(perr);
             * }
             * catch (...)
             * {
             *      throw (C_UM_ERROR_UNKNOWNERROR, pArrExp);
             * }
             * return TYPE_FAILURE;
             */
        }
Exemple #17
0
        void SetVarType(RUL_TOKEN_TYPE Type, RUL_TOKEN_SUBTYPE SubType)//Added By Anil August 5 2005 For handling DD variable and Expression
        {
            byte[] data;
            if (Type == RUL_TOKEN_TYPE.RUL_SIMPLE_VARIABLE)
            {
                switch (SubType)
                {
                case RUL_TOKEN_SUBTYPE.RUL_CHAR_DECL:
                    data = BitConverter.GetBytes(' ');
                    m_Value.SetValue(data, 0, VARIANT_TYPE.RUL_CHAR);    // = (char)' ';
                    break;

                case RUL_TOKEN_SUBTYPE.RUL_LONG_LONG_DECL:
                    //m_Value = (INT64)0;
                    data = BitConverter.GetBytes((Int64)0);
                    m_Value.SetValue(data, 0, VARIANT_TYPE.RUL_LONGLONG);    // = (char)' ';
                    break;

                // Walt EPM 08sep08 - added
                case RUL_TOKEN_SUBTYPE.RUL_UNSIGNED_SHORT_INTEGER_DECL:
                    //m_Value = (unsigned short)0;
                    data = BitConverter.GetBytes((ushort)0);
                    m_Value.SetValue(data, 0, VARIANT_TYPE.RUL_USHORT);    // = (char)' ';
                    break;

                case RUL_TOKEN_SUBTYPE.RUL_SHORT_INTEGER_DECL:
                    //m_Value = (short)0;
                    data = BitConverter.GetBytes((short)0);
                    m_Value.SetValue(data, 0, VARIANT_TYPE.RUL_SHORT);    // = (char)' ';
                    break;

                case RUL_TOKEN_SUBTYPE.RUL_UNSIGNED_INTEGER_DECL:
                    data = BitConverter.GetBytes((uint)0);
                    m_Value.SetValue(data, 0, VARIANT_TYPE.RUL_UINT);    // = (char)' ';
                    break;

                // Walt EPM 08sep08 - end added
                case RUL_TOKEN_SUBTYPE.RUL_INTEGER_DECL:
                case RUL_TOKEN_SUBTYPE.RUL_LONG_DECL:
                    data = BitConverter.GetBytes((int)0);
                    m_Value.SetValue(data, 0, VARIANT_TYPE.RUL_INT);    // = (char)' ';
                    break;

                case RUL_TOKEN_SUBTYPE.RUL_BOOLEAN_DECL:
                    data = BitConverter.GetBytes(false);
                    m_Value.SetValue(data, 0, VARIANT_TYPE.RUL_BOOL);    // = (char)' ';
                    break;

                case RUL_TOKEN_SUBTYPE.RUL_REAL_DECL:
                    data = BitConverter.GetBytes((float)0);
                    m_Value.SetValue(data, 0, VARIANT_TYPE.RUL_FLOAT);    // = (char)' ';
                    break;

                case RUL_TOKEN_SUBTYPE.RUL_DOUBLE_DECL:
                    data = BitConverter.GetBytes((double)0);
                    m_Value.SetValue(data, 0, VARIANT_TYPE.RUL_DOUBLE);    // = (char)' ';
                    break;

                case RUL_TOKEN_SUBTYPE.RUL_STRING_DECL:
                case RUL_TOKEN_SUBTYPE.RUL_DD_STRING_DECL:                 //Added By Anil July 07 2005
                    data = System.Text.Encoding.Default.GetBytes("");
                    m_Value.SetValue(data, 0, VARIANT_TYPE.RUL_DD_STRING); // = (char)' ';
                    break;

                case RUL_TOKEN_SUBTYPE.RUL_UNSIGNED_CHAR_DECL:
                    data = BitConverter.GetBytes((byte)' ');
                    m_Value.SetValue(data, 0, VARIANT_TYPE.RUL_UNSIGNED_CHAR);    // = (char)' ';
                    break;
                }
            }
        }
Exemple #18
0
 public CVariable(string szLexeme, RUL_TOKEN_TYPE Type, RUL_TOKEN_SUBTYPE SubType)
 {
     ;
 }
Exemple #19
0
        public void setCVariable(CToken pToken)
        {
            Token   = pToken;
            m_Value = new INTER_VARIANT();
            RUL_TOKEN_TYPE    Type    = pToken.GetType();
            RUL_TOKEN_SUBTYPE SubType = pToken.GetSubType();

            if (Type == RUL_TOKEN_TYPE.RUL_SIMPLE_VARIABLE)
            {
                byte[] data;
                switch (SubType)
                {
                case RUL_TOKEN_SUBTYPE.RUL_CHAR_DECL:
                    data = BitConverter.GetBytes(' ');
                    m_Value.SetValue(data, 0, VARIANT_TYPE.RUL_CHAR);    // = (char)' ';
                    break;

                case RUL_TOKEN_SUBTYPE.RUL_LONG_LONG_DECL:
                    //m_Value = (Int64)0;
                    data = BitConverter.GetBytes((Int64)0);
                    m_Value.SetValue(data, 0, VARIANT_TYPE.RUL_LONGLONG);    // = (char)' ';
                    break;

                // Walt EPM 08sep08 - added
                case RUL_TOKEN_SUBTYPE.RUL_UNSIGNED_SHORT_INTEGER_DECL:
                    //m_Value = (ushort)0;
                    data = BitConverter.GetBytes((ushort)0);
                    m_Value.SetValue(data, 0, VARIANT_TYPE.RUL_USHORT);    // = (char)' ';
                    break;

                case RUL_TOKEN_SUBTYPE.RUL_SHORT_INTEGER_DECL:
                    //m_Value = (short)0;
                    data = BitConverter.GetBytes((short)0);
                    m_Value.SetValue(data, 0, VARIANT_TYPE.RUL_SHORT);    // = (char)' ';
                    break;

                case RUL_TOKEN_SUBTYPE.RUL_UNSIGNED_INTEGER_DECL:
                    //m_Value = (uint)0;
                    data = BitConverter.GetBytes((uint)0);
                    m_Value.SetValue(data, 0, VARIANT_TYPE.RUL_UINT);    // = (char)' ';
                    break;

                // Walt EPM 08sep08 - end added
                case RUL_TOKEN_SUBTYPE.RUL_INTEGER_DECL:
                case RUL_TOKEN_SUBTYPE.RUL_LONG_DECL:
                    //m_Value = (long)0;
                    data = BitConverter.GetBytes((int)0);
                    m_Value.SetValue(data, 0, VARIANT_TYPE.RUL_INT);    // = (char)' ';
                    break;

                case RUL_TOKEN_SUBTYPE.RUL_BOOLEAN_DECL:
                    //m_Value = (bool)false;
                    data = BitConverter.GetBytes(false);
                    m_Value.SetValue(data, 0, VARIANT_TYPE.RUL_BOOL);    // = (char)' ';
                    break;

                case RUL_TOKEN_SUBTYPE.RUL_REAL_DECL:
                    //m_Value = (float)0.0;
                    data = BitConverter.GetBytes((float)0.0);
                    m_Value.SetValue(data, 0, VARIANT_TYPE.RUL_FLOAT);    // = (char)' ';
                    break;

                case RUL_TOKEN_SUBTYPE.RUL_DOUBLE_DECL:
                    //m_Value = (double)0.0;//WS:EPM 10aug07
                    data = BitConverter.GetBytes((double)0);
                    m_Value.SetValue(data, 0, VARIANT_TYPE.RUL_DOUBLE);    // = (char)' ';
                    break;

                case RUL_TOKEN_SUBTYPE.RUL_STRING_DECL:
                case RUL_TOKEN_SUBTYPE.RUL_DD_STRING_DECL:     //Added By Anil July 07 2005
                    //m_Value = (string)"";
                    data = System.Text.Encoding.Default.GetBytes("");
                    m_Value.SetValue(data, 0, VARIANT_TYPE.RUL_DD_STRING);    // = (char)' ';
                    break;

                case RUL_TOKEN_SUBTYPE.RUL_UNSIGNED_CHAR_DECL:
                    //m_Value = (byte)' ';//WHS EP June17-2008 have changed this to make sure that it works for all data types
                    data = BitConverter.GetBytes(' ');
                    m_Value.SetValue(data, 0, VARIANT_TYPE.RUL_UNSIGNED_CHAR);    // = (char)' ';
                    break;
                }
            }
        }
        //	Create as much of the parse tree as possible.
        public override int CreateParseSubTree(ref CLexicalAnalyzer plexAnal, ref CSymbolTable pSymbolTable)
        {
            CToken pToken = null;
            //try
            {
                CExpParser expParser;
                //Munch a <Var>
                if ((CLexicalAnalyzer.LEX_FAIL == plexAnal.GetNextToken(ref pToken, ref pSymbolTable)) || pToken == null)
                {
                    //throw (C_UM_ERROR_INTERNALERR);
                }
                if (pToken.IsArrayVar())
                {
                    plexAnal.UnGetToken();
                    expParser        = new CExpParser();
                    m_pArrayExp      = expParser.ParseExpression(ref plexAnal, ref pSymbolTable, STMT_EXPR_TYPE.EXPR_LVALUE);
                    m_bLvalueIsArray = true;
                    m_pVariable      = null;
                    m_pOMExp         = null;
                    m_pComplexDDExp  = null;//Added By Anil August 23 2005
                }
                //Added By Anil August 4 2005 --starts here
                //For Handlin the DD variable and Expressions
                else if (pToken.IsDDItem())
                {
                    plexAnal.UnGetToken();
                    expParser            = new CExpParser();
                    m_pComplexDDExp      = expParser.ParseExpression(ref plexAnal, ref pSymbolTable, STMT_EXPR_TYPE.EXPR_LVALUE);
                    m_bLvalueIsComplexDD = true;
                    m_pArrayExp          = null;
                    m_pVariable          = null;
                    m_pOMExp             = null;
                }
                //Added By Anil August 4 2005 --Ends here
                else if (pToken.IsVariable())
                {
                    m_pVariable     = pToken;
                    m_pArrayExp     = null;
                    m_pOMExp        = null;
                    m_pComplexDDExp = null;//Anil August 23 2005

                    //DELETE_PTR(pToken);
                    //todo walter
                }
                else if (pToken.IsOMToken())
                {
                    //do something...
                    plexAnal.UnGetToken();
                    m_pOMExp = new COMServiceExpression();
                    m_pOMExp.CreateParseSubTree(ref plexAnal, ref pSymbolTable);
                    m_pVariable     = null;
                    m_pArrayExp     = null;
                    m_pComplexDDExp = null;//Anil August 23 2005
                }
                else
                {
                    //throw (C_AP_ERROR_LVALUE);
                }

                //DELETE_PTR(pToken);  //todo walter
                pToken = null;
                //Munch a <=> or <*=>
                if ((CLexicalAnalyzer.LEX_FAIL == plexAnal.GetNextToken(ref pToken, ref pSymbolTable)) ||
                    pToken == null ||
                    !pToken.IsAssignOp())
                {
                    //throw (C_AP_ERROR_MISSINGEQ);
                }
                m_AssignType = pToken.GetSubType();

                //Munch & Parse the expression.
                //we got to give the expression string to the expression parser.
                expParser = new CExpParser();
                //try
                {
                    m_pExpression = expParser.ParseExpression(ref plexAnal, ref pSymbolTable, STMT_EXPR_TYPE.EXPR_ASSIGN);

                    if (m_pExpression == null)
                    {
                        //throw (C_AP_ERROR_MISSINGEXP);
                    }
                }

                /*
                 *              catch (CRIDEError* perr)
                 *              {
                 *                      pvecErrors.push_back(perr);
                 *                      plexAnal.SynchronizeTo(EXPRESSION, pSymbolTable);
                 *              }
                 */
                if ((CLexicalAnalyzer.LEX_FAIL == plexAnal.GetNextToken(ref pToken, ref pSymbolTable)) ||
                    pToken == null || (RUL_TOKEN_SUBTYPE.RUL_SEMICOLON != pToken.GetSubType()))
                {
                    //throw (C_AP_ERROR_MISSINGSC);
                }
                return(1);
            }

            /*
             *          catch (CRIDEError* perr)
             *          {
             *                  pvecErrors.push_back(perr);
             *                  plexAnal.SynchronizeTo(EXPRESSION, pSymbolTable);
             *          }
             *          catch (...)
             *          {
             *                  throw (C_UM_ERROR_UNKNOWNERROR);
             *          }
             *          return PARSE_FAIL;
             */
        }
Exemple #21
0
        //	Create as much of the parse tree as possible.
        public override int CreateParseSubTree(ref CLexicalAnalyzer plexAnal, ref CSymbolTable pSymbolTable)
        {
            CToken pToken    = new CToken();
            CToken pSymToken = null;

            //try
            {
                if ((CLexicalAnalyzer.LEX_FAIL == plexAnal.GetNextToken(ref pToken, ref pSymbolTable)) || pToken == null)
                {
                    //throw (C_UM_ERROR_INTERNALERR);
                }

                RUL_TOKEN_SUBTYPE SubType = pToken.GetSubType();

                bool   lboxState  = false;
                bool   rboxState  = false;
                bool   numState   = false;
                bool   idState    = true;
                bool   commaState = false;
                CToken pArrToken  = null;
                int    dimCnt     = 0; // stevev 25apr13 - we have to reuse bracket scoped arrays

                while ((CLexicalAnalyzer.LEX_FAIL != plexAnal.GetNextVarToken(ref pToken, ref pSymbolTable, SubType)) &&
                       pToken != null && (!pToken.IsEOS()))
                {
                    int       idex = 0;
                    CVariable cv   = pSymbolTable.Find(pToken.GetLexeme(), ref idex);
                    if (cv != null)
                    {
                        pSymToken = cv.Token;
                    }
                    if ((!pToken.IsSymbol() && pSymToken != null) ||
                        (RUL_TOKEN_SUBTYPE.RUL_LBOX == pToken.GetSubType()) ||
                        (RUL_TOKEN_SUBTYPE.RUL_RBOX == pToken.GetSubType()) ||
                        (pToken.IsNumeric()))
                    {
                        if (pToken.IsArrayVar())
                        {
                            lboxState  = true;
                            rboxState  = false;
                            numState   = false;
                            idState    = false;
                            commaState = false;

                            pSymToken.SetSubType(SubType);
                            //Make a copy of the array Token
                            pArrToken = new CToken(pToken);
                        }
                        else if (lboxState)
                        {
                            if (pToken.GetSubType() != RUL_TOKEN_SUBTYPE.RUL_LBOX)
                            {
                                //ADD_ERROR(C_DECL_ERROR_LBOX);
                                plexAnal.SynchronizeTo(PRODUCTION.DECLARATION, pSymbolTable);
                            }
                            lboxState  = false;
                            rboxState  = true;
                            numState   = false;
                            idState    = false;
                            commaState = false;
                        }
                        else if (rboxState)
                        {
                            if ((null == pArrToken) || !pToken.IsNumeric())
                            {
                                //ADD_ERROR(C_DECL_ERROR_NUM);
                                plexAnal.SynchronizeTo(PRODUCTION.DECLARATION, pSymbolTable);
                            }

                            lboxState  = false;
                            rboxState  = false;
                            numState   = true;
                            idState    = false;
                            commaState = false;
                            //This is a number and with pArrToken get the symbol table token

                            int       i32Idx = pArrToken.GetSymbolTableIndex();
                            CVariable pVar   = pSymbolTable.GetAt(i32Idx);
                            //INTER_VARIANT varArray = pVar.GetValue();
                            VARIANT_TYPE vtSafeArray = new VARIANT_TYPE();

                            //increment the dimension and set the limit of that dimension
                            if (pVar.GetValue().GetVarType() != VARIANT_TYPE.RUL_SAFEARRAY || dimCnt == 0)// stevev 25apr13
                            {
                                // WS:EMP-17jul07:varArray.Clear();
                                // WS:EMP-17jul07:varArray.varType = RUL_SAFEARRAY;
                                // WS:EMP-17jul07:__VAL& val = (__VAL&)varArray.GetValue();
                                // stevev-14feb08:make it more flexible...INTER_SAFEARRAYBOUND rgbound[1] = {atoi(pToken.GetLexeme())};
                                INTER_SAFEARRAYBOUND rgbound = new INTER_SAFEARRAYBOUND();
                                rgbound.cElements = Convert.ToUInt32(pToken.GetLexeme());
                                //INTER_SAFEARRAYBOUND rgbound[1] = { strtoul(pToken->GetLexeme(), NULL, 0) };
                                INTER_SAFEARRAY sa    = new INTER_SAFEARRAY(); // WS:EMP-17jul07 was::>val.prgsa = new INTER_SAFEARRAY();
                                ushort          cDims = 0;                     // WS:EMP-17jul07 was::>_USHORT cDims = (val.prgsa).GetDims();

                                TokenType_to_VariantType(pToken.GetType(), SubType, ref vtSafeArray);

                                // WS:EMP-17jul07 was::>(val.prgsa).SetAllocationParameters(vtSafeArray, ++cDims, rgbound);
                                sa.SetAllocationParameters(vtSafeArray, ++cDims, rgbound);
                                sa.Allocate(); // stevev 11jun09 - get rid of error message, destructor will deallocate
                                //varArray = sa; // added WS:EMP-17jul07
                                pVar.GetValue().SetValue(sa);
                                pSymbolTable.SetAt(i32Idx, pVar);
                                dimCnt = 1;
                            }
                            else// isa RUL_SAFEARRAY && dimCnt > 0
                            {
                                __VAL val = pVar.GetValue().GetValue();
                                //INTER_SAFEARRAYBOUND rgbound[1] = { strtoul(pToken.GetLexeme(), NULL, 0) };
                                INTER_SAFEARRAYBOUND rgbound = new INTER_SAFEARRAYBOUND();
                                rgbound.cElements = 3;
                                (val.prgsa).AddDim(rgbound);
                                dimCnt++;
                            }
                        }
                        else if (numState)
                        {
                            if (pToken.GetSubType() != RUL_TOKEN_SUBTYPE.RUL_RBOX)
                            {
                                //ADD_ERROR(C_DECL_ERROR_RBOX);
                                plexAnal.SynchronizeTo(PRODUCTION.DECLARATION, pSymbolTable);
                            }

                            //accept a Right box.
                            lboxState  = true;
                            rboxState  = false;
                            numState   = false;
                            commaState = true;
                            idState    = false;
                        }
                        else
                        {
                            if (idState)
                            {
                                if (pToken.GetType() != RUL_TOKEN_TYPE.RUL_SIMPLE_VARIABLE)
                                {
                                    //ADD_ERROR(C_DECL_ERROR_IDMISSING);
                                    plexAnal.SynchronizeTo(PRODUCTION.DECLARATION, pSymbolTable);
                                }
                                pSymToken.SetSubType(SubType);
                            }
                            else
                            {
                                //ADD_ERROR(C_DECL_ERROR_COMMAMISSING);
                                plexAnal.SynchronizeTo(PRODUCTION.DECLARATION, pSymbolTable);
                            }
                            lboxState  = false;
                            rboxState  = false;
                            numState   = false;
                            idState    = false;
                            commaState = true;
                        }
                    }
                    else if (commaState)
                    {
                        if (pToken.GetSubType() != RUL_TOKEN_SUBTYPE.RUL_COMMA)
                        {
                            //ADD_ERROR(C_DECL_ERROR_COMMAMISSING);
                            plexAnal.SynchronizeTo(PRODUCTION.DECLARATION, pSymbolTable);
                        }

                        idState    = true;
                        commaState = false;
                        lboxState  = false;
                        rboxState  = false;
                        numState   = false;
                    }
                    else
                    {
                        //Of course, this is a problem case.
                        //Unfortunately, expressions in the declarations are not handled
                        //ADD_ERROR(C_DECL_ERROR_EXPRESSION);
                        plexAnal.SynchronizeTo(PRODUCTION.DECLARATION, pSymbolTable);

                        //accept a Right box. //VMKP added on 030404

                        /*  Synchronizing was not proper when an expression
                         *                       present in the variable declaration, With that the
                         *                       below lines one declaration next to the expression
                         *                       declaration is skipping */
                        lboxState  = true;
                        rboxState  = false;
                        numState   = false;
                        commaState = true;
                        idState    = false;
                    }
                }//end of while loop

                //Validate the exit criteria...
                if (!(rboxState == numState == idState == false) || !(commaState == true))
                {
                    //ADD_ERROR(C_DECL_ERROR_UNKNOWN);
                    plexAnal.SynchronizeTo(PRODUCTION.DECLARATION, pSymbolTable);
                }

                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;
             */
        }
Exemple #22
0
 public virtual int visitRuleService(CRuleServiceStatement pStatement, CSymbolTable pSymbolTable,
                                     ref INTER_VARIANT pvar, RUL_TOKEN_SUBTYPE AssignType = RUL_TOKEN_SUBTYPE.RUL_ASSIGN) //Anil August 26 2005 to Fix a[exp1] += exp2
 {
     return(0);
 }