コード例 #1
0
ファイル: future.c プロジェクト: Evtushenko/HW_144
bool calcMul(double &result, int &curLex, char lexemeString []) {
	bool isNegative = false;
	if (curLex == add || curLex == take) {
		isNegative = curLex == take;
		nextLexeme(curLex, lexemeString);
	}
	switch (curLex) {
	case number: {
		result = toNum(lexemeString);
		nextLexeme(curLex, lexemeString);
		break;
		}
	case open:{
		nextLexeme(curLex, lexemeString);
		if (!calcExp(result, curLex, lexemeString))
			return false;
		if (curLex != close)
			return false;
		nextLexeme(curLex, lexemeString);
		break;
		}
	}
	result *= isNegative ? -1 : 1;
	return true;
}
コード例 #2
0
ファイル: future.c プロジェクト: Evtushenko/HW_144
int main() {
	int curLex = start;
	char lexemeString[10] = { '/0' };
	double result = 0.0;
	nextLexeme(curLex, lexemeString);

	if (calcExp(result, curLex, lexemeString))
		printf("%0.3f\n", result);
	else
		printf("wrong expression\n");
	return 0;
}
コード例 #3
0
ファイル: future.c プロジェクト: Evtushenko/HW_144
bool calcTerm(double &result, int &curLex, char lexemeString []) {
	if (!calcMul(result, curLex, lexemeString))
		return false;
	while (curLex == multiplication || curLex == division) {
		int operation = curLex;
		double next = 0.0;
		nextLexeme(curLex, lexemeString);
		if (!calcMul(next, curLex, lexemeString))
			return false;
		switch (operation) {
		case multiplication: {
			result *= next;
			break;
			}
		case division:{
			result /= next;
			break;
			}
		}
	}
	return true;
}
コード例 #4
0
ファイル: future.c プロジェクト: Evtushenko/HW_144
bool calcExp(double &result, int &curLex, char lexemeString []) {
	if (!calcTerm(result, curLex, lexemeString))
		return false;
	while (curLex == add || curLex == take) {
		int operation = curLex;
		nextLexeme(curLex, lexemeString);
		double next = 0.0;
		if (!calcTerm(next, curLex, lexemeString))
			return false;
		switch (operation) {
		case add: {
			result += next;
			break;
			}
		case take: {
			result -= next;
			break;
			}
		}
	}
	return curLex == finish || curLex == close;
}
コード例 #5
0
ファイル: lexer.c プロジェクト: wjlandryiii/mycc
int test_nextLexeme(char *s, ...){
	int length;
	int type;
	int testType;
	va_list args;

	va_start(args, s);
	printf("[\n");
	while(!nextLexeme(s, &length, &type)){
		testType = va_arg(args, int);
		printf("\t{type:%d, typeName:\"%s\", lexeme:\"", type, LEXEMETYPE_STRINGS[type]);
		puts_escaped(s, s+length);
		printf("\"},\n");
		s += length;
		if(testType != type){
			printf("types don't match!\n");
			exit(1);
		}
	}
	printf("]\n");
	return 0;
}