Beispiel #1
0
double Get_T ()
{
    double val1 = Get_P ();

    while (*EXPR_PTR == '*' || *EXPR_PTR == '/')
    {
        int oper = *EXPR_PTR;
        EXPR_PTR++;
        double val2 = Get_P ();

        switch (oper)
        {
            case '*':
            {
                val1 *= val2;
                break;
            }

            case '/':
            {
                val1 /= val2;
                break;
            }
        }
    }

    return val1;
}
Beispiel #2
0
int Get_T (double* result)
{
	double val = 0;
	int ret = Get_P (&val);

	while (*CUR == '*' || *CUR == '/')
	{
		int op = *CUR;
		CUR++;

		double val_2 = 0;
		ret = Get_P (&val_2);

		switch (op)
		{
			case '*':
				val *= val_2;
				break;

			case '/':
				if (val_2 == 0) return ERR_DIV_BY_ZERO;
				val /= val_2;
				break;

			default:
				return ERR_CALL_GET_T;
				break;
		}
	}

	*result = val;

return HAPPY;
}
Beispiel #3
0
int Get_D (node* tree)
{
	int err_index = 0;
	ASSERT_TREE_OK (tree);

	Tree_Add_Left (tree, Node_NEW());
	Tree_Add_Right (tree, Node_NEW());	
	int ret = Get_P (tree -> left);
	if (ret != HAPPY) if (ret == 0)  return ret;

	tree -> type = MATH_OP;
	tree -> op	 = MATH_OP_POW;

	if ((*CUR) -> op == MATH_OP_POW)
	{
		CUR++;
		Get_D (tree -> right);	
	}

	node* new_tree = tree -> left;
	if (tree -> right -> type == 0)
	{
		Tree_Replace_Left (tree);
		ASSERT_TREE_OK (new_tree);
		return HAPPY;
	}

	ASSERT_TREE_OK (tree);
return HAPPY;
}
Beispiel #4
0
int Get_P (double* result)
{
	int ret = 0;
	double val = 0;

	switch (*CUR)
	{
		case '+':
			CUR++;
			break;

		case '-':
			CUR++;
			ret = Get_P (&val);
			val *= -1;
			break;

		case '(':
			CUR++;
			ret = Get_E (&val);
			if (*CUR == ')') CUR++;
			else return ERR_CLOSE_BRACKET;
			break;

		default:
			ret = Get_N (&val);
			break;
	}

	*result = val;

return HAPPY;
}