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; }
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; }
/* * 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; }
/* * 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; }
/* * 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; }
/* * 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; }
/* * 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; }
/* * 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; }