def build_Tree(self): self.root = Node(self.dataset) if (len(self.dataset[self.target].unique()) == 1 ): # The result is unique # print("There is only one type of target for {}, set label = {}".format(self.category, self.dataset[self.target].iloc[0])) # self.root.setName(self.category) self.root.setValue(self.dataset[self.target].iloc[0]) return self.root if (len(self.dataset.columns) <= 2): # There is only one attribute left # print("There is only one attribute, set label = ", findMostFrequentLabel(self.dataset[self.target])) # self.root.setName(self.category) self.root.setValue(findMostFrequentClass( self.dataset[self.target])) return self.root else: # find the best attribute self.dataset, best_attribute = findBestAttributeRatio( self.dataset, self.target) # print("Chosen best Attribute ", best_attribute) self.root.setName(best_attribute) best_attribute_dataGroup = self.dataset.groupby(best_attribute) # iterate categories of the best attribute, add branches to the root for category, data in best_attribute_dataGroup: data = data.drop(best_attribute, axis=1) subtree = DecisionTreeC45(data, self.target, category, best_attribute) self.root.addBranch(category, subtree.build_Tree()) return self.root
def POST(self,page): if page == "upload": x = web.input(myfile={}) filedir = '/path/where/you/want/to/save' # change this to the directory you want to store the file in. if 'myfile' in x: # to check if the file-object is created filepath=x.myfile.filename.replace('\\','/') # replaces the windows-style slashes with linux ones. filename=filepath.split('/')[-1] # splits the and chooses the last part (the filename with extension) fout = open(filedir +'/'+ filename,'w') # creates the file where the uploaded file should be stored fout.write(x.myfile.file.read()) # writes the uploaded file to the newly created file. fout.close() # closes the file, upload complete. elif page == "speak": words = web.input() from modules.Node import Node node = Node('flame_node','local') if words.body == u"" or words.id == u"": raise web.seeother('/user/contact') else: body = str(words.body.encode('utf-8','ignore')) id = int(words.id.encode('utf-8','ignore')) node.add(author=id,content=body,scope=id) raise web.seeother('/user/contact') else: raise web.seeother('/user/briefing')
def contact(self): from modules.Node import Node node = Node('flame_node','local') renderDict['messages'] = node._get(order="id DESC",scope=renderDict['user'].id) return self.render.contact(renderDict)
def main(): ## set default file for args actions_file = get_arg(1, "inputs/actions.txt") lexemes_file = get_arg(2, "inputs/lexemes.txt") cd = get_current_directory() # actions = ["METHOD_BODY ⟶ ['STATEMENT_LIST']", "STATEMENT_LIST ⟶ ['STATEMENT', 'STATEMENT_LIST_2']", "STATEMENT ⟶ ['DECLARATION']", 'DECLARATION ⟶ [\'PRIMITIVE_TYPE\', "\'id\'", "\';\'"]', 'PRIMITIVE_TYPE ⟶ ["\'int\'"]', "Match : 'int'", "Match : 'id'", "Match : ';'", "STATEMENT_LIST_2 ⟶ ['STATEMENT', 'STATEMENT_LIST_2']", "STATEMENT ⟶ ['ASSIGNMENT']", 'ASSIGNMENT ⟶ ["\'id\'", "\'assign\'", \'EXPRESSION\', "\';\'"]', "Match : 'id'", "Match : 'assign'", "EXPRESSION ⟶ ['SIMPLE_EXPRESSION', 'EXPRESSION_2']", "SIMPLE_EXPRESSION ⟶ ['TERM', 'SIMPLE_EXPRESSION_2']", "TERM ⟶ ['FACTOR', 'TERM_2']", 'FACTOR ⟶ ["\'num\'"]', "Match : 'num'", 'TERM_2 ⟶ not found', 'SIMPLE_EXPRESSION_2 ⟶ not found', 'EXPRESSION_2 ⟶ not found', "Match : ';'", "STATEMENT_LIST_2 ⟶ ['STATEMENT', 'STATEMENT_LIST_2']", "STATEMENT ⟶ ['DECLARATION']", 'DECLARATION ⟶ [\'PRIMITIVE_TYPE\', "\'id\'", "\';\'"]', 'PRIMITIVE_TYPE ⟶ ["\'int\'"]', "Match : 'int'", "Match : 'id'", "Match : ';'", "STATEMENT_LIST_2 ⟶ ['STATEMENT', 'STATEMENT_LIST_2']", "STATEMENT ⟶ ['ASSIGNMENT']", 'ASSIGNMENT ⟶ ["\'id\'", "\'assign\'", \'EXPRESSION\', "\';\'"]', "Match : 'id'", "Match : 'assign'", "EXPRESSION ⟶ ['SIMPLE_EXPRESSION', 'EXPRESSION_2']", "SIMPLE_EXPRESSION ⟶ ['TERM', 'SIMPLE_EXPRESSION_2']", "TERM ⟶ ['FACTOR', 'TERM_2']", 'FACTOR ⟶ ["\'num\'"]', "Match : 'num'", 'TERM_2 ⟶ not found', 'SIMPLE_EXPRESSION_2 ⟶ not found', 'EXPRESSION_2 ⟶ not found', "Match : ';'", "STATEMENT_LIST_2 ⟶ ['STATEMENT', 'STATEMENT_LIST_2']", "STATEMENT ⟶ ['DECLARATION']", 'DECLARATION ⟶ [\'PRIMITIVE_TYPE\', "\'id\'", "\';\'"]', 'PRIMITIVE_TYPE ⟶ ["\'int\'"]', "Match : 'int'", "Match : 'id'", "Match : ';'", "STATEMENT_LIST_2 ⟶ ['STATEMENT', 'STATEMENT_LIST_2']", "STATEMENT ⟶ ['ASSIGNMENT']", 'ASSIGNMENT ⟶ ["\'id\'", "\'assign\'", \'EXPRESSION\', "\';\'"]', "Match : 'id'", "Match : 'assign'", "EXPRESSION ⟶ ['SIMPLE_EXPRESSION', 'EXPRESSION_2']", "SIMPLE_EXPRESSION ⟶ ['TERM', 'SIMPLE_EXPRESSION_2']", "TERM ⟶ ['FACTOR', 'TERM_2']", 'FACTOR ⟶ ["\'num\'"]', "Match : 'num'", 'TERM_2 ⟶ not found', 'SIMPLE_EXPRESSION_2 ⟶ not found', 'EXPRESSION_2 ⟶ not found', "Match : ';'", "STATEMENT_LIST_2 ⟶ ['STATEMENT', 'STATEMENT_LIST_2']", "STATEMENT ⟶ ['ASSIGNMENT']", 'ASSIGNMENT ⟶ ["\'id\'", "\'assign\'", \'EXPRESSION\', "\';\'"]', "Match : 'id'", "Match : 'assign'", "EXPRESSION ⟶ ['SIMPLE_EXPRESSION', 'EXPRESSION_2']", "SIMPLE_EXPRESSION ⟶ ['TERM', 'SIMPLE_EXPRESSION_2']", "TERM ⟶ ['FACTOR', 'TERM_2']", 'FACTOR ⟶ ["\'id\'"]', "Match : 'id'", 'TERM_2 ⟶ not found', 'SIMPLE_EXPRESSION_2 ⟶ ["\'addop\'", \'TERM\', \'SIMPLE_EXPRESSION_2\']', "Match : 'addop'", "TERM ⟶ ['FACTOR', 'TERM_2']", 'FACTOR ⟶ ["\'id\'"]', "Match : 'id'", 'TERM_2 ⟶ ["\'mulop\'", \'FACTOR\', \'TERM_2\']', "Match : 'mulop'", 'FACTOR ⟶ ["\'num\'"]', "Match : 'num'", 'TERM_2 ⟶ not found', 'SIMPLE_EXPRESSION_2 ⟶ not found', 'EXPRESSION_2 ⟶ not found', "Match : ';'", "STATEMENT_LIST_2 ⟶ ['STATEMENT', 'STATEMENT_LIST_2']", "STATEMENT ⟶ ['IF']", 'IF ⟶ ["\'if\'", "\'(\'", \'EXPRESSION\', "\')\'", "\'{\'", \'STATEMENT\', "\'}\'", "\'else\'", "\'{\'", \'STATEMENT\', "\'}\'"]', "Match : 'if'", "Match : '('", "EXPRESSION ⟶ ['SIMPLE_EXPRESSION', 'EXPRESSION_2']", "SIMPLE_EXPRESSION ⟶ ['TERM', 'SIMPLE_EXPRESSION_2']", "TERM ⟶ ['FACTOR', 'TERM_2']", 'FACTOR ⟶ ["\'id\'"]', "Match : 'id'", 'TERM_2 ⟶ not found', 'SIMPLE_EXPRESSION_2 ⟶ not found', 'EXPRESSION_2 ⟶ ["\'relop\'", \'SIMPLE_EXPRESSION\']', "Match : 'relop'", "SIMPLE_EXPRESSION ⟶ ['TERM', 'SIMPLE_EXPRESSION_2']", "TERM ⟶ ['FACTOR', 'TERM_2']", 'FACTOR ⟶ ["\'num\'"]', "Match : 'num'", 'TERM_2 ⟶ not found', 'SIMPLE_EXPRESSION_2 ⟶ not found', "Match : ')'", "Match : '{'", "STATEMENT ⟶ ['ASSIGNMENT']", 'ASSIGNMENT ⟶ ["\'id\'", "\'assign\'", \'EXPRESSION\', "\';\'"]', "Match : 'id'", "Match : 'assign'", "EXPRESSION ⟶ ['SIMPLE_EXPRESSION', 'EXPRESSION_2']", "SIMPLE_EXPRESSION ⟶ ['TERM', 'SIMPLE_EXPRESSION_2']", "TERM ⟶ ['FACTOR', 'TERM_2']", 'FACTOR ⟶ ["\'num\'"]', "Match : 'num'", 'TERM_2 ⟶ not found', 'SIMPLE_EXPRESSION_2 ⟶ not found', 'EXPRESSION_2 ⟶ not found', "Match : ';'", "Match : '}'", "Match : 'else'", "Match : '{'", "STATEMENT ⟶ ['ASSIGNMENT']", 'ASSIGNMENT ⟶ ["\'id\'", "\'assign\'", \'EXPRESSION\', "\';\'"]', "Match : 'id'", "Match : 'assign'", "EXPRESSION ⟶ ['SIMPLE_EXPRESSION', 'EXPRESSION_2']", "SIMPLE_EXPRESSION ⟶ ['TERM', 'SIMPLE_EXPRESSION_2']", "TERM ⟶ ['FACTOR', 'TERM_2']", 'FACTOR ⟶ ["\'num\'"]', "Match : 'num'", 'TERM_2 ⟶ not found', 'SIMPLE_EXPRESSION_2 ⟶ not found', 'EXPRESSION_2 ⟶ not found', "Match : ';'", "Match : '}'", "STATEMENT_LIST_2 ⟶ ['STATEMENT', 'STATEMENT_LIST_2']", "STATEMENT ⟶ ['WHILE']", 'WHILE ⟶ ["\'while\'", "\'(\'", \'EXPRESSION\', "\')\'", "\'{\'", \'STATEMENT\', "\'}\'"]', "Match : 'while'", "Match : '('", "EXPRESSION ⟶ ['SIMPLE_EXPRESSION', 'EXPRESSION_2']", "SIMPLE_EXPRESSION ⟶ ['TERM', 'SIMPLE_EXPRESSION_2']", "TERM ⟶ ['FACTOR', 'TERM_2']", 'FACTOR ⟶ ["\'id\'"]', "Match : 'id'", 'TERM_2 ⟶ not found', 'SIMPLE_EXPRESSION_2 ⟶ not found', 'EXPRESSION_2 ⟶ ["\'relop\'", \'SIMPLE_EXPRESSION\']', "Match : 'relop'", "SIMPLE_EXPRESSION ⟶ ['TERM', 'SIMPLE_EXPRESSION_2']", "TERM ⟶ ['FACTOR', 'TERM_2']", 'FACTOR ⟶ ["\'num\'"]', "Match : 'num'", 'TERM_2 ⟶ not found', 'SIMPLE_EXPRESSION_2 ⟶ not found', "Match : ')'", "Match : '{'", "STATEMENT ⟶ ['ASSIGNMENT']", 'ASSIGNMENT ⟶ ["\'id\'", "\'assign\'", \'EXPRESSION\', "\';\'"]', "Match : 'id'", "Match : 'assign'", "EXPRESSION ⟶ ['SIMPLE_EXPRESSION', 'EXPRESSION_2']", "SIMPLE_EXPRESSION ⟶ ['TERM', 'SIMPLE_EXPRESSION_2']", "TERM ⟶ ['FACTOR', 'TERM_2']", 'FACTOR ⟶ ["\'id\'"]', "Match : 'id'", 'TERM_2 ⟶ not found', 'SIMPLE_EXPRESSION_2 ⟶ ["\'addop\'", \'TERM\', \'SIMPLE_EXPRESSION_2\']', "Match : 'addop'", "TERM ⟶ ['FACTOR', 'TERM_2']", 'FACTOR ⟶ ["\'num\'"]', "Match : 'num'", 'TERM_2 ⟶ not found', 'SIMPLE_EXPRESSION_2 ⟶ not found', 'EXPRESSION_2 ⟶ not found', "Match : ';'", "Match : '}'", 'STATEMENT_LIST_2 ⟶ not found', 'Match : $', 'Success'] action_path = cd + '/' + actions_file actions = read_file_list(action_path) ## modify the parsing table to adapt with this phase act = modify_actions(actions) act = post_modify_actions(act) act = post_modify_actions_2(act) ## make sure the actions list is not empty root_name = act[0][0][0] ## assign the root node root = Node(root_name, None) root.build_tree(act) ## remove epsillon nodes root.simplify_it(['𝛆']) lex_path = cd + '/' + lexemes_file lex = read_file_list(lex_path) ## add lexemes to the tree root.add_lexemes(lex) ## mind that additional "" is added ## simplify tree >> APT root.simplify_it(['";"', '"{"','"}"', '"("', '")"','"if"','"else"','"while"']) root.update_leaves() #for i in root.leaves: # print_green(f"leaf update: {i.name}") ## build the AST root.eliminate_exp({'"addop"', '"mulop"', '"relop"', '"assign"'}) reduce_tree(root) ## build symbol table symtab = SymTable() ## eval values for each node get_val_2(root,symtab) #root.show_tree_2() ## eval values for conditional nodes get_val_virtual(root,symtab) ## generate the byte code generate_code(root, symtab) #root.show_tree_2(1) code = root.code code = root.get_code() #print_blue("code is") #print_yellow(code) code_list = code.split('\n') #print_green(code_list) #for i in code_list: # print_green(i) root.backpatch() #print_purple(root.jasmin_in("coode")) code_list = root.get_code() print_green(code_list) print_yellow(symtab.coolTable) # output j file for jasmin code_path = cd + '/' + 'outputs' + '/' + 'code.j' write_in_file(code_path, root.jasmin_in("code"))