diff --git a/main.py b/main.py index f8f6bcc..c1240e3 100644 --- a/main.py +++ b/main.py @@ -1,5 +1,6 @@ import re import sys +import math def tToken_finder(char): @@ -39,7 +40,6 @@ def __init__(self, origin = None, position = 0 ,actual = None): def selectNext(self): #se for o ultimo acaba - teveEspaco = 0 if (self.position >= len(self.origin)): self.actual = Token(tToken= "END") return self.actual @@ -47,7 +47,6 @@ def selectNext(self): #passa enquanto for espaço while(self.origin[self.position] == " "): self.position += 1 - teveEspaco = 1 #se for o ultimo acaba if (self.position >= len(self.origin)): self.actual = Token(tToken= "END") @@ -65,8 +64,6 @@ def selectNext(self): self.position += 1 if(self.position == len(self.origin)): break - elif(self.origin[self.position - 1 ] == " " and tToken_finder(self.origin[self.position]) == "NUM"): - raise Exception ("Espaço entre numeros") return self.actual @@ -89,10 +86,8 @@ def parseFactor(): elif(Parser.tokens.actual.type == "SUM" or Parser.tokens.actual.type == "MIN"): if(Parser.tokens.actual.type == "SUM"): res += int(Parser.parseFactor()) - # Parser.tokens.selectNext() elif(Parser.tokens.actual.type == "MIN"): res -= int(Parser.parseFactor()) - # Parser.tokens.selectNext() elif(Parser.tokens.actual.type == "OPN"): res = Parser.parseExpression() if(Parser.tokens.actual.type != "CLS"): @@ -106,16 +101,13 @@ def parseFactor(): @staticmethod def parseExpression(): - # Parser.tokens.selectNext() res = Parser.parseTerm() while(Parser.tokens.actual.type == "SUM" or Parser.tokens.actual.type == "MIN"): if (Parser.tokens.actual.type == "SUM"): - # Parser.tokens.selectNext() res += int(Parser.parseTerm()) elif (Parser.tokens.actual.type == "MIN"): - # Parser.tokens.selectNext() res -= int(Parser.parseTerm()) return res @@ -125,12 +117,10 @@ def parseTerm(): res = int(Parser.parseFactor()) while(Parser.tokens.actual.type == "MUT" or Parser.tokens.actual.type == "DIV"): if(Parser.tokens.actual.type == "MUT"): - # Parser.tokens.selectNext() res *= int(Parser.parseFactor()) elif(Parser.tokens.actual.type == "DIV"): - # Parser.tokens.selectNext() - res += int(Parser.parseFactor()) + res /= int(Parser.parseFactor()) return res @@ -143,7 +133,10 @@ def run(code): code = PrePro().filter(code) #executa o compilador Parser.tokens = Parser().tokens(origin = code) - return Parser().parseExpression() + res = Parser().parseExpression() + if Parser.tokens.actual.type != 'END': + raise Exception("ERRO") + return res @@ -153,12 +146,10 @@ def main(): raise Exception("Comando não passado") comando = "" for i in range(1,len(sys.argv)): - # print(sys.argv) comando += sys.argv[i] comando += " " resultado = Parser().run(comando) - - print("{:.0f}".format(round(resultado,2))) + print(math.floor(resultado)) if __name__ == "__main__":