static bool parseToken_GlobalMemory(char **s, Game *g) { int var, testValue, op; getNextToken_ArrayIndex(s, &var); op = getNextToken(s); _currentToken = getNextToken(s); if (_currentToken == kParserTokenSceneNumber) { testValue = g->_sceneNumber; } else { getToken_Int(&testValue); } assert(var >= 0 && var < Game::NUM_VARS); return compareOp(g->_varsTable[var], testValue, op); }
exp expression(int *i,int isAssignment){ int tempResult[BUFSIZ]; int tindex = 0,k; int operatorNum = 0; exp expressionResult; expressionResult.expression = (char *)malloc(sizeof(char)*BUFSIZ); expressionResult.result = (char *)malloc(sizeof(char)*20); while(!(wordIndex[*i] >= 28 && wordIndex[*i] <= 37)){ if (wordIndex[*i] == 10 || wordIndex[*i] == 20) { tempResult[tindex++]= (*i); } else { if (opTop != 0) { int x; switch(compareOp(wordIndex[*i])){ case 0: break; case 1: x=opPop();operatorNum++; tempResult[tindex++]= x; if (opTop != 0 && wordIndex[opStack[opTop-1]]<=23) { x=opPop();operatorNum++; tempResult[tindex++]= x; } break; case 3: break; case 4: while(wordIndex[(x=opPop())] != 26){ tempResult[tindex++]= x;operatorNum++; };(*i)++;continue; default:break; } } opPush((*i)); } (*i)++; } while(opTop){ tempResult[tindex++] = opPop();operatorNum++; } if (tindex == 1) { if (isAssignment) { sprintf(expressionResult.expression,"(%d)\t=\t%s\t-\t",finalIndex++,wordResult[tempResult[0]]); } else { sprintf(expressionResult.result,"%s",wordResult[tempResult[0]]); } } else { for (k = 0; k < tindex; ++k) { if (!(22 <= wordIndex[tempResult[k]] && wordIndex[tempResult[k]] <= 25)) { pushResult(wordResult[tempResult[k]]); } else { char *arg2=popResult(); char *arg1=popResult(); char *result=newtemp(); char temp[BUFSIZ]; sprintf(temp,"(%d)\t%s\t%s\t%s\t%s\n",finalIndex++,wordResult[tempResult[k]],arg1,arg2,result); sprintf(expressionResult.expression, "%s%s",expressionResult.expression,temp); pushResult(result); if (k == tindex-1) { if (isAssignment) { sprintf(temp, "(%d)\t=\t%s\t-\t",finalIndex++,wordResult[tempResult[0]]); sprintf(expressionResult.expression,"%s(%d)\t=\t%s\t-\t",expressionResult.expression,finalIndex++,result); } else strcat(expressionResult.result, result); } } } } (*i) ++;// Point at next element after ';' return expressionResult; }