rpn-python/rpncalc.py

52 lines
892 B
Python
Executable File

#! /usr/bin/env python
# -*- coding: utf-8 -*-
# vim:fenc=utf-8
#
# Copyright © 2019 pavle <pavle.portic@tilda.center>
#
# 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()