Ejemplo n.º 1
0
 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)
Ejemplo n.º 2
0
    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)
Ejemplo n.º 3
0
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
Ejemplo n.º 4
0
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
Ejemplo n.º 5
0
    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)
Ejemplo n.º 6
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
Ejemplo n.º 7
0
    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
Ejemplo n.º 8
0
    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
Ejemplo n.º 9
0
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
Ejemplo n.º 10
0
        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)