CODE-0006 · gpt-5.5 (high)from fractions import Fraction
def eval_expr(s):
if not isinstance(s, str):
raise ValueError("expression must be a string")
n = len(s)
i = 0
def is_digit(ch):
return "0" <= ch <= "9"
def skip_ws():
nonlocal i
while i < n and s[i].isspace():
i += 1
def parse_number():
nonlocal i
skip_ws()
before_start = i
while i < n and is_digit(s[i]):
i += 1
before = s[before_start:i]
after = ""
has_dot = False
if i < n and s[i] == ".":
has_dot = True
i += 1
after_start = i
while i < n and is_digit(s[i]):
i += 1
after = s[after_start:i]
if not before and not after:
raise ValueError("malformed number")
if not has_dot:
return Fraction(int(before), 1)
scale = 10 ** len(after)
whole = int(before) if before else 0
frac = int(after) if after else 0
return Fraction(whole * scale + frac, scale)
def parse_primary():
nonlocal i
skip_ws()
if i >= n:
raise ValueError("unexpected end of expression")
ch = s[i]
if ch == "(":
i += 1
value = parse_expression()
skip_ws()
if i >= n or s[i] != ")":
raise ValueError("mismatched parentheses")
i += 1
return value
if is_digit(ch) or ch == ".":
return parse_number()
raise ValueError("unknown token")
def parse_unary():
nonlocal i
skip_ws()
sign = 1
while i < n and s[i] in "+-":
if s[i] == "-":
sign = -sign
i += 1
skip_ws()
value = parse_primary()
return value if sign == 1 else -value
def parse_term():
nonlocal i
value = parse_unary()
while True:
skip_ws()
if i >= n or s[i] not in "*/":
break
op = s[i]
i += 1
rhs = parse_unary()
if op == "*":
value *= rhs
else:
if rhs == 0:
raise ValueError("division by zero")
value /= rhs
return value
def parse_expression():
nonlocal i
value = parse_term()
while True:
skip_ws()
if i >= n or s[i] not in "+-":
break
op = s[i]
i += 1
rhs = parse_term()
if op == "+":
value += rhs
else:
value -= rhs
return value
skip_ws()
if i >= n:
raise ValueError("empty expression")
result = parse_expression()
skip_ws()
if i != n:
raise ValueError("malformed expression")
if result.denominator == 1:
return result.numerator
return float(result)