Exemple #1
0
 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
Exemple #2
0
 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
Exemple #3
0
 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