def mathOp(line, tline, i, rowNum): op = [] num_of_operations = 0 num_of_AN = 0 while i < len(line): if line[i] == "SUM OF": op.append("+") i += 1 num_of_operations += 1 elif line[i] == "DIFF OF": op.append("-") i += 1 num_of_operations += 1 elif line[i] == "PRODUKT OF": op.append("*") i += 1 num_of_operations += 1 elif line[i] == "QUOSHUNT OF": op.append("/") i += 1 num_of_operations += 1 elif line[i] == "MOD OF": op.append("%") i += 1 num_of_operations += 1 elif line[i] == "BIGGR OF": op.append("max") i += 1 num_of_operations += 1 elif line[i] == "SMALLR OF": op.append("min") i += 1 num_of_operations += 1 else: if tline[i] == "NUMBR": op.append(int(line[i])) i += 1 elif tline[i] == "NUMBAR": op.append(float(line[i])) i += 1 elif tline[i] == "VARIABLE": value, _ = searchVarValue(line[i]) op.append(value) i += 1 elif tline[i] == "YARN": value = typeCasting(line[i], tline[i], "NUMBAR", rowNum) op.append(value) i += 1 elif tline[i] == "AN": i += 1 num_of_AN += 1 else: raise RuntimeError("Unexpected %r at line %d" % (line[i], rowNum)) i += 1 expected_operands = num_of_operations + 1 actual_operands = len(op) - (num_of_AN + num_of_operations) if expected_operands != actual_operands: raise RuntimeError( "Expected %d operands, but found %d at line %d" % (expected_operands, actual_operands, rowNum) ) else: return parse(deque(op))