def error_funcion_Y_O_NO(item, lin_rev): #Y var1 var2 respuesta if (len(item) > 4): errores.append("Linea " + str(lin_rev) + ": " + "Excede el numero de operaciones/operandos") elif (item[1] not in variables): errores.append( "Linea " + str(lin_rev) + ": " + " '" + item[1] + "' variable no ha sido declarada -> 'nueva nombre_var tipo valor'") elif (item[2] not in variables): errores.append( "Linea " + str(lin_rev) + ": " + " '" + item[2] + "' variable no ha sido declarada -> 'nueva nombre_var tipo valor'") elif (item[3] not in variables): errores.append( "Linea " + str(lin_rev) + ": " + " '" + item[3] + "' variable no ha sido declarada -> 'nueva nombre_var tipo valor'")
def error_funcion_nueva(item, lin_rev): tipos_de_datos = ["C", "I", "R", "L"] if (len(item) > 4): errores.append("Linea " + str(lin_rev) + ": " + "Excede el numero de operaciones/operandos") elif (nombre_var_valido(item[1]) == False): errores.append("Linea " + str(lin_rev) + ": " + " '" + item[1] + "' nombre de variable NO válido") elif (item[2] not in tipos_de_datos): errores.append("Linea " + str(lin_rev) + ": " + " '" + item[2] + "' Tipo de dato inválido") elif (item[2] == "I" and not item[3].isdigit()): errores.append("Linea " + str(lin_rev) + ": " + " '" + item[3] + "' No pertenece al tipo de dato <" + item[2] + "> especificado") elif (item[2] == "L" and not (item[3] == "1" or item[3] == "0")): errores.append("Linea " + str(lin_rev) + ": " + " '" + item[3] + "' No pertenece al tipo de dato <" + item[2] + "> especificado") else: variables.append(item[1]) valores_variables.append(item[3]) tipo_variables.append(item[2])
def error_funciones_1_operando(item, lin_rev): if (len(item) > 2): errores.append("Linea " + str(lin_rev) + ": " + "Excede el numero de operaciones/operandos") elif (nombre_var_valido(item[1]) == False): errores.append( "Linea " + str(lin_rev) + ": " + " '" + item[1] + "' No es una variable valida: Error de nombre o nombre reservado") elif (item[1] not in variables): errores.append( "Linea " + str(lin_rev) + ": " + " '" + item[1] + "' variable no ha sido declarada -> 'nueva nombre_var tipo valor'")
def error_funcion_etiqueta(item, lin_rev): if (len(item) > 3): errores.append("Linea " + str(lin_rev) + ": " + "Excede el numero de operaciones/operandos") elif (nombre_var_valido(item[1]) == False): errores.append( "Linea " + str(lin_rev) + ": " + " '" + item[1] + "' No es una variable valida: Error de nombre o nombre reservado") elif (item[1] in variables): errores.append("Linea " + str(lin_rev) + ": " + " '" + item[1] + "' variable YA ha sido declarada") else: etiquetas.append(item[1]) valores_etiquetas.append(item[2])
def verificar_sintaxis(codigo_ch): errores.clear() variables.clear() valores_variables.clear() tipo_variables.clear() etiquetas.clear() valores_etiquetas.clear() item = [] lin_rev = 1 for linea_cod in codigo_ch: #importate1 print("linea: ", lin_rev) #importante1 print(linea_cod, end = "" ) linea_cod = linea_cod.strip("\n") item = linea_cod.split(" ") while ("" in item): item.remove("") #importante1 print(item) #importate1 print() if (item[0] == "cargue"): error_funciones_1_operando(item, lin_rev) elif (item[0] == "almacene"): error_funciones_1_operando(item, lin_rev) elif (item[0] == "nueva"): error_funcion_nueva(item, lin_rev) elif (item[0] == "lea"): error_funciones_1_operando(item, lin_rev) elif (item[0] == "sume"): error_funciones_1_operando(item, lin_rev) elif (item[0] == "reste"): error_funciones_1_operando(item, lin_rev) elif (item[0] == "multiplique"): error_funciones_1_operando(item, lin_rev) elif (item[0] == "divida"): error_funciones_1_operando(item, lin_rev) elif (item[0] == "potencia"): error_funciones_1_operando(item, lin_rev) elif (item[0] == "modulo"): error_funciones_1_operando(item, lin_rev) elif (item[0] == "concatene"): error_funciones_1_operando(item, lin_rev) elif (item[0] == "elimine"): error_funciones_1_operando(item, lin_rev) elif (item[0] == "extraiga"): error_funciones_1_operando(item, lin_rev) elif (item[0] == "Y"): error_funcion_Y_O_NO(item, lin_rev) elif (item[0] == "O"): error_funcion_Y_O_NO(item, lin_rev) elif (item[0] == "NO"): error_funcion_Y_O_NO(item, lin_rev) elif (item[0] == "muestre"): error_funciones_1_operando(item, lin_rev) elif (item[0] == "imprima"): error_funciones_1_operando(item, lin_rev) elif (item[0] == "vaya"): None elif (item[0] == "vayasi"): None elif (item[0] == "etiqueta"): error_funcion_etiqueta(item, lin_rev) elif (item[0] == "XXX"): None #falta definir la función elif (item[0] == "retorne"): error_retorne(item, lin_rev) elif (item[0] == "" or item[0] == " "): errores.append("Linea " + str(lin_rev) + ": " + "Error de identación") elif (es_comentario(item[0]) == True): None # no hace nada porque un comentario no es un error de sintaxis else: errores.append("Linea " + str(lin_rev) + ": " + "La función '" + item[0] + "' no ha sido definida") item.clear() lin_rev += 1 #print("LLEGAMOS A SINTAXIS CON ", tam_memoria) if (len(memoria) + len(codigo_ch) > tam_memoria[0]): errores.append("CRITICO: MEMORIA INSIFICIENTE")
def error_retorne(item, lin_rev): if (len(item) > 2): errores.append("Linea " + str(lin_rev) + ": " + "Excede el numero de operaciones/operandos")