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")
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')
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))
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))
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")
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')
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")
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')
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')
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")
def enterNumberFloat(self, ctx): valor = float(ctx.FLOAT_NUMBER().getText()) nodo = Nodo() nodo.valor = valor nodo.tipoValor = "FLOAT" self.pilaValores.append(nodo)
def enterNumberInteger(self, ctx): valor = int(ctx.integer().getText()) nodo = Nodo() nodo.valor = valor nodo.tipoValor = "INTEGER" self.pilaValores.append(nodo)
def enterAtomFalse(self, ctx): nodo = Nodo() nodo.valor = False nodo.tipoValor = "BOOL" self.pilaValores.append(nodo)
def enterAtomNone(self, ctx): nodo = Nodo() nodo.valor = None nodo.tipoValor = "NONE" self.pilaValores.append(nodo)
def enterAtomString(self, ctx): nodo = Nodo() nodo.valor = ctx.string() nodo.tipoValor = "STRING" self.pilaValores.append(nodo)
def enterAtomName(self, ctx): nodo = Nodo() valor = self.evaluarSimbolo(ctx.NAME()) nodo.tipoValor = valor[0] nodo.valor = valor[1] self.pilaValores.append(nodo)
def enterAtomName(self, ctx): nodo = Nodo() valor = self.evaluarSimbolo(ctx.NAME()) nodo.tipoValor = valor[0] nodo.valor = valor[1] self.pilaValores.append(nodo)
def enterAtomString(self, ctx): nodo = Nodo() nodo.valor = ctx.string() nodo.tipoValor = "STRING" self.pilaValores.append(nodo)
def enterAtomNone(self, ctx): nodo = Nodo() nodo.valor = None nodo.tipoValor = "NONE" self.pilaValores.append(nodo)
def enterNumberFloat(self, ctx): valor = float(ctx.FLOAT_NUMBER().getText()) nodo = Nodo() nodo.valor = valor nodo.tipoValor = "FLOAT" self.pilaValores.append(nodo)
def enterNumberInteger(self, ctx): valor = int(ctx.integer().getText()) nodo = Nodo() nodo.valor = valor nodo.tipoValor = "INTEGER" self.pilaValores.append(nodo)
def enterAtomFalse(self, ctx): nodo = Nodo() nodo.valor = False nodo.tipoValor = "BOOL" self.pilaValores.append(nodo)