From 3cab3f03e8714e4f50a92c47934daf7161688ff5 Mon Sep 17 00:00:00 2001 From: Garritt McCune Date: Wed, 1 Jul 2020 22:15:25 -0500 Subject: [PATCH] Updated syntax tree to support variables in the espression. --- calc_engine.py | 2 ++ parser.py | 25 +++++++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/calc_engine.py b/calc_engine.py index c45e121..0786225 100644 --- a/calc_engine.py +++ b/calc_engine.py @@ -7,6 +7,8 @@ def calculate_results(node): if type(node) is parser.Num: return float(node.value) + elif type(node) is parser.Variable: + return node.value left = calculate_results(node.left) right = calculate_results(node.right) diff --git a/parser.py b/parser.py index 080a2d3..7d09d8f 100644 --- a/parser.py +++ b/parser.py @@ -34,6 +34,7 @@ class Parser: def __init__(self, tokens): if len(tokens) == 0: raise ValueError("Token list can't be empty") + self.variables = {} self.tokens = tokens self.current_token = None self.advance_current_token() @@ -51,6 +52,7 @@ class Parser: return node elif self.current_token.type == token.TokenType.variable: node = Variable(self.current_token) + self.variables[self.current_token.value] = node self.advance_current_token() return node elif self.current_token.type == token.TokenType.exp_start: @@ -91,3 +93,26 @@ class Parser: def generate_ast(self): return self.topLevel() + + def update_variable(self, symbol, value): + if symbol in self.variables: + self.variables[symbol].value = float(value) + else: + raise ValueError("Variable value must be a number.", value) + + def update_variables(self, variables): + if len(variables) == 0: + return + + for symbol in variables: + if symbol in self.variables: + self.variables[symbol].value = float(variables[symbol]) + else: + raise ValueError("Variable value must be a number.") + + def get_variable_value_pairs(self): + keys = {} + + for symbol in self.variables: + keys[symbol] = self.variables[symbol].value + return keys