import sys from calc.lexer import tokenize, LexError from calc.parser import parse, ParseError from calc.evaluator import evaluate, EvalError def _fmt(result) -> str: return str(result) def main(): if len(sys.argv) != 2: print("usage: calc.py ", file=sys.stderr) sys.exit(1) try: tokens = tokenize(sys.argv[1]) ast = parse(tokens) result = evaluate(ast) print(_fmt(result)) except (LexError, ParseError, EvalError) as e: print(f"error: {e}", file=sys.stderr) sys.exit(1) if __name__ == '__main__': main()