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_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