def p_error(t): global Ts if t is None : Ts.cargar_error("Se Alcanzo El Fin Del Archivo", 20, (0,0)) return Ts.exit_exec = 0 tup=find_column(Ts.texto_analisis, t) Ts.cargar_error("El token con lexema \""+str(t.value)+"\" de tipo \""+str(t.type)+" \" ocasiono un error sintactico",20,tup) print("Error sintáctico en '%s'" % t) # Read ahead looking for a closing '}' #t.lexer.skip(1) global parsito while True: tok = parsito.token() # Get the next token #print(tok) if not tok or tok.type == 'PUNTOCOMA': break tok=parsito.token() parsito.errok()
def xor_entero(param1: Valor, param2: Valor): from Contenido.LstInstruccion.ABCInstruccion import Ts global Ts tipo_resultante = 0 rst = 0 # Solo Se Pueden Valores Numericos if param1.tipo == 0: if param2.tipo == 0: # Entero tipo_resultante = 0 if param1.dar_valor() != param2.dar_valor(): rst = 1 else: rst = 0 else: Ts.cargar_error( "Error En XOR Con Tipos: " + param1.dar_tipo_str() + "," + param2.dar_tipo_str(), 0, ((0, 0))) print("Error En La Operacion XOR Con Tipos: " + param1.dar_tipo_str() + "," + param2.dar_tipo_str()) else: Ts.cargar_error( "Error En XOR Con Tipos: " + param1.dar_tipo_str() + "," + param2.dar_tipo_str(), 0, ((0, 0))) print("Error En La Operacion XOR Con Tipos: " + param1.dar_tipo_str() + "," + param2.dar_tipo_str()) return Valor(rst, tipo_resultante)
def xor_binario(param1: Valor, param2: Valor): from Contenido.LstInstruccion.ABCInstruccion import Ts global Ts tipo_resultante = 0 rst = 0 #Solo Se Pueden Valores Numericos if (param1.tipo == 0): if param2.tipo == 0: #Entero tipo_resultante = 0 rst = param1.dar_valor() ^ param2.dar_valor() else: print("Error En Xor Binario Con Tipos: " + param1.dar_tipo_str() + "," + param2.dar_tipo_str()) Ts.cargar_error( "Error En Xor Binario Con Tipos: " + param1.dar_tipo_str() + "," + param2.dar_tipo_str(), 0, ((0, 0))) else: Ts.cargar_error( "Error En Xor Binario Con Tipos: " + param1.dar_tipo_str() + "," + param2.dar_tipo_str(), 0, ((0, 0))) print("Error En Xor Binario Con Tipos: " + param1.dar_tipo_str() + "," + param2.dar_tipo_str()) return Valor(rst, tipo_resultante)
def shift_izquierda(param1: Valor, param2: Valor): tipo_resultante = 0 rst = 0 from Contenido.LstInstruccion.ABCInstruccion import Ts global Ts #Solo Se Pueden Valores Numericos if (param1.tipo == 0): if param2.tipo == 0: #Entero tipo_resultante = 0 rst = param1.dar_valor() << param2.dar_valor() else: print("Error En shift Izquierda Con Tipos: " + param1.dar_tipo_str() + "," + param2.dar_tipo_str()) Ts.cargar_error( "Error En Shift Izquierda Con Tipos: " + param1.dar_tipo_str() + "," + param2.dar_tipo_str(), 0, ((0, 0))) else: Ts.cargar_error( "Error En Shift Izquierda Con Tipos: " + param1.dar_tipo_str() + "," + param2.dar_tipo_str(), 0, ((0, 0))) print("Error En Shift Izquierda Con Tipos: " + param1.dar_tipo_str() + "," + param2.dar_tipo_str()) return Valor(rst, tipo_resultante)
def ejecutar(self): condicion: Valor = self.booleano.ejecutar() if condicion.tipo == 0: if condicion.dar_valor() >= 1: return self.cuerpo.ejecutar() else: global Ts Ts.cargar_error( "En La Condicional Del IF Se Necesita El Tipo ENTERO ", 0, self.tupla)
def t_error(t): from Contenido.LstInstruccion.ABCInstruccion import Ts global Ts tup = find_column(Ts.texto_analisis, t) Ts.cargar_error( "El token con lexema \"" + str(t.value[0]) + "\" ocasiono un error lexico", 30, tup) print("Illegal character '%s'" % t.value[0]) t.lexer.skip(1)
def negar_binario(param1 : Valor): from Contenido.LstInstruccion.ABCInstruccion import Ts global Ts tipo_resultante = 0 rst = 0 #Solo Se Pueden Valores Numericos if(param1.tipo==0): tipo_resultante=param1.tipo rst = ~param1.dar_valor() else: Ts.cargar_error( "Error En Negacion Binario Con Tipos: " + param1.dar_tipo_str() , 0, ((0, 0))) print("Error En La NegacionBinaria Con Tipos: " + param1.dar_tipo_str() ) return Valor(rst, tipo_resultante)
def sumar(param1 : Valor, param2 : Valor): from Contenido.LstInstruccion.ABCInstruccion import Ts global Ts tipo_resultante = 0 rst = 0 #Solo Se Pueden Valores Numericos if(param1.tipo==0): if param2.tipo==0: #Entero tipo_resultante=0 rst=param1.dar_valor() + param2.dar_valor() elif param2.tipo==1: #Decimal tipo_resultante = 1 rst = param1.dar_valor() + param2.dar_valor() else: Ts.cargar_error("Error En La Suma Con Tipos: " + param1.dar_tipo_str() + "," + param2.dar_tipo_str(), 0, ((0, 0))) print("Error En La Suma Con Tipos: " + param1.dar_tipo_str() + "," + param2.dar_tipo_str()) elif param1.tipo==1: if param2.tipo==0: #Decimal tipo_resultante=1 rst=param1.dar_valor() + param2.dar_valor() elif param2.tipo==1: #Decimal tipo_resultante = 1 rst = param1.dar_valor() + param2.dar_valor() else: Ts.cargar_error("Error En La Suma Con Tipos: " + param1.dar_tipo_str() + "," + param2.dar_tipo_str(), 0, ((0, 0))) print("Error En La Suma Con Tipos: " + param1.dar_tipo_str() + "," + param2.dar_tipo_str()) elif param1.tipo == 2: if param2.tipo == 2: # Decimal tipo_resultante = 2 rst = str(param1.dar_valor()) + str(param2.dar_valor()) else: Ts.cargar_error("Error En La Suma Con Tipos: " + param1.dar_tipo_str() + "," + param2.dar_tipo_str(), 0, ((0, 0))) print("Error En La Suma Con Tipos: " + param1.dar_tipo_str() + "," + param2.dar_tipo_str()) else: Ts.cargar_error("Error En La Suma Con Tipos: " + param1.dar_tipo_str() + "," + param2.dar_tipo_str(), 0, ((0, 0))) print("Error En La Suma Con Tipos: " + param1.dar_tipo_str() + "," + param2.dar_tipo_str()) return Valor(rst, tipo_resultante)
def not_num(param1: Valor): tipo_resultante = 0 rst = 0 from Contenido.LstInstruccion.ABCInstruccion import Ts global Ts #Solo Se Pueden Valores Numericos if (param1.tipo == 0): tipo_resultante = param1.tipo if param1.dar_valor() > 0: rst = 0 else: rst = 1 else: Ts.cargar_error( "Error En La Resta Unaria Con Tipos: " + param1.dar_tipo_str(), 0, ((0, 0))) print("Error En La Resta Unaria Con Tipos: " + param1.dar_tipo_str()) return Valor(rst, tipo_resultante)
def dividir(param1 : Valor, param2 : Valor): tipo_resultante = 0 rst = 0 from Contenido.LstInstruccion.ABCInstruccion import Ts global Ts if param2.dar_valor()==0: Ts.cargar_error( "No se pude dividir entre 0 " , 0, ((0, 0))) print(" No se puede dividir entre 0") return Valor(0, 0) #Solo Se Pueden Valores Numericos if(param1.tipo==0): if param2.tipo==0: #Entero tipo_resultante=0 rst=param1.dar_valor() / param2.dar_valor() elif param2.tipo==1: #Decimal tipo_resultante = 1 rst = param1.dar_valor() / param2.dar_valor() else: Ts.cargar_error( "Error En la division Con Tipos: " + param1.dar_tipo_str() + "," + param2.dar_tipo_str(), 0, ((0, 0))) elif param1.tipo==1: if param2.tipo==0: #Decimal tipo_resultante=1 rst=param1.dar_valor() / param2.dar_valor() elif param2.tipo==1: #Decimal tipo_resultante = 1 rst = param1.dar_valor() / param2.dar_valor() else: Ts.cargar_error( "Error En la division Con Tipos: " + param1.dar_tipo_str() + "," + param2.dar_tipo_str(), 0, ((0, 0))) else: Ts.cargar_error( "Error En la division Con Tipos: " + param1.dar_tipo_str() + "," + param2.dar_tipo_str(), 0, ((0, 0))) return Valor(rst, tipo_resultante)