Exemple #1
0
 def exitTermModule(self, ctx):
     if len(ctx.power()) == 2:
         valorD = self.pilaValores.pop()
         valorI = self.pilaValores.pop()
         if self.numerico(valorD) and self.numerico(valorI):
             nodo = Nodo()
             if valorD.tipoValor == "FLOAT" or valorI.tipoValor == "FLOAT":
                 nodo.tipoValor = "FLOAT"
             else:
                 nodo.tipoValor = "INTEGER"
             nodo.valor = valorD.valor % valorI.valor
             self.pilaValores.append(nodo)
             print("Nuevo modulo: " + str(nodo.valor))
         else:
             raise RuntimeError("Error en los operandos, deben ser de tipo numerico")
Exemple #2
0
 def exitTermModule(self, ctx):
     if len(ctx.power()) == 2:
         valorD = self.pilaValores.pop()
         valorI = self.pilaValores.pop()
         if self.numerico(valorD) and self.numerico(valorI):
             nodo = Nodo()
             if valorD.tipoValor == "FLOAT" or valorI.tipoValor == "FLOAT" :
                 nodo.tipoValor = "FLOAT"
             else:
                 nodo.tipoValor = "INTEGER"
             nodo.valor = valorD.valor % valorI.valor
             self.pilaValores.append(nodo)
             print("Nuevo modulo: "+str(nodo.valor))     
         else:
             raise RuntimeError('Error en los operandos, deben ser de tipo numerico') 
Exemple #3
0
    def exitComparisonEval(self, ctx):
        valorI = self.pilaValores.pop()
        valorD = self.pilaValores.pop()
        nodo = Nodo()

        op = ctx.comp_op().getText()

        if op == "<":
            nodo.valor = valorI.valor < valorD.valor
        elif op == ">":
            nodo.valor = valorI.valor > valorD.valor
        elif op == "==":
            nodo.valor = valorI.valor == valorD.valor
        elif op == ">=":
            nodo.valor = valorI.valor >= valorD.valor
        elif op == "<=":
            nodo.valor = valorI.valor <= valorD.valor
        elif op == "<>":
            nodo.valor = valorI.valor <> valorD.valor
        elif op == "!=":
            nodo.valor = valorI.valor != valorD.valor

        nodo.tipoValor = "BOOL"
        self.pilaValores.append(nodo)
        print("Nueva compracion: " + str(nodo.valor))
Exemple #4
0
 def exitComparisonEval(self, ctx):
     valorI = self.pilaValores.pop()
     valorD = self.pilaValores.pop()
     nodo = Nodo()
     
     op = ctx.comp_op().getText()
     
     if op == "<":
         nodo.valor = valorI.valor < valorD.valor
     elif op == ">":
         nodo.valor = valorI.valor > valorD.valor
     elif op == "==":
         nodo.valor = valorI.valor == valorD.valor
     elif op == ">=":
         nodo.valor = valorI.valor >= valorD.valor
     elif op == "<=":
         nodo.valor = valorI.valor <= valorD.valor
     elif op == "<>":
         nodo.valor = valorI.valor <> valorD.valor
     elif op == "!=":
         nodo.valor = valorI.valor != valorD.valor
          
     nodo.tipoValor = "BOOL"
     self.pilaValores.append(nodo)
     print("Nueva compracion: "+str(nodo.valor))
Exemple #5
0
 def exitPowerEval(self, ctx):
     if len(ctx.atom_stmt()) == 2:
         valorD = self.pilaValores.pop()
         valorI = self.pilaValores.pop()
         if self.numerico(valorD) and self.numerico(valorI):
             nodo = Nodo()
             nodo.tipoValor = "FLOAT"
             nodo.valor = valorI.valor ** valorD.valor
             self.pilaValores.append(nodo)
             print("Nueva potencia: " + str(nodo.valor))
         else:
             raise RuntimeError("Error en los operadores, deben ser de tipo entero")
Exemple #6
0
 def exitShiftRight(self, ctx):
     if len(ctx.arith_expr() ) == 2:
         valorD = self.pilaValores.pop()
         valorI = self.pilaValores.pop()
         if valorD.tipoValor == "INTEGER" and valorI.tipoValor == "INTEGER":
             nodo = Nodo()
             nodo.tipoValor = "INTEGER"
             nodo.valor = valorD.valor >> valorI.valor
             self.pilaValores.append(nodo)
             print("Nueva shift right: "+str(nodo.valor))     
         else:
             raise RuntimeError('Error en los operandos, deben ser de tipo entero')    
Exemple #7
0
 def exitShiftRight(self, ctx):
     if len(ctx.arith_expr()) == 2:
         valorD = self.pilaValores.pop()
         valorI = self.pilaValores.pop()
         if valorD.tipoValor == "INTEGER" and valorI.tipoValor == "INTEGER":
             nodo = Nodo()
             nodo.tipoValor = "INTEGER"
             nodo.valor = valorD.valor >> valorI.valor
             self.pilaValores.append(nodo)
             print("Nueva shift right: " + str(nodo.valor))
         else:
             raise RuntimeError("Error en los operandos, deben ser de tipo entero")
Exemple #8
0
 def exitPowerEval(self, ctx):
     if len(ctx.atom_stmt()) == 2:
         valorD = self.pilaValores.pop()
         valorI = self.pilaValores.pop()
         if self.numerico(valorD) and self.numerico(valorI):
             nodo = Nodo()
             nodo.tipoValor = "FLOAT"
             nodo.valor = valorI.valor ** valorD.valor
             self.pilaValores.append(nodo)
             print("Nueva potencia: "+str(nodo.valor))
         else:
             raise RuntimeError('Error en los operadores, deben ser de tipo entero')           
Exemple #9
0
 def exitAndTest(self, ctx):
     if len(ctx.not_test()) == 2:
         valorD = self.pilaValores.pop()
         valorI = self.pilaValores.pop()
         if valorD.tipoValor == "BOOL" and valorI.tipoValor == "BOOL":
             nodo = Nodo()
             nodo.tipoValor = "BOOL"
             nodo.valor = valorD.valor and valorI.valor
             self.pilaValores.append(nodo)
             print("Nuevo ORT: "+str(nodo.valor))     
         else:
             raise RuntimeError('Error en los operandos, deben ser de tipo logico') 
Exemple #10
0
 def exitAndTest(self, ctx):
     if len(ctx.not_test()) == 2:
         valorD = self.pilaValores.pop()
         valorI = self.pilaValores.pop()
         if valorD.tipoValor == "BOOL" and valorI.tipoValor == "BOOL":
             nodo = Nodo()
             nodo.tipoValor = "BOOL"
             nodo.valor = valorD.valor and valorI.valor
             self.pilaValores.append(nodo)
             print("Nuevo ORT: " + str(nodo.valor))
         else:
             raise RuntimeError("Error en los operandos, deben ser de tipo logico")
Exemple #11
0
 def enterNumberFloat(self, ctx):
     valor = float(ctx.FLOAT_NUMBER().getText())
     nodo = Nodo()
     nodo.valor = valor
     nodo.tipoValor = "FLOAT"
     self.pilaValores.append(nodo)
Exemple #12
0
 def enterNumberInteger(self, ctx):
     valor = int(ctx.integer().getText())
     nodo = Nodo()
     nodo.valor = valor
     nodo.tipoValor = "INTEGER"
     self.pilaValores.append(nodo)
Exemple #13
0
 def enterAtomFalse(self, ctx):
     nodo = Nodo()
     nodo.valor = False
     nodo.tipoValor = "BOOL"
     self.pilaValores.append(nodo)
Exemple #14
0
 def enterAtomNone(self, ctx):
     nodo = Nodo()
     nodo.valor = None
     nodo.tipoValor = "NONE"
     self.pilaValores.append(nodo)
Exemple #15
0
 def enterAtomString(self, ctx):
     nodo = Nodo()
     nodo.valor = ctx.string()
     nodo.tipoValor = "STRING"
     self.pilaValores.append(nodo)
Exemple #16
0
 def enterAtomName(self, ctx):
     nodo = Nodo()
     valor = self.evaluarSimbolo(ctx.NAME())
     nodo.tipoValor = valor[0]
     nodo.valor = valor[1]
     self.pilaValores.append(nodo)
Exemple #17
0
 def enterAtomName(self, ctx):
     nodo = Nodo()
     valor = self.evaluarSimbolo(ctx.NAME())
     nodo.tipoValor = valor[0]
     nodo.valor = valor[1]
     self.pilaValores.append(nodo)
Exemple #18
0
 def enterAtomString(self, ctx):
     nodo = Nodo()
     nodo.valor = ctx.string()
     nodo.tipoValor = "STRING"
     self.pilaValores.append(nodo)
Exemple #19
0
 def enterAtomNone(self, ctx):
     nodo = Nodo()
     nodo.valor = None
     nodo.tipoValor = "NONE"
     self.pilaValores.append(nodo)
Exemple #20
0
 def enterNumberFloat(self, ctx):
     valor = float(ctx.FLOAT_NUMBER().getText())
     nodo = Nodo()
     nodo.valor = valor
     nodo.tipoValor = "FLOAT"
     self.pilaValores.append(nodo)
Exemple #21
0
 def enterNumberInteger(self, ctx):
     valor = int(ctx.integer().getText())
     nodo = Nodo()
     nodo.valor = valor
     nodo.tipoValor = "INTEGER"
     self.pilaValores.append(nodo)
Exemple #22
0
 def enterAtomFalse(self, ctx):
     nodo = Nodo()
     nodo.valor = False
     nodo.tipoValor = "BOOL"
     self.pilaValores.append(nodo)