Exemple #1
0
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):
        
    
    
    
    
    
    
    
    
    
Exemple #2
0
 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()
Exemple #3
0
 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
Exemple #4
0
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