Beispiel #1
0
float smallcalc::Parser::level2()
{
	float ans = level3();
	TOKEN_TYPE operator_id = token_type;
	while (operator_id == DIVISION_OP || operator_id == MULTIPLICATION_OP)
	{
		next_token();
		ans = eval_operator(operator_id, ans, level3());
		operator_id = token_type;
	}
	return ans;
}
Beispiel #2
0
float smallcalc::Parser::level1()
{
	float ans = level2();
	TOKEN_TYPE operator_id = token_type;
	while (operator_id == ADDITION_OP || operator_id == SUBSTRACTION_OP)
	{
		next_token();
		ans = eval_operator(operator_id, ans, level2());
		operator_id = token_type;
	}
	return ans;
}
Beispiel #3
0
/*
 * power
 */
double ExpParser::parse_level6()
{
    int op_id;
    double ans;
    ans = parse_level7();

    op_id = get_operator_id(token);
    while (op_id == POW)
    {
        getToken();
        ans = eval_operator(op_id, ans, parse_level7());
        op_id = get_operator_id(token);
    }

    return ans;
}
Beispiel #4
0
/*
 * multiply, divide, modulus, xor
 */
double ExpParser::parse_level5()
{
    int op_id;
    double ans;
    ans = parse_level6();

    op_id = get_operator_id(token);
    while (op_id == MULTIPLY || op_id == DIVIDE || op_id == MODULUS || op_id == XOR)
    {
        getToken();
        ans = eval_operator(op_id, ans, parse_level6());
        op_id = get_operator_id(token);
    }

    return ans;
}
Beispiel #5
0
/*
 * add or subtract
 */
double ExpParser::parse_level4()
{
    int op_id;
    double ans;
    ans = parse_level5();

    op_id = get_operator_id(token);
    while (op_id == PLUS || op_id == MINUS)
    {
        getToken();
        ans = eval_operator(op_id, ans, parse_level5());
        op_id = get_operator_id(token);
    }

    return ans;
}
Beispiel #6
0
/*
 * conditional operators
 */
double ExpParser::parse_level3()
{
    int op_id;
    double ans;
    ans = parse_level4();

    op_id = get_operator_id(token);
    while (op_id == EQUAL || op_id == UNEQUAL || op_id == SMALLER || op_id == LARGER || op_id == SMALLEREQ || op_id == LARGEREQ)
    {
        getToken();
        ans = eval_operator(op_id, ans, parse_level4());
        op_id = get_operator_id(token);
    }

    return ans;
}
Beispiel #7
0
/*
 * conditional operators and bitshift
 */
double ExpParser::parse_level2()
{
    int op_id;
    double ans;
    ans = parse_level3();

    op_id = get_operator_id(token);
    while (op_id == AND || op_id == OR || op_id == BITSHIFTLEFT || op_id == BITSHIFTRIGHT)
    {
        getToken();
        ans = eval_operator(op_id, ans, parse_level3());
        op_id = get_operator_id(token);
    }

    return ans;
}
Beispiel #8
0
/*
 * Factorial
 */
double ExpParser::parse_level7()
{
    int op_id;
    double ans;
    ans = parse_level8();

    op_id = get_operator_id(token);
    while (op_id == FACTORIAL)
    {
        getToken();
        // factorial does not need a value right from the
        // operator, so zero is filled in.
        ans = eval_operator(op_id, ans, 0.0);
        op_id = get_operator_id(token);
    }

    return ans;
}