2
def evaluate(self, expression: str) -> int:5
for i, x in enumerate(expression):12
"""Return value of given expression."""13
if expression[lo] == "(":14
return fn(lo + 1, hi - 1, mp)18
if expression[i : i + 3] in ("let", "add"):19
op = expression[i : i + 3]21
elif expression[i : i + 4] == "mult":24
elif expression[i].isalpha():26
while i < hi and expression[i].isalnum():29
if op in ("add", "mult"):31
elif expression[i].isdigit() or expression[i] == "-":33
while i < hi and (expression[i].isdigit() or expression[i] == "-"):40
elif expression[i] == "(":41
v = fn(i + 1, loc[i], mp.copy())54
return reduce(mul, vals)56
return fn(0, len(expression), {})