diff --git a/main.py b/main.py new file mode 100644 index 0000000..f52952d --- /dev/null +++ b/main.py @@ -0,0 +1,36 @@ +from emis_funky_funktions import * + +from typing import Sequence + +from grammar import lex_and_parse +from lex import Lexeme +from resolution import derives_false + +def main(args: Sequence[str]) -> Tuple[str, int]: + match args[1:]: + case [file]: + with open(file) as input: + match lex_and_parse(input.read()): + case Ok(Ok(ir_kb)): + return ( + 'no' + if derives_false(ir_kb) else + 'yes', + 0 + ) + case Ok(Err(gen_ir_err)): + return (str(gen_ir_err), 102) + case Err((Lexeme(token, text, line, col_start, col_end), expected)): + return ( + f'Parse error! Line {line}:{col_start}-{col_end}\n\nGot: {repr(text)}\nExpected: {expected}', + 101 + ) + case _: + return (f'Usage: python {args[0]} some_file.cnf', 100) + raise Exception('Unreachable') + +if __name__ == '__main__': + from sys import argv + out, code = main(argv) + print(out) + exit(code) \ No newline at end of file