def llamado_proc_valido(linea): cortado = re.split("\((.*)\)", linea) if cortado and len(cortado) > 1: if re.search("\(|\)", cortado[1]): sintax_error("Se realizo llamado de funcion dentro de llamado de funcion") return True return False
def param_funcion(linea): param = re.split("PARAM", linea) if len(param) > 1: if Proc.PROC: return "params[" + param[1] + "]" else: sintax_error("Uso de la palabra reservada PARAM fuera de una funcion") return
def revisar_proc_fin(linea, proc): if not proc and re.search("\^\$", linea): sintax_error("Cierre de funcion sin entrar en ella") if re.search("\^\$", linea): return False if proc: return proc return False
def revisar_return(linea): formato_return = re.search("^\s*#", linea) if formato_return: if not Proc.PROC: sintax_error("Return fuera de una funcion") sin_espacios = " ".join(re.split("#|\s+", linea)[1:]) retorno = nombre_valor_valido(sin_espacios) if retorno: return "return " + retorno return ""
def revisar_proc_inicio(linea, proc): nombre = re.sub("\)", "", linea) nombre = re.split("\$\^PROC\s*\(", nombre) if proc and re.search("\$\^PROC", linea): sintax_error("Funcion dentro de funcion") if proc: return proc, None if re.search("\$\^PROC\s*\(", linea): return True, nombre[1] return False, None
def nombre_valor_valido(linea): if linea_vacia(linea): sintax_error("No hay valor para asignar a la variable") elif re.search("^PARAM[0-9]+$", linea): return "params[" + re.split("PARAM", linea)[1] + "]" elif revisarifelse(linea): return formatearifelse(linea) elif llamado_proc_valido(linea): return formatear_llamado_proc(linea) elif len(re.split("^TRUE$", linea)) == 2: return "True" elif len(re.split("^FALSE$", linea)) == 2: return "False" elif len(re.split("[[\-0-9]*|[0-9]*]", linea)) == 2: return eliminar_espacios(linea) elif not nombre_variable_valido(linea): return eliminar_espacios(linea) else: sintax_error("Asignacion de variable invalida") return
def generar_valor_variable(asignacion_izq, asignacion_der): if len(asignacion_izq) > 1: variable = re.split("VAR\(\s*(.*)\)", asignacion_izq[0]) if len(variable) == 1: sintax_error("Asignacion de una variable sin el uso de VAR") variable = variable[1] valor = asignacion_izq[1] elif len(asignacion_der) > 1: variable = re.split("VAR\(\s*(.*)\)", asignacion_der[1]) if len(variable) == 1: sintax_error("Asignacion de una variable sin el uso de VAR") variable = variable[1] valor = asignacion_der[0] else: sintax_error("Expresion invalida") return return variable, valor
def nombre_variable_valido(linea): if len(borrar_nulos(re.split("\s*", linea))) != 1: if len(re.split("[^a-zA-Z]*", linea)) != 1: sintax_error("Uso de caracteres no permitidos para una variable") return
def creacion_variable_valido(linea): if re.search("^PARAM[0-9]+$", linea): sintax_error("Uso de nombre reservado para creacion de variable") return