def evaluate(self, state: Evaluator.Evaluator.EvaluationState = None): if state is None: return self.evaluate(Evaluator.Evaluator.EvaluationState()) if self.__params is None: self.__params = list() state.bind_function(str(self.__identifier), (self.__return_type, self.__params, self.__body)) return None, Evaluator.ReturnType.CONTINUE
def evaluate(self, state: Evaluator.Evaluator.EvaluationState = None): if state is None: return self.evaluate(Evaluator.Evaluator.EvaluationState()) val, ret = self.__expr.evaluate(state) if val is None: super().evaluatorException("INTERPRETATION ERROR: Expected value got void") current_val = state.lookup(str(self.__identifier)) if type(current_val) != type(val): super().evaluatorException("INTERPRETATION ERROR: Expected {0} got {1} instead".format( type(current_val).__name__, type(val).__name__)) state.bind(str(self.__identifier), val) return val, Evaluator.ReturnType.CONTINUE
def evaluate(self, state: Evaluator.Evaluator.EvaluationState = None): if state is None: state = Evaluator.Evaluator.EvaluationState() self.evaluate(state) if not state.has_function("main"): super().evaluatorException("INTERPRETATION ERROR: Required function 'main' not found") main = state.lookup_function("main") if main[2]: val, ret = main[2].evaluate(state) provided_type = type(val).__name__ if provided_type == "NoneType": provided_type = "void" if ret == Evaluator.ReturnType.RETURN and provided_type != main[0]: super().evaluatorException("INTERPRETATION ERROR: Return type of 'main': {0}, provided {1} " "instead".format(main[0], provided_type)) return val, ret = self.__head.evaluate(state) if self.__tail is not None and self.__tail != "" and ret != Evaluator.ReturnType.RETURN: val, ret = self.__tail.evaluate(state) return val, ret