Advertisement
KDOXG

Interpreter

Aug 17th, 2022 (edited)
397
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.58 KB | Source Code | 0 0
  1. from enum import Enum
  2. from sys import argv
  3.  
  4. OP = Enum('Op', 'PUSH SUM MULT SUB DIV PRINT')
  5.  
  6. if len(argv) > 1:
  7.     filename = argv[1]
  8. else:
  9.     filename = "test"
  10. try:
  11.     file = open(filename, 'r')
  12. except:
  13.     print("Erro ao abrir arquivo.")
  14.     quit()
  15. filelines = file.read().split('\n')
  16. file.seek(0)
  17. fileread = file.read().split()
  18. i = 0
  19.  
  20. isPush = False
  21. isFirst = True
  22. acc = 0
  23.  
  24. pilha = []
  25. try:
  26.     for exp in fileread:
  27.         #print("Exp: [{}]".format(exp))
  28.         #print("Line: {}".format(filelines[i]))
  29.         if isPush:
  30.             if exp.isnumeric():
  31.                 pilha.append(int(exp))
  32.                 isPush = False
  33.                 i+=1
  34.                 continue
  35.             else:
  36.                 raise Exception()
  37.         op = OP[exp]
  38.         if op == OP.PUSH:
  39.             isPush = True
  40.             continue
  41.         elif op == OP.PRINT:
  42.             print(acc)
  43.         elif op == OP.SUM:
  44.             if isFirst:
  45.                 acc = pilha.pop() + pilha.pop()
  46.                 isFirst = False
  47.             else:
  48.                 acc += pilha.pop()
  49.         elif op == OP.MULT:
  50.             if isFirst:
  51.                 acc = pilha.pop() * pilha.pop()
  52.                 isFirst = False
  53.             else:
  54.                 acc *= pilha.pop()
  55.         elif op == OP.SUB:
  56.             if isFirst:
  57.                 acc = pilha.pop()
  58.                 isFirst = False
  59.             acc = pilha.pop() - acc
  60.         elif op == OP.DIV:
  61.             if isFirst:
  62.                 acc = pilha.pop()
  63.                 isFirst = False
  64.             acc = pilha.pop() / acc
  65.  
  66.         """
  67.        match op:
  68.            case OP.PUSH:
  69.                isPush = True
  70.                continue
  71.            case OP.PRINT:
  72.                print(acc)
  73.            case OP.SUM:
  74.                if isFirst:
  75.                    acc = pilha.pop() + pilha.pop()
  76.                    isFirst = False
  77.                else:
  78.                    acc += pilha.pop()
  79.            case OP.MULT:
  80.                if isFirst:
  81.                    acc = pilha.pop() * pilha.pop()
  82.                    isFirst = False
  83.                else:
  84.                    acc *= pilha.pop()
  85.            case OP.SUB:
  86.                if isFirst:
  87.                    acc = pilha.pop()
  88.                    isFirst = False
  89.                acc = pilha.pop() - acc
  90.            case OP.DIV:
  91.                if isFirst:
  92.                    acc = pilha.pop()
  93.                    isFirst = False
  94.                acc = pilha.pop() / acc
  95.        """
  96.         i+=1
  97. except:
  98.     print("Erro na linha: \"{}\"".format(filelines[i]))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement