class CHProcesador(object): def __init__(self): self.programConunter = None #PILAS!!! EL MODO EN EL QUE OPERA EL SO self.modoOperacion = "Kernel" self._listaCHProgramas = [] #Lista en donde se almacenan todos los CHProgramas self._memoria = CHMemoria() self._memoria.crearAcumulador() def validarPrograma(self, programa): interprete = Interprete(programa) try: interprete.verificar() programaTemp = CHPrograma(interprete.obtenerCHPrograma()) self._listaCHProgramas.append(programaTemp) self._memoria.insertarCHPrograma(programaTemp) return "Validaci�n exitosa!!!, el CHPrograma ya est� cargado\nen memoria y est� listo para ser ejecutado." except CHMaquinaException as exc: raise exc def ejecutarPrograma(self):
def __init__(self): self.programConunter = None #PILAS!!! EL MODO EN EL QUE OPERA EL SO self.modoOperacion = "Kernel" self._listaCHProgramas = [] #Lista en donde se almacenan todos los CHProgramas self._memoria = CHMemoria() self._memoria.crearAcumulador()
def __init__(self, lineasCodigo, pid): """ Crea un nuevo CHPrograma en el CHMáquina dadas las instrucciones que lo componen y el pid del programa (program id) Argumentos: lineasCodigo -- lista de objetos de tipo PosicionMemoria pid -- Identificador único para éste programa """ self._pid = pid self._memoria = CHMemoria() self._etiquetas = {} self._variables = [] self._instrucciones = [] for i in lineasCodigo: self._instrucciones.append(i) if i.getOperacion() == 'etiqueta': #Al crear las etiquetas, obtenemos el argumento 0 que representa #el nombre de la etiqueta, luego obtenemos el 1 el cual indica #La línea de código a la cual nos debemos dirigir. self._etiquetas[i.getArgument(0)] = int(i.getArgument(1))-1
class CHPrograma(object): def __init__(self, lineasCodigo, pid): """ Crea un nuevo CHPrograma en el CHMáquina dadas las instrucciones que lo componen y el pid del programa (program id) Argumentos: lineasCodigo -- lista de objetos de tipo PosicionMemoria pid -- Identificador único para éste programa """ self._pid = pid self._memoria = CHMemoria() self._etiquetas = {} self._variables = [] self._instrucciones = [] for i in lineasCodigo: self._instrucciones.append(i) if i.getOperacion() == 'etiqueta': #Al crear las etiquetas, obtenemos el argumento 0 que representa #el nombre de la etiqueta, luego obtenemos el 1 el cual indica #La línea de código a la cual nos debemos dirigir. self._etiquetas[i.getArgument(0)] = int(i.getArgument(1))-1 def __len__(self): """ Sobreescribe el método de la clase object para obtener el tamaño de un CHPrograma. El Tamaño del chprograma se refiere simplemente el número de variables e instrucciones que posee, esto se puede traducir en las posiciones que ocupa en memoria. """ return len(self._etiquetas) + len(self._variables) def crearVariable(self, nombre, valor, tipo): """ Crea una variable que pertenece a éste CHPrograma para operaciones que se realicen en el futuro. Todas las variables que usa un CHPrograma son creadas y almacenadas en tiempo de ejecución, por lo tanto la longitud del CHPrograma puede cambiar en el tiempo. Parámetros: nombre -- Nombre de la variable a ser creada valor -- El valor inicial de la variable tipo -- el tipo, hay 3 tipos posibles: INTEGER. REAL y STRING """ self._variables.append(Variable(nombre, tipo, valor)) return self._memoria.insertarContenido(self, Variable(nombre, tipo, valor)) def recorrerInstruccionesCHPrograma(self): """ Crea un generator para recorrer las instrucciones del CHPrograma, éste método es útil pues permite ubicar las instrucciones del CHPrograma en memoria. """ for i in self._instrucciones: yield i def recorrerVariablesCHPrograma(self): """ Crea un generador para recorrer las variables de un CHPrograma. éste método puede ser usado de dos formas: -. Como parámetro del constructor de una lista i.e list(programa.recorrerVariablesCHPrograma()) -. En un ciclo for i.e for i in programa.recorrerVaraiblesCHPrograma(): pass """ for i in self._variables: yield i def recorrerEtiquetasCHPrograma(self): """ Crea un generador para recorrer las etiquetas de un CHPrograma. éste método puede ser usado de dos formas: -. Como parámetro del constructor de una lista i.e list(programa.recorrerEtiquetasCHPrograma()) -. En un ciclo for i.e for i in programa.recorrerEtiquetasCHPrograma(): pass """ for i in self._etiquetas: yield i def __str__(self): """ Sobreescribe el método __str__ de la clase object para permitir representar un CHPrograma de una manera amigable para el usuario """ rep = 'INTRUCCIONES\n' for i in self._instrucciones: rep += '\t' + str(i) + '\n' rep += 'VARIABLES\n' for i in self._variables: rep += '\t' + str(i) + '\n' return rep