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; } }
// 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)); }
// 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); }
// 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; }
// 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); }
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 }
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(); }
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; } }
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 }
public void SetSubType(RUL_TOKEN_SUBTYPE SubType) { m_SubType = SubType; }
public CCompoundExpression(CExpression f, CExpression s, RUL_TOKEN_SUBTYPE Op) { m_pFirstExp = f; m_pSecondExp = s; m_Operator = Op; }
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); }
// 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); }
public CCompoundExpression() { m_pFirstExp = null; m_pSecondExp = null; m_Operator = RUL_TOKEN_SUBTYPE.RUL_SUBTYPE_NONE; }
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; */ }
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; } } }
public CVariable(string szLexeme, RUL_TOKEN_TYPE Type, RUL_TOKEN_SUBTYPE SubType) { ; }
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; */ }
// 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; */ }
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); }