示例#1
0
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
示例#2
0
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