Metacompiladores
* Manejo de localidades temporales de memoria
* Metacompiladores lex y flex
2012
DENISSE FERNANDA HIDALGO VALDEZ
-08340524
05/03/2012
H. NOGALES, SONORA
PROGRAMACION DE SISTEMAS
* Manejo de localidades temporales de memoria
* Metacompiladores lex y flex
2012
DENISSE FERNANDA HIDALGO VALDEZ
-08340524
05/03/2012
H. NOGALES, SONORAManejo de localidades temporales de memoria (buffers)
La forma más fácil de leer un programa es carácter por carácter pero es ineficiente.
La forma más eficiente es realizar una copia a la memoria de todo el código fuente. Pero esto en la gran mayoría de las ocasiones es impráctico por las dimensiones de los programas. Para solucionar este problema se sugiere utilizar buffers
Manejo de buffersExisten muchas formas de dividir el trabajo, pero siempre se deberá llevar dos punteros, uno al carácter actual y otro al inicial del lexema.
El manejo de buffers es esencial para realizar el análisis de grandes programas de mejor manera
La diferente de velocidad entre los dos tipos de memoria es muy grande, por lo que resulta interesante definir algún tipo de estrategia que reduzca estediferencial.
Un buffer se define como un conjunto de bytes que son leídos o escritos desde un dispositivo de almacenamiento, en la memoria primaria.
Cuando se desea leer una información, se lee un bloque de información en el que aparece.
La modificación de un dato se realiza sobre el buffer, que posteriormente debe ser enviado al dispositivo de almacenamiento.
La utilización de esta técnicapermite reducir el número de accesos a memoria secundaria.
Número de Buffers y Velocidad de Acceso
El manejo de buffers por parte del administrador de ficheros permite reducir el número de accesos a memoria secundaria. - Pero una cuestión fundamental es el número de buffers a utilizar. - Si sólo se utiliza un buffer, un problema que realice lecturas y escrituras de modo alterno, debería leer unbloque en cada operación. - Esto se resuelve mediante la utilización de un buffer para escritura y otro para lectura. - Pero la lectura, o escritura, alterna sobre varios ficheros puede provocar el mismo problema. - Otra alternativa es la utilización de ambos bloques para lecturas y escrituras de modo alternado.
La generalización de esta idea es el caso real, varios buffers que se manejan de modoindistinto para lecturas y escrituras.
La gestión de estos buffers es realizada por el administrador de ficheros, aunque el usuario puede controlar el número de buffers.
Si todos los buffers están ocupados, se debe vaciar uno de ellos para posibilitar una lectura.
Normalmente se utiliza al algoritmo LRU, es decir, se vacía el buffer menos recientemente utilizado.
METACOMPILADORES LEX YFLEX
Un metacompilador es un compilador de compiladores. Se trata de un software que acepta como entrada la descripción de un lenguaje y produce el compilador de dicho lenguaje. Hoy por hoy no existen metacompiladores completos, pero sí parciales en los que se acepta como entrada una gramática de un lenguaje y se genera un Maquina de Estado Finita o autómata que reconoce cualquier sentencia dellenguaje . A este autómata podemos añadirle código para completar el resto del compilador. Ejemplos de metacompiladores son: Lex, YACC, FLex, Bison, JavaCC, JLex, Cup, PCCTS, MEDISE, entre otros.
METACOMPILADOR FLEX
Que es y que hace
La característica más destacable de las herramientas que vamos a utilizar es su capacidad para generar programas de forma automática.
FLEX es un generador deprogramas para lo cual toma una especificación léxica basada en expresiones regulares y produce un programa (Analizador) que encuentra en un texto (por ejemplo: entrada.txt) aquellas secuencias de caracteres que concuerdan con alguna de las expresiones regulares y ejecuta la acción que le haya sido asociada en la especificación léxica.
El esquema de trabajo
Los fuentes y herramientas...
Regístrate para leer el documento completo.