class PhpParser: def parse(self, tokens): self.left_bracket = 0 self.is_class = False self.function = False self.double_quote = False self.single_quote = False class_map = {} current_class = None for token in tokens: if len(token) == 0: continue if token == "class": self.is_class = True if self.double_quote != True and self.single_quote !=True and self.left_bracket == 0 else False elif token == "function": self.function = True if self.double_quote != True and self.single_quote !=True else False elif token == "{": self.left_bracket += 1 elif token == "}": self.left_bracket -= 1 elif token == "'": self.single_quote = False if self.single_quote == True else True elif token == '"': self.single_quote = False if self.single_quote == True else True else: # it is string token, process it accordingly. if self.is_class == True and token not in class_map: class_map[token] = [] current_class = token self.is_class = False elif self.function == True and current_class != None: class_map[current_class].append(token) self.function = False return class_map parser = PhpParser() input = [ "class", "Foo", "{", "public", "$aMemberVar", "=", "'", "aMemberVar", "Member", "Variable", "'",";", "public", "$aFuncName", "=", "'","aMemberFunc","'",";", "function", "aMemberFunc","(",")", "{", "print", "'", "Inside" "`","aMemberFunc","(",")","`","'",";", "}", "function", "bob","(",")", "{", "print", '"',"hi", ",", "Hi", "am", "function", "bob2", '"',";", "}", "}", "class", "Olivia", "{", "function", "say","(",")", "{", "print", '"',"hi",'"', ";", "}", "}", "$foo", "=", "new", "Foo", ";", "class", "bogus", ";" ] print ("input = {} \n output = {}".format(input, parser.parse(input)))