Ejemplo n.º 1
0
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);
}
Ejemplo n.º 2
0
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;
}