예제 #1
0
    def get(self):
        self.context = Context(self.get_parent_context())
        if len(self.parameters) < len(self.applied):
            raise Exception("Invalid Not All Parameters Applied.")
        for i in range(len(self.applied)):
            if isinstance(self.applied[i], Var):
                self.context.setValueForVar(self.parameters[i], self.applied[i].get())
            else:
                self.context.setValueForVar(self.parameters[i], self.applied[i])
        if len(self.parameters) != len(self.applied):
            result = Function(self.parameters[len(self.applied):], self.context, self.code, False)

        from Parser.StandardParser import StandardParser
        parser = StandardParser(self.code, self.context)
        parsed = parser.parse()
        if parsed is None:
            return Nil()
        self.applied = []
        return parsed
 def parse_array(self):
     if self.current_char == "[":
         self.advance()
         items = []
         item = self.next_item()
         while item is not None:
             items.append(item)
             item = self.next_item()
         self.skip_whitespace()
         if self.current_char == "]":
             self.advance()
             from Parser.StandardParser import StandardParser
             parsed_items = []
             for item in items:
                 parser = StandardParser(item, self.context)
                 parsed = parser.parse()
                 if parsed is None:
                     return None
                 parsed_items.append(parsed)
             return Array(parsed_items)
     return None
 def parse_array(self):
     if self.current_char == "[":
         self.advance()
         items = []
         item = self.next_item()
         while item is not None:
             items.append(item)
             item = self.next_item()
         self.skip_whitespace()
         if self.current_char == "]":
             self.advance()
             from Parser.StandardParser import StandardParser
             parsed_items = []
             for item in items:
                 parser = StandardParser(item, self.context)
                 parsed = parser.parse()
                 if parsed is None:
                     return None
                 parsed_items.append(parsed)
             return Array(parsed_items)
     return None
예제 #4
0
    def get(self):
        self.context = Context(self.get_parent_context())
        if len(self.parameters) < len(self.applied):
            raise Exception("Invalid Not All Parameters Applied.")
        for i in range(len(self.applied)):
            if isinstance(self.applied[i], Var):
                self.context.setValueForVar(self.parameters[i],
                                            self.applied[i].get())
            else:
                self.context.setValueForVar(self.parameters[i],
                                            self.applied[i])
        if len(self.parameters) != len(self.applied):
            result = Function(self.parameters[len(self.applied):],
                              self.context, self.code, False)

        from Parser.StandardParser import StandardParser
        parser = StandardParser(self.code, self.context)
        parsed = parser.parse()
        if parsed is None:
            return Nil()
        self.applied = []
        return parsed
 def parse_call(self):
     pattern = re.compile("[ ]+")
     expressions_as_string_array = pattern.split(self.text)
     while "" in expressions_as_string_array:
         expressions_as_string_array.remove("")
     expressions_as_array = []
     if len(expressions_as_string_array) > 1:
         for expression_as_string in expressions_as_string_array:
             from Parser.StandardParser import StandardParser
             parser = StandardParser(expression_as_string, self.context)
             parsed = parser.parse()
             if parsed is None:
                 return None
             expressions_as_array.append(parsed)
         if len(expressions_as_array) > 0 and expressions_as_array[0].type(
         ) == Function:
             func = expressions_as_array[0]
             params = expressions_as_array[1:]
             if isinstance(func, Var):
                 func = func.get()
             func.apply(params)
             self.finish()
             return func.get()
     return None