Esempio n. 1
0
def resolve_file(filename):
    parser = Parser()
    try:
        with open(filename, 'r') as file:
            for line in file:
                line = re.sub('\s', '', line)
                line_is_ignored = ignored_line.match(line)
                if line_is_ignored is not None:
                    continue
                try:
                    parser.handle_line(line)
                except ParseError as exception:
                    print(
                        colored(
                            'Parse error of type : {} detected on line\n\t --> {}'
                            .format(exception.exception_type, line), 'red'))
                    raise FileError()
        if not parser.queries:
            print(colored('No queries furnished', 'red'))
            raise FileError
        if args.verbose:
            print(parser)
        resolver = Resolver(parser.facts, parser.rules, args.verbose)
        for query in parser.queries:
            try:
                if args.verbose:
                    print(
                        colored('Query to solve : {}'.format(query), 'yellow'))
                response = resolver.resolve_query(query)
                print(
                    colored(
                        'query {}  has been resolved to : {}'.format(
                            query, response), 'green'))
            except ContradictionError as exception:
                print(
                    colored(
                        'Contradiction detected on {0} that is {1} while his opposite is also {1}'
                        .format(exception.name, exception.value), 'red'))
    except (FileNotFoundError, NameError, PermissionError, IsADirectoryError,
            UnicodeDecodeError) as error:
        print(colored(error, 'red'))
        raise FileError()