Пример #1
0
def p_generaGOSUB(p):
	'''generaGOSUB : '''
	global listaCuadruplos
	global llamada
	global diccionarioVarGlobal
	global listaFunciones

	print "Se guardo GOSUB", llamada
	pos = busquedaFunc(llamada)
	aux1 = listaFunciones[pos].cuadruploInicial

	cuadr = Cuadruplo(32,-1,-1,aux1)
	listaCuadruplos.append(cuadr)
	var = diccionarioMemoria['3']
	mem = var[str(listaFunciones[pos].tipo)]
	pos2 = diccionarioVarGlobal[llamada]
	cuadr = Cuadruplo(5,pos2,-1,mem)
	diccionarioMemoria['3'][listaFunciones[pos].tipo] = mem + 1
	listaCuadruplos.append(cuadr)
	pass
Пример #2
0
def p_finPilaSaltosWhile(p):
	'''finPilaSaltosWhile : '''
	global pilaSaltos
	global listaCuadruplos
	saltos = pilaSaltos.pop()
	saltos2 = pilaSaltos.pop()
	cuadr = Cuadruplo(17,-1,-1,saltos2)
	listaCuadruplos.append(cuadr)
	lenCuadruplos = len(listaCuadruplos)
	listaCuadruplos[saltos].temporal = lenCuadruplos
	print "Se guardo GOTO RETORNO: ", cuadr.operador, cuadr.temporal
	pass
Пример #3
0
def p_checarImpresion(p):
	''' checarImpresion : '''
	global pilaOperadores
	global pilaOperandos
	global listaCuadruplos
	signo = pilaOperadores.pop()
	if signo == 18: 
		 operando1C = pilaOperandos.pop()
		 memoria = pilaOperandosDirMem.pop()
		 cuadr = Cuadruplo(signo, memoria,-1,-1)
		 listaCuadruplos.append(cuadr)
		 print "SE GUARDO EL CUADRUPLO DE LECTURA"
	pass
Пример #4
0
def p_checarMover(p):
	''' checarMover : '''
	global pilaOperadores
	global pilaOperandos
	global listaCuadruplos
	signo = pilaOperadores.pop()
	if signo == 24:
		pilaOperandos.pop()
		cant = pilaOperandosDirMem.pop()
		dirc = pilaOperandos.pop()
		cuadr = Cuadruplo(signo, 1, dirc, cant)
		listaCuadruplos.append(cuadr)
		print "SE GUARDO EL CUADRUPLO DE DIBUJAR"
Пример #5
0
def p_checarElse(p):
	'''checarElse : ELSE '''
	print "Entre a checar else"
	global pilaSaltos
	global listaCuadruplos
	#meter cuadruplo de go to a la pila
	cuadr = Cuadruplo(17,-1,-1,0)
	listaCuadruplos.append(cuadr)
	#rellena el goto falso
	lenCuadruplos = len(listaCuadruplos)
	salto = pilaSaltos.pop()
	listaCuadruplos[salto].temporal = lenCuadruplos
	pilaSaltos.append(lenCuadruplos - 1)
	pass
Пример #6
0
def p_generarEra(p):
	''' generarERA : fondoFalso '''
	global listaCuadruplos
	global listaFunciones
	global contParam
	global llamada
	contParam = 0
	pos = busquedaLista()
	arrParametros = listaFunciones[pos].arrParam
	longitud = len (arrParametros)
	r = diccionarioVarGlobal[llamada]
	cuadr = Cuadruplo(30, -1, -1,r )
	listaCuadruplos.append(cuadr)
	print "Se guardo ERA ", llamada
	pass
Пример #7
0
def p_checarDibujar(p):
	''' checarDibujar : '''
	global pilaOperadores
	global pilaOperandos
	global listaCuadruplos
	signo = pilaOperadores.pop()
	if signo == 19:
		col = pilaOperandos.pop()
		posy = pilaOperandosDirMem.pop()
		posx = pilaOperandosDirMem.pop()
		ids = pilaOperandosDirMem.pop()
		cuadr = Cuadruplo(signo,ids,(posx,posy),col)
		listaCuadruplos.append(cuadr)
		pilaOperandos.pop()
		pilaOperandos.pop()
	
		print "SE GUARDO EL CUADRUPLO DE DIBUJAR"
Пример #8
0
def p_checarContenido(p):
	''' checarContenido : '''
	global pilaSaltos
	global listaCuadruplos
	global pilaOperandos
	aux = pilaOperandos.pop()
	if aux != 8:
		print "Error en while"
		sys.exit()
	else:
		resultado = aux
		temp = pilaOperandosDirMem.pop()
		#GOTO FALSO RESULTADO _____
		cuadr = Cuadruplo(16,temp, -1,0)
		listaCuadruplos.append(cuadr)
		pilaSaltos.append(len(listaCuadruplos) - 1)
		print "Se guardo GOTO FALSO WHILE: ", cuadr.operador, cuadr.temporal
	pass
Пример #9
0
def p_generarCuadRetorno(p):
	''' generarCuadRetorno : '''
	global listaCuadruplos
	global diccionarioVarGlobal
	global pilaOperadores
	global pilaOperandosDirMem
	global funcionActual
	global listaFunciones
	global pilaOperandos
	posicion = busquedaLista()
	posicion2 = busquedaVar(p[-1])
	if posicion2 != -1:
		memoria = listaFunciones[posicion].arrVar[posicion2]
		pilaOperandos.append(memoria.tipo)
		pilaOperandosDirMem.append(memoria.direcmem)
	if funcionActual != 'inicio':
		aux = pilaOperandosDirMem.pop()
		cuadr = Cuadruplo(29, -1, aux, diccionarioVarGlobal[funcionActual])
		listaCuadruplos.append(cuadr)
		pilaOperandos.pop()
Пример #10
0
def p_checarOperadorIgual(p):
	'''checarOperadorIgual :  '''
	global pilaOperadores
	global listaCuadruplos
	global pilaOperandos

	signo = pilaOperadores.pop()
	if(signo == 5):
		operando2 = pilaOperandos.pop()
		operando1 = pilaOperandos.pop()
		resultado = cuboSemantico[operando1][operando2][signo]
		if(resultado == -1):
			print "Error con signo = "
			sys.exit()
		else: 
			print("SE CHECO EL CUADRUPLO ASIGNACION Y ES CORRECTO ", operando1, operando2, signo)
			operando2C = pilaOperandosDirMem.pop()
			operando1C = pilaOperandosDirMem.pop()
			cuadr = Cuadruplo(signo, operando2C, -1, operando1C)
			listaCuadruplos.append(cuadr)
	pass
Пример #11
0
def p_checaoperador6(p):
	'''checaoperador6 : '''
	global pilaOperadores
	global pilaOperandos
	global diccionarioMemoria
	global pilaOperandosDirMem
	opr = len(pilaOperadores)
	print "Entra checaroperador 6"
	print ("PilaOperadores: ", pilaOperadores)
	if(opr != 0):
		if((pilaOperadores[opr-1] == 6) | (pilaOperadores[opr-1] == 7) | (pilaOperadores[opr-1] == 8) | (pilaOperadores[opr-1] == 9) | (pilaOperadores[opr-1] == 10) | (pilaOperadores[opr-1] == 11) | (pilaOperadores[opr-1] == 12) | (pilaOperadores[opr-1] == 13) ):
			operando2 = pilaOperandos.pop()
			operando1 = pilaOperandos.pop()
			operadorActual = pilaOperadores.pop()
			resultado = cuboSemantico[operando1][operando2][operadorActual]
			posicion = busquedaLista()
			var = diccionarioMemoria['3']
			print("Resultado: ", resultado)
			#meter a pila el temporal 
			if resultado == -1:
				print "ERROR: Operacion invalida, tipos no compatibles"
				sys.exit()
			else:
				print("SE CHECO EL CUADRUPLO Y ES CORRECTO", operando2, operando1, operadorActual)
				valormem = var[str(resultado)]
				agregarVar = TVar('temp', resultado, valormem,0,0)
				diccionarioMemoria['3'][str(resultado)] = valormem + 1
				listaFunciones[posicion].arrVar.append(agregarVar)
				pilaOperandosDirMem.append(valormem)
				resultadoT = pilaOperandosDirMem.pop()
				operando2C = pilaOperandosDirMem.pop()
				operando1C = pilaOperandosDirMem.pop()
				cuadr = Cuadruplo(operadorActual, operando1C,operando2C,resultadoT)
				listaCuadruplos.append(cuadr)
				pilaOperandos.append(resultado)
				pilaOperandosDirMem.append(resultadoT)
				print "asdasd ", pilaOperandos, " ", resultadoT

	pass
Пример #12
0
def p_verificarTiposFunc(p):
	''' verificarTiposFunc : '''
	global pilaOperandos
	global pilaOperandosDirMem
	global listaFunciones
	global contParam
	global listaCuadruplos
	global arrParametros
	global llamada
	pos = busquedaFunc(llamada)
	arrParametros = listaFunciones[pos].arrParam
	auxParam = arrParametros[contParam].tipo
	auxPila = pilaOperandos.pop()
	mem = pilaOperandosDirMem.pop()
	if(auxParam != auxPila):
		print "TIPO DE PARAMETRO INCORRECTO"
		sys.exit()
	else: 
		aux = arrParametros[contParam].direcmem
		cuadr = Cuadruplo(31, -1, mem,aux)
		listaCuadruplos.append(cuadr)
	pass
Пример #13
0
def p_checarIF(p):
	'''checarIF : '''
	print "Entre a checar IF"
	global pilaOperandos
	global pilaSaltos
	global pilaOperadores
	global pilaOperandosDirMem
	aux = pilaOperandos.pop()
	if aux != 8: 
		print "Error semantico en condicion IF"
		sys.exit()
	else:
		lenCuadruplos = len(listaCuadruplos)
		pilaSaltos.append(lenCuadruplos)
		print pilaOperandos
		temporal = pilaOperandosDirMem.pop()
		cuadr = Cuadruplo(16,temporal,-1,0)
		print "Guarde cuadruplo IF"
		listaCuadruplos.append(cuadr)
		print pilaOperandos
		print pilaOperadores

	pass
Пример #14
0
def p_generaCuadruploMatriz(p):
	''' generaCuadruploMatriz : "]" '''
	global listaCuadruplos
	global listaFunciones
	global pilaOperadores
	global pilaOperandosDirMem
	global colArreglo
	global idActual
	pilaOperadores.pop()
	print "Entre generaCuadruploMatriz", pilaOperandosDirMem
	pos = busquedaLista()
	func = listaFunciones[pos].arrVar
	longi = len(func)
	if colArreglo != 0:
		#genera cuadruplos para matrices
		pilaOperadores.pop()
		operando1 = pilaOperandos.pop()
		operandoMem1 = pilaOperandosDirMem.pop()
		operando2 = pilaOperandos.pop()
		operandoMem2 = pilaOperandosDirMem.pop()
		#cuadruplo verificar
		cuadr = Cuadruplo(33,operandoMem2, 0, renArreglo)
		print "renArreglo ", renArreglo
		listaCuadruplos.append(cuadr)
		#direccion base para cuadruplos
		if busquedaVar(idActual) != -1:
			aux = busquedaVar(idActual)
		elif busquedaVarGlobal(idActual) != -1:
			aux = busquedaVarGlobal(idActual)
		elif busquedaVarParam(idActual) != -1:
			aux = busquedaVarGlobal(idActual)
		else:
			print "No se encontro la variable dimensionada"
			sys.exit()
		dirBase = func[aux].direcmem

		var = diccionarioMemoria['3']
		mem = var[str(operando1)]
		cuadr = Cuadruplo(3, operandoMem2, operandoMem1, mem)
		listaCuadruplos.append(cuadr)
		cuadr2 = Cuadruplo(33,operandoMem1, 0, colArreglo)
		listaCuadruplos.append(cuadr2)
		cuadr1 = Cuadruplo(1, mem, operandoMem1, mem+1)
		diccionarioMemoria['3'][listaFunciones[pos].tipo] = mem + 2
		listaCuadruplos.append(cuadr1)
		print "colArreglo = ", colArreglo
		var1 = diccionarioMemoria['3']
		mem1 = var['9']
		cuadr = Cuadruplo(1, mem+1,dirBase, mem1)
		listaCuadruplos.append(cuadr)
		pilaOperandosDirMem.append(mem1)
		pilaOperandos.append(operando1)
		diccionarioMemoria['3']['9'] = mem1 + 1
	else:
		#genera cuadruplos para los arreglos
		operando1 = pilaOperandos.pop()
		operandoMem1 = pilaOperandosDirMem.pop()
		
		print "renArreglo = ", renArreglo, pilaOperandosDirMem

		cuadr = Cuadruplo(33,operandoMem1, 0, renArreglo)
		listaCuadruplos.append(cuadr)

		if busquedaVar(idActual) != -1:
			aux = busquedaVar(idActual)
		elif busquedaVarGlobal(idActual) != -1:
			aux = busquedaVarGlobal(idActual)
		elif busquedaVarParam(idActual) != -1:
			aux = busquedaVarGlobal(idActual)
		else:
			print "No se encontro la variable dimensionada"
			sys.exit()
		dirBase = func[aux].direcmem
		
		var = diccionarioMemoria['3']
		mem = var['9']
		cuadr = Cuadruplo(1, operandoMem1,dirBase, mem)
		listaCuadruplos.append(cuadr)
		pilaOperandosDirMem.append(mem)
		pilaOperandos.append(operando1)
		diccionarioMemoria['3']['9'] = mem + 1
	pass
Пример #15
0
diccConstantes = {}
diccionarioVarGlobal = {}
pilaOperandosDirMem = []
pilaSaltos = []
pilaSaltosFunc = []
operadorActual = 0
contParam = 0
llamada = ""
resultado = -1
colArreglo = 0
renArreglo = 0
renglon = 0
columna = 0
DEBUG = True
idActual = ""
cuadr = Cuadruplo(17, -1, -1, -1)
listaCuadruplos.append(cuadr)
# BNF
#Sintaxis que inicia el programa
def p_programa(p):
	'''programa : vars funcion INICIO funcAgregarInicio bloque  FIN liberarVar
	  			| vars funcion INICIO FIN '''	
	print("SE TERMINO EL PROGRAMA CON EXITO!")
	escribeArchivo()
	pass

#Regla para guardar en diccionario de funciones la funcion de inicio
def p_funcAgregarInicio(p):
	'''funcAgregarInicio : '''
	global funcionActual
	global listaFunciones
Пример #16
0
from TablaDirecciones import TablaDirecciones
from TablaConstantes import TablaConstantes
import sys

tipoFuncionLeido = ""
tipoVarLeido = ""
nombreFuncion = ""
nombreVar = ""
listaVariables = []
directorioFunc = DirFunciones()
cuboSem = CuboSemantico()
pilaPoper = []
pilaOp = []
pilaTipos = []
pilaSaltos = []
cuadruplos = Cuadruplo()
dicDirecciones = {
    "globalInt" : TablaDirecciones(1000, 3999),
    "globalFloat" : TablaDirecciones(4000, 6999),
    "globalChar" : TablaDirecciones(7000, 9999),
    "localInt": TablaDirecciones(10000, 12999),
    "localFloat": TablaDirecciones(13000, 15999),
    "localChar": TablaDirecciones(16000, 18999),
    "tempInt": TablaDirecciones(19000, 21999),
    "tempFloat": TablaDirecciones(22000, 24999),
    "tempChar": TablaDirecciones(25000, 27999),
    "tempBool": TablaDirecciones(28000, 30999),
    "constInt": TablaDirecciones(31000, 33999),
    "constFloat": TablaDirecciones(34000, 36999),
    "constChar": TablaDirecciones(37000, 39999),
    "constString": TablaDirecciones(40000, 42999)
Пример #17
0
	listaFunc.append(objeto)
	linea = archivo.readline()
	
linea = archivo.readline()
#crea el diccionario de constantes con la direccion de memoria y el valo correspondiente.
while linea != '$$\n':
	lineaAux = linea.split(' ')
	diccionarioConstantes[lineaAux[0]] = lineaAux[1]
	linea = archivo.readline()

linea = archivo.readline()
#crea la lista de cuadruplos con los cruaduplos encontrados en el archivo de texto.
while linea != '$$\n':
	lineaAux = linea.split(' ')
	if(len(lineaAux)) == 4: 
		cuadr = Cuadruplo(lineaAux[0], lineaAux[1], lineaAux[2],lineaAux[3])
	elif (len(lineaAux)) == 5:
		cuadr = Cuadruplo(lineaAux[0], lineaAux[1], lineaAux[2]+lineaAux[3], lineaAux[4])

	listaCuadruplos.append(cuadr)
	linea = archivo.readline()
archivo.close()

#Crea la memoria del main y la mete a la lista de memorias
memoriaMain = Memoria(0,{},{},{},{},{},{},{},{},{},{},{},{}, {},{},{},{},{})
listaMemoria.append(memoriaMain)

#Comienza a leer los cuadruplos
while contCuadruplos < len(listaCuadruplos):
	options[listaCuadruplos[contCuadruplos].operador](listaCuadruplos[contCuadruplos].operando1, listaCuadruplos[contCuadruplos].operando2, listaCuadruplos[contCuadruplos].temporal)
exitonclick()