CODE-0006 · gpt-5.6-sol (high)
def eval_expr(s):
    if not isinstance(s, str):
        raise ValueError("expression must be a string")

    tokens = []
    i = 0
    n = len(s)

    while i < n:
        ch = s[i]

        if ch.isspace():
            i += 1
            continue

        if ch in "+-*/()":
            tokens.append((ch, None))
            i += 1
            continue

        if "0" <= ch <= "9" or ch == ".":
            start = i

            if ch == ".":
                i += 1
                if i >= n or not ("0" <= s[i] <= "9"):
                    raise ValueError("invalid number")
                while i < n and "0" <= s[i] <= "9":
                    i += 1
            else:
                while i < n and "0" <= s[i] <= "9":
                    i += 1
                if i < n and s[i] == ".":
                    i += 1
                    while i < n and "0" <= s[i] <= "9":
                        i += 1

            text = s[start:i]
            value = float(text) if "." in text else int(text)
            tokens.append(("number", value))
            continue

        raise ValueError("unknown token")

    tokens.append(("eof", None))
    position = 0

    def parse_expression():
        nonlocal position
        value = parse_term()

        while tokens[position][0] in ("+", "-"):
            operator = tokens[position][0]
            position += 1
            right = parse_term()
            value = value + right if operator == "+" else value - right

        return value

    def parse_term():
        nonlocal position
        value = parse_unary()

        while tokens[position][0] in ("*", "/"):
            operator = tokens[position][0]
            position += 1
            right = parse_unary()

            if operator == "*":
                value *= right
            else:
                if right == 0:
                    raise ValueError("division by zero")
                value /= right

        return value

    def parse_unary():
        nonlocal position
        token = tokens[position][0]

        if token == "+":
            position += 1
            return +parse_unary()
        if token == "-":
            position += 1
            return -parse_unary()

        return parse_primary()

    def parse_primary():
        nonlocal position
        token, value = tokens[position]

        if token == "number":
            position += 1
            return value

        if token == "(":
            position += 1
            value = parse_expression()
            if tokens[position][0] != ")":
                raise ValueError("mismatched parentheses")
            position += 1
            return value

        raise ValueError("malformed expression")

    result = parse_expression()

    if tokens[position][0] != "eof":
        raise ValueError("malformed expression")

    if isinstance(result, float) and result.is_integer():
        return int(result)

    return result