#!/usr/bin/env python3 import sys from calc.lexer import tokenize, LexError from calc.parser import parse, ParseError from calc.evaluator import evaluate, EvalError def fmt(value) -> str: # Whole-valued floats print as int; non-whole as float. if isinstance(value, float) and value == int(value): return str(int(value)) return str(value) def main(): if len(sys.argv) != 2: print("usage: calc.py ", file=sys.stderr) sys.exit(1) expr = sys.argv[1] try: result = evaluate(parse(tokenize(expr))) print(fmt(result)) except (LexError, ParseError, EvalError) as e: print(f"error: {e}", file=sys.stderr) sys.exit(1) if __name__ == "__main__": main()