CODE-0006 · gemini-3.5-flash (default)
def eval_expr(s: str):
    # Tokenizer
    tokens = []
    i = 0
    n = len(s)
    while i < n:
        c = s[i]
        if c.isspace():
            i += 1
            continue
        if c in '+-*/()':
            tokens.append(c)
            i += 1
        elif c.isdigit() or c == '.':
            start = i
            has_dot = False
            if c == '.':
                has_dot = True
            i += 1
            while i < n and (s[i].isdigit() or s[i] == '.'):
                if s[i] == '.':
                    if has_dot:
                        raise ValueError("Invalid number format")
                    has_dot = True
                i += 1
            num_str = s[start:i]
            if num_str == '.':
                raise ValueError("Invalid token '.'")
            val = float(num_str) if has_dot else int(num_str)
            tokens.append(val)
        else:
            raise ValueError(f"Invalid character: {c}")

    if not tokens:
        raise ValueError("Empty expression")

    pos = 0

    def expr():
        nonlocal pos
        val = term()
        while pos < len(tokens) and tokens[pos] in ('+', '-'):
            op = tokens[pos]
            pos += 1
            right = term()
            if op == '+':
                val = val + right
            else:
                val = val - right
        return val

    def term():
        nonlocal pos
        val = factor()
        while pos < len(tokens) and tokens[pos] in ('*', '/'):
            op = tokens[pos]
            pos += 1
            right = factor()
            if op == '*':
                val = val * right
            else:
                if right == 0:
                    raise ValueError("Division by zero")
                val = val / right
        return val

    def factor():
        nonlocal pos
        if pos < len(tokens) and tokens[pos] in ('+', '-'):
            op = tokens[pos]
            pos += 1
            val = factor()
            return val if op == '+' else -val
        return primary()

    def primary():
        nonlocal pos
        if pos >= len(tokens):
            raise ValueError("Unexpected end of expression")
        tok = tokens[pos]
        if isinstance(tok, (int, float)):
            pos += 1
            return tok
        elif tok == '(':
            pos += 1
            val = expr()
            if pos >= len(tokens) or tokens[pos] != ')':
                raise ValueError("Mismatched parentheses")
            pos += 1
            return val
        else:
            raise ValueError(f"Unexpected token: {tok}")

    res = expr()
    if pos < len(tokens):
        raise ValueError("Malformed expression")

    try:
        if res == int(res):
            return int(res)
    except (ValueError, OverflowError):
        pass
    return res