git @ Cat's Eye Technologies Lome / master src / lome / main.py
master

Tree @master (Download .tar.gz)

main.py @masterraw · history · blame

# Copyright (c) 2025-2026, Chris Pressey, Cat's Eye Technologies.
# This file is distributed under a 2-clause BSD license.  See LICENSES/ dir.
# SPDX-License-Identifier: LicenseRef-BSD-2-Clause-X-Lome

import logging
import sys
from argparse import ArgumentParser
from typing import List

from .parser import Parser
from .checker import OK, Error, check_development


logger = logging.getLogger(__name__)


def main(args: List[str]) -> None:
    logging.basicConfig(level=logging.WARN)
    parser = ArgumentParser()

    parser.add_argument('filenames', metavar='FILENAME', type=str, nargs='+',
        help='Source files to process'
    )
    parser.add_argument('--debug', action='store_true',
        help='Produce debugging output during proof checking'
    )

    options = parser.parse_args(args)
    if options.debug:
        for module in ("main", "reduce", "checker"):
            logging.getLogger(f"lome.{module}").setLevel(logging.DEBUG)
        logger.debug("debug logging enabled")

    for filename in options.filenames:
        with open(filename, "r") as f:
            development_text = f.read()
        development = Parser(development_text).development()
        logger.debug(f"parsed development: {development}")

        results = check_development(development)
        successes = [r for r in results if isinstance(r, OK)]
        errors = [r for r in results if isinstance(r, Error)]
        logger.debug(f"successes: {successes}")
        logger.debug(f"failures: {errors}")
        print(f"{len(successes)}/{len(results)} proofs verified.")

        if errors:
            for error in errors:
                print(error.msg)
            sys.exit(1)


if __name__ == '__main__':
    main(sys.argv[1:])