Skip to content
Snippets Groups Projects
Commit e4c3b8fa authored by Christopher Bohn's avatar Christopher Bohn :thinking:
Browse files

Added real, if simple, logic to parse function

parent 764ef2b7
No related branches found
No related tags found
No related merge requests found
def parse(expression): # This should have real logic
left_expression = "1"
operator = "+"
right_expression = "2"
import math
operators = {'+', '-', '*', '/'}
def parse(expression):
"""
Expects an expression in the form of left-paren left-expression operator right-expression right-paren,
where each left/right expression is either an integer or another expression.
For example, '(1+2)' or '((1+2)-(3*4))'
"""
if expression[0] != '(' or expression[-1] != ')':
raise SyntaxError(f'Expression must be bounded by parenthesis. ${expression} does not satisfy.')
full_expression = expression.replace(' ', '')[1:-1]
if full_expression[0] != '(': # the left expression is an integer
index = math.inf
for operator in operators:
this_operator_index = full_expression.find(operator)
if -1 < this_operator_index < index:
index = this_operator_index
else:
parentheses_count = 1
index = 1
while parentheses_count > 0:
if full_expression[index] == '(':
parentheses_count += 1
if full_expression[index] == ')':
parentheses_count -= 1
index += 1
left_expression = full_expression[:index]
operator = full_expression[index]
right_expression = full_expression[index + 1:]
return left_expression, operator, right_expression
def add(left_expression, right_expression):
return evaluate(left_expression) + evaluate(right_expression)
return int(evaluate(left_expression)) + int(evaluate(right_expression))
def subtract(left_expression, right_expression):
return evaluate(left_expression) - evaluate(right_expression)
return int(evaluate(left_expression)) - int(evaluate(right_expression))
def multiply(left_expression, right_expression):
return evaluate(left_expression) * evaluate(right_expression)
return int(evaluate(left_expression)) * int(evaluate(right_expression))
def divide(left_expression, right_expression):
return evaluate(left_expression) / evaluate(right_expression)
return int(evaluate(left_expression)) / int(evaluate(right_expression))
operator_map = {
......@@ -38,4 +66,7 @@ def evaluate(expression):
if __name__ == '__main__':
print(evaluate("1+2"))
print(f'(1 + 2) = {evaluate("(1 + 2)")}')
print(f'((1+2) - (3*4)) = {evaluate("((1+2) - (3*4))")}')
print(f'(1 - (3 * 4)) = {evaluate("(1 - (3 * 4))")}')
print(f'((1+2)-3) = {evaluate("((1+2)-3)")}')
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment