def do_open(self, path): try: with open(path) as f: lines = f.readlines() ESParser(lines) self.set_lines(lines) print(f"File { path } was successfully open") except Exception as e: print(e)
def do_solve(self, id): try: parser = ESParser(self.lines) queries = [id] if id else parser.queries tree = Tree.NPITree(parser.structured_rules, parser.facts, parser.queries) for query in queries: print(f"{query} resolved as", tree.resolve_query(query)) except (Exception, BaseException) as e: print(e)
def test_mix2(): try: with open('./tests/_examples/good_files/mix2.txt') as f: content = f.readlines() except: print('Error opening file for reading') raise parser = ESParser(content) tree = NPITree(parser.structured_rules, parser.facts, parser.queries) assert tree.resolve_query("C") is True
def test_test_neg5(): try: with open('./tests/_correction/test_neg5') as f: content = f.readlines() except: print('Error opening file for reading') raise parser = ESParser(content) tree = NPITree(parser.structured_rules, parser.facts, parser.queries) assert tree.resolve_query("A") is False
def do_add_rule(self, rule): if rule is None or rule.__len__() is 0: print("<rule> argument required") return self.lines.insert(0, rule) try: ESParser(self.lines) print(f"{rule} was successfully added") except (Exception, BaseException) as e: print(f"Error adding the rule {rule}: { e }") self.lines.pop(0)
def test_multiple_initial_facts5(): try: with open('./tests/_examples/good_files/multiple_initial_facts5.txt' ) as f: content = f.readlines() except: print('Error opening file for reading') raise parser = ESParser(content) tree = NPITree(parser.structured_rules, parser.facts, parser.queries) assert tree.resolve_query("E") is False assert tree.resolve_query("F") is False
def do_add_query(self, query): if query is None or query.__len__() is 0: print("<query> argument required") return for i, line in enumerate(self.lines): if line[0] == "?": if query not in line: self.lines[i] = line[:1] + query + line[1:] try: ESParser(self.lines) print(f"{ query } was successfully added") except: print(f"Error adding the query { query }") self.lines[i] = line return
def do_add_fact(self, fact): if fact is None or fact.__len__() is 0: print("<fact> argument required") return for i, line in enumerate(self.lines): if line[0] == "=": if fact not in line: self.lines[i] = line[:1] + fact + line[1:] try: ESParser(self.lines) print(f"{ fact } was successfully added") except: print(f"Error adding the fact { fact }") self.lines[i] = line return
def test_good_files(input, expected): with open("./tests/_examples/good_files/" + input) as f: file_lines = f.readlines(1000) parser = ESParser(file_lines) tree = NPITree(parser.structured_rules, parser.facts, parser.queries) i = 0 for query in parser.queries: if expected[i] == "ERROR": try: tree.resolve_query(query) except: pass continue assert False else: assert tree.resolve_query(query) == expected[i] i += 1
f.write(';' + '\n') Print.ESPrinter(parser.structured_rules, parser.facts, parser.queries).parser_file_history() if __name__ == "__main__": args = Cmd.args try: with open(args.input) as f: lines = f.readlines() if args.mode == "interactive": Prompt.ESPrompt(lines).cmdloop() else: parser = ESParser(lines) if args and args.graph: print(f"[---- Tree representation ---- ]") Print.ESPrinter(parser.structured_rules, parser.facts, parser.queries).display_tree_in_shell() print("") if args and args.rules: print(f"[ ------ List of rules ------ ] ") Print.ESPrinter(parser.structured_rules, parser.facts, parser.queries).display_rules() print("") res = resolve_lines(parser) if args.history: save_history(res)