-> d = (v1-> d <= v2-> d);;
/* v1 && v2 */TOK_AND: (v1-> d == 0.0 | | v2-> d == 0.0)
{
/* Set v1 to zero (FALSE) */-> d = 0.0;
};
/* v1 | | v2 */TOK_OR: (v1-> d == 0.0)
{
/* Copy v2 to v1 */-> d = v2-> d;
};
}
} do_math (int oper, ParserVal * v1, ParserVal * v2)
{(oper == '+')
{(is_string (v1) | | is_string (v2))
{_add_strings (v1, v2);
}
{-> d = v1-> d + v2-> d;
};
} ((is_string (v1) | | is_string (v2)))
{-> error = parser_format_string ("Рядок не може прийняти математичний оператор '% c'.", oper);
return;
} _convert_to_numeric (v1); _convert_to_numeric (v2); (oper)
{'-': -> d = v1-> d - v2-> d;; '*': -> d = v1-> d * v2-> d;; '/': (v2-> d! = 0.0) -> d = v1-> d/v2-> d;
{-> error = parser_format_string ("Ділення на нуль.");
};
}
} do_power (ParserVal * v1, ParserVal * v2)
{_convert_to_numeric (v1); _convert_to_numeric (v2); (is_numeric (v1) && is_numeric (v2))
{d = v1-> d; i; (i = 1; i <(long) v2-> d; i + +) v1-> d * = d;
}
{-> error = parser_format_string ("Рядок не може прийняти експонентний оператор '^'.");
}
} do_unary (int oper, ParserVal * v)
{_convert_to_numeric (v); (! is_numeric (v))
{> error = parser_format_string ("Рядок не може прийняти унарний '% c' оператор.", oper);;
}> d =-v-> d;
} is_numeric (ParserVal * v)
{v-> type == TOK_NUMERIC;
} is_string (ParserVal * v)
{v-> type == TOK_STRING;
} parser_convert_to_numeric (ParserVal * v)
{(v-> type == TOK_NUMERIC) return;
/* ATM we do not convert string to numeric value */
} parser_convert_to_string (ParserVal * v)
{
/* Перетворення числового значення в рядок */
if (v-> type == TOK_STRING) return;
/* Value as string picture */* p = parser_value_show_as_string (v);> s = (char *) calloc (MAX_NUMERIC_LEN, sizeof (char)); _t len ​​= min (parser_strlen (p ), MAX_NUMERIC_LEN-1); (len) (v-> s, p, len);
* (v-> s + l...