def generarSentenciaCase(instruccion, ts): global cadenaTraduccion exp = generarExpresion(instruccion.exp, ts) etiquetaFinal = generarTemporalEtiqueta() for caso in instruccion.casos: if (caso.exp == None): ts_local = TS.TablaDeSimbolos(ts.simbolos) generarPrincipal(caso.sentencias, ts_local) else: exp2 = generarExpresion(caso.exp, ts) etiquetaFalso = generarTemporalEtiqueta() temporal = generarTemporalT() cadenaTraduccion += '\t\n' cadenaTraduccion += '\t' + str(temporal) + " = " + str( exp) + " != " + str(exp2) + '' cadenaTraduccion += '\t\n' cadenaTraduccion += '\tif ' + str(temporal) + ': goto. ' + str( etiquetaFalso) + '' ts_local = TS.TablaDeSimbolos(ts.simbolos) generarPrincipal(caso.sentencias, ts_local) cadenaTraduccion += '\t\n' cadenaTraduccion += '\tgoto. ' + etiquetaFinal + '' cadenaTraduccion += '\t\n' cadenaTraduccion += '\tlabel. ' + etiquetaFalso cadenaTraduccion += '\t\n' cadenaTraduccion += '\tlabel. ' + etiquetaFinal
def generarSentenciaIf(instruccion, ts, etiquetaFinal): global cadenaTraduccion temporal = generarExpresion(instruccion.exp, ts) etiquetaSi = generarTemporalEtiqueta() etiquetaSino = generarTemporalEtiqueta() if etiquetaFinal == None: etiquetaFinal = generarTemporalEtiqueta() cadenaTraduccion += '\t\n' cadenaTraduccion += '\tif ' + str(temporal) + ' : goto. ' + str( etiquetaSi) + '' cadenaTraduccion += '\t\n' cadenaTraduccion += '\tgoto. ' + etiquetaSino + '' if isinstance(instruccion.sino, SentenciaIf): cadenaTraduccion += '\t\n' cadenaTraduccion += '\tlabel. ' + etiquetaSi ts_local = TS.TablaDeSimbolos(ts.simbolos) generarPrincipal(instruccion.si, ts_local) cadenaTraduccion += '\t\n' cadenaTraduccion += '\tgoto. ' + etiquetaFinal + '' cadenaTraduccion += '\t\n' cadenaTraduccion += '\tlabel. ' + etiquetaSino generarSentenciaIf(instruccion.sino, ts, etiquetaFinal) elif (instruccion.sino == None): cadenaTraduccion += '\t\n' cadenaTraduccion += '\tlabel. ' + etiquetaSi ts_local = TS.TablaDeSimbolos(ts.simbolos) generarPrincipal(instruccion.si, ts_local) cadenaTraduccion += '\t\n' cadenaTraduccion += '\tlabel. ' + etiquetaSino else: cadenaTraduccion += '\t\n' cadenaTraduccion += '\tlabel. ' + etiquetaSi ts_local = TS.TablaDeSimbolos(ts.simbolos) generarPrincipal(instruccion.si, ts_local) cadenaTraduccion += '\t\n' cadenaTraduccion += '\tgoto. ' + etiquetaFinal + '' cadenaTraduccion += '\t\n' cadenaTraduccion += '\tlabel. ' + etiquetaSino ts_local = TS.TablaDeSimbolos(ts.simbolos) generarPrincipal(instruccion.sino, ts_local) cadenaTraduccion += '\t\n' cadenaTraduccion += '\tlabel. ' + etiquetaFinal
def analizar(txt): global instrucciones_GlobalPL instruccionesPL = TRADUC.runC3D(txt) instrucciones_GlobalPL = instruccionesPL ts_globalPL = TSPL.TablaDeSimbolos() codigo3D = "" codigo3D = TRADUC.generarC3D(instruccionesPL, ts_globalPL) salida3D = open("./salida3D.py", "w") salida3D.write(codigo3D) salida3D.close() salida_table(2,'3D GENERADO CON EXITO')
def analizar_select(e): global selected if my_text.selection_get(): global instrucciones_GlobalPL selected = my_text.selection_get() instruccionesPL = TRADUC.runC3D(selected) instrucciones_GlobalPL = instruccionesPL ts_globalPL = TSPL.TablaDeSimbolos() codigo3D = "" codigo3D = TRADUC.generarC3D(instruccionesPL, ts_globalPL) salida3D = open("./salida3D.py", "w") salida3D.write(codigo3D) salida3D.close() salida_table(2,'3D GENERADO CON EXITO')
def analizar(txt): global instrucciones_GlobalPL instruccionesPL = TRADUC.runC3D(txt) if erroressss.getList() == []: instrucciones_GlobalPL = instruccionesPL ts_globalPL = TSPL.TablaDeSimbolos() codigo3D = "" codigo3D = TRADUC.generarC3D(instruccionesPL, ts_globalPL) salida3D = open("./salida3D.py", "w") salida3D.write(codigo3D) salida3D.close() salida_table(2, '3D GENERADO CON EXITO') else: salida_table(2, "PARSER ERROR")
def agregarFunciones(): global tf, cadenaTraduccion, tf2 for funcion in tf2.funciones: instruccion = tf2.obtener(funcion) tsTemp = TS.TablaDeSimbolos() if instruccion.parametros[0] != None: contador = 0 for parametro in instruccion.parametros: simbolo = TS.Simbolo(parametro.id, parametro.tipo, getEmpty(parametro.tipo), instruccion.temporales[contador]) tsTemp.agregar(simbolo) contador = contador + 1 cadenaTraduccion += '\t\n' cadenaTraduccion += '\t\n' cadenaTraduccion += '\t' + 'label. ' + str(instruccion.id) generarPrincipal(instruccion.instrucciones, tsTemp) cadenaTraduccion += '\t\n' cadenaTraduccion += '\tgoto. retorno'
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