#! /usr/bin/env python # -*- coding: utf-8 -*- # vim:fenc=utf-8 # # Copyright © 2019 pavle # # Distributed under terms of the BSD-3-Clause license. from lexer import Lexer from interpreter import Interpreter, InterpreterError from constants import DEC def print_stack(interpreter, stack): for item in stack: if interpreter.mode == DEC: if item.is_integer(): print(int(item)) else: print(round(float(item), 4)) else: print(interpreter.mode_func(item)) def rpncalc(): interpreter = Interpreter() while True: try: text = input('> ') except (EOFError, KeyboardInterrupt): break if not text: continue if text == 'exit': break lexer = Lexer(text) try: stack = interpreter.parse(lexer) except InterpreterError as err: print(err) print_stack(interpreter, stack) if __name__ == "__main__": rpncalc()