def generarC3D(instrucciones, ts_global): global contadorLlamadas, tablaSimbolos, ts, tf2 global cadenaTraduccion, tf, cadenaManejador global cadenaFuncionIntermedia,numFuncionSQL cadenaTraduccion = "" cadenaFuncionIntermedia = "" contadorLlamadas = 0 numFuncionSQL = 0 cadenaManejador = "" resetTemporalA() resetTemporalT() resetTemporalEtiqueta() tf = TF.TablaDeFunciones() tf2 = TF.TablaDeFunciones() cadenaFuncionIntermedia += "from gramatica import parse" cadenaFuncionIntermedia += "\nfrom principal import * " cadenaFuncionIntermedia += "\nimport ts as TS" cadenaFuncionIntermedia += "\nimport ts_index as TSINDEX" cadenaFuncionIntermedia += "\nfrom expresiones import *" cadenaFuncionIntermedia += "\nfrom instrucciones import *" cadenaFuncionIntermedia += "\nfrom report_ast import *" cadenaFuncionIntermedia += "\nfrom report_tc import *" cadenaFuncionIntermedia += "\nfrom report_ts import *" cadenaFuncionIntermedia += "\nfrom report_errores import *\n\n" cadenaFuncionIntermedia += "\nclass Intermedio():" cadenaFuncionIntermedia += "\n\tinstrucciones_Global = []" cadenaFuncionIntermedia += "\n\ttc_global1 = []" cadenaFuncionIntermedia += "\n\tts_globalIndex1 = []" cadenaFuncionIntermedia += "\n\tts_global1 = []\n" cadenaFuncionIntermedia += "\n\tdef __init__(self):" cadenaFuncionIntermedia += "\n\t\t''' Funcion Intermedia '''\n\n" cadenaTraduccion += "from FuncionInter import * " + "\n" cadenaTraduccion += "from goto import with_goto" + "\n\n" cadenaTraduccion += "inter = Intermedio()" + "\n\n" cadenaTraduccion += "@with_goto # Decorador necesario." + "\n" cadenaTraduccion += "def main():" + "\n" cadenaTraduccion += "\tpos = -1" + "\n" cadenaTraduccion += "\tarr = [0] * 10000" + "\n" indice = 0 ts = ts_global while indice < len(instrucciones): instruccion = instrucciones[indice] if isinstance(instruccion, ListaDeclaraciones): generarListaDeclaraciones(instruccion, ts) elif isinstance(instruccion, LlamadaFuncion): generarLlamadaFuncion(instruccion, ts) elif isinstance(instruccion, Principal): generarPrincipal(instruccion, ts) cadenaTraduccion += '\t\n' cadenaTraduccion += '\tgoto. end' elif isinstance(instruccion, Funcion): guardarFuncion(instruccion, ts) elif isinstance(instruccion, DropFunction): generarDropFunction(instruccion, ts,tf) elif isinstance(instruccion, DropProcedure): generarDropProcedure(instruccion, ts,tf) elif isinstance(instruccion, CreateDatabase): cadenaTraduccion += "\n\tinter.procesar_funcion"+"CreateDatabase"+str(numFuncionSQL)+"()" cadenaFuncionIntermedia += createDatabaseFuncion(instruccion, ts,'CreateDatabase') elif isinstance(instruccion, ShowDatabases): cadenaTraduccion += "\n\tinter.procesar_funcion"+"ShowDatabases"+str(numFuncionSQL)+"()" cadenaFuncionIntermedia += createShowDatabasesFuncion(instruccion, ts,'ShowDatabases') elif isinstance(instruccion, UseDatabase): cadenaTraduccion += "\n\tinter.procesar_funcion"+"UseDatabase"+str(numFuncionSQL)+"()" cadenaFuncionIntermedia += createUseDatabaseFuncion(instruccion, ts,'UseDatabase') elif isinstance(instruccion, ShowTables): cadenaTraduccion += "\n\tinter.procesar_funcion"+"ShowTables"+str(numFuncionSQL)+"()" cadenaFuncionIntermedia += createShowTablesFuncion(instruccion, ts,'ShowTables') elif isinstance(instruccion, DropDatabase): cadenaTraduccion += "\n\tinter.procesar_funcion"+"DropDatabase"+str(numFuncionSQL)+"()" cadenaFuncionIntermedia += createDropDatabaseFuncion(instruccion, ts,'') elif isinstance(instruccion, CreateTable): cadenaTraduccion += "\n\tinter.procesar_funcion"+"CreateTable"+str(numFuncionSQL)+"()" cadenaFuncionIntermedia += createCreateTableFuncion(instruccion, ts,'CreateTable') elif isinstance(instruccion, DropTable): cadenaTraduccion += "\n\tinter.procesar_funcion"+"DropTable"+str(numFuncionSQL)+"()" cadenaFuncionIntermedia += createDropTablesFuncion(instruccion, ts,'DropTable') elif isinstance(instruccion, AlterDatabase): cadenaTraduccion += "\n\tinter.procesar_funcion"+"AlterDatabase"+str(numFuncionSQL)+"()" cadenaFuncionIntermedia += createAlterDatabaseFuncion(instruccion, ts,'AlterDatabase') elif isinstance(instruccion, AlterTable): cadenaTraduccion += "\n\tinter.procesar_funcion"+"AlterTable"+str(numFuncionSQL)+"()" cadenaFuncionIntermedia += createAlterTableFuncion(instruccion, ts,'AlterTable') elif isinstance(instruccion, InsertTable): cadenaTraduccion += "\n\tinter.procesar_funcion"+"Insert"+str(numFuncionSQL)+"()" cadenaFuncionIntermedia += createInsertTableFuncion(instruccion, ts,'Insert') elif isinstance(instruccion, SelectTable): cadenaTraduccion += "\n\tinter.procesar_funcion"+"Select"+str(numFuncionSQL)+"()" cadenaFuncionIntermedia += createSelectTableFuncion(instruccion, ts,'Select') elif isinstance(instruccion, SelectUniones): cadenaTraduccion += "\n\tinter.procesar_funcion"+"Select"+str(numFuncionSQL)+"()" cadenaFuncionIntermedia += createSelectUnionesTableFuncion(instruccion, ts,'Select') elif isinstance(instruccion, FuncionIndex): cadenaTraduccion += "\n\tinter.procesar_funcion"+"CreateIndex"+str(numFuncionSQL)+"()" cadenaFuncionIntermedia += createIndexFuncion(instruccion, ts,'CreateIndex') elif isinstance(instruccion, UpdateTable): cadenaTraduccion += "\n\tinter.procesar_funcion"+"Update"+str(numFuncionSQL)+"()" cadenaFuncionIntermedia += createUpdateTableFuncion(instruccion, ts,'Update') elif isinstance(instruccion, DropIndex): cadenaTraduccion += "\n\tinter.procesar_funcion"+"DropIndex"+str(numFuncionSQL)+"()" cadenaFuncionIntermedia += createDropIndexFuncion(instruccion, ts,'DropIndex') elif isinstance(instruccion, AlterIndex): cadenaTraduccion += "\n\tinter.procesar_funcion"+"AlterIndex"+str(numFuncionSQL)+"()" cadenaFuncionIntermedia += createAlterIndexFuncion(instruccion, ts,'AlterIndex') elif isinstance(instruccion, AlterIndexColumn): cadenaTraduccion += "\n\tinter.procesar_funcion"+"AlterIndex"+str(numFuncionSQL)+"()" cadenaFuncionIntermedia += createAlterIndexColumnFuncion(instruccion, ts,'AlterIndex') elif isinstance(instruccion, DeleteTable): cadenaTraduccion += "\n\tinter.procesar_funcion"+"Delete"+str(numFuncionSQL)+"()" cadenaFuncionIntermedia += createDeleteTableFuncion(instruccion, ts,'Delete') elif isinstance(instruccion, CreateIndexNewNew): cadenaTraduccion += "\n\tinter.procesar_funcion"+"CreateIndex"+str(numFuncionSQL)+"()" cadenaFuncionIntermedia += createCreateIndexFuncion(instruccion, ts,'CreateIndex') indice = indice + 1 tablaSimbolos = ts if numFuncionSQL > 0: cadenaTraduccion += "\n\tinter.Reportes()" cadenaTraduccion += '\t\n' cadenaTraduccion += '\tgoto. end' agregarFunciones() agregarRetorno() cadenaTraduccion += "\n\n\tlabel .end" + "\n" cadenaTraduccion += "\treturn" + "\n" cadenaTraduccion += "\nmain()" + "\n" #REPORTES FASE 1 cadenaFuncionIntermedia += generarFuncionesSQLREPORTES() salidaFuncionIntermedia = open("./FuncionInter.py", "w") salidaFuncionIntermedia.write(cadenaFuncionIntermedia) salidaFuncionIntermedia.close() return cadenaTraduccion
import PLSQL.tsPLSQL as TS import PLSQL.tfPLSQL as TF from PLSQL.instruccionesPLSQL import * from PLSQL.expresionesPLSQL import * import PLSQL.gramaticaPLSQL as g from PLSQL.report_astPLSQL import * from PLSQL.report_optimizacionPLSQL import * temporalT = 0 temporalA = 0 temporalV = 0 temporalE = 0 ts = TS.TablaDeSimbolos() tf = TF.TablaDeFunciones() cadenaTraduccion = "" cadenaManejador = "" cadenaFunciones = "" contadorLlamadas = 0 gram = [] tablaSimbolos = [] tablaELexicos = [] tablaESintacticos = [] tablaOptimizacion = [] cadenaFuncionIntermedia = "" numFuncionSQL = 0 def getGramatica(): global gram return gram