Herramientas bison y flex

Solo disponible en BuenasTareas
  • Páginas : 10 (2400 palabras )
  • Descarga(s) : 0
  • Publicado : 20 de septiembre de 2010
Leer documento completo
Vista previa del texto
“HERRAMIENTAS FLEX Y BISON”

INTRODUCCION:

Con esta práctica se pretende introducir el uso de la herramienta bison. Esta
herramienta se usa en consonancia con la herramienta flex y sirve para especificar analizadores sintácticos. De la misma forma que flex tiene como base las expresiones regulares, la herramienta bison también se basa en otro formalismo para describir lenguajes, en estecaso serán las gramáticas independientes del contexto las que constituirán el núcleo de las especificaciones que procesará bison.

El formato del fichero de entrada
La herramienta bison es una versión mejorada de una herramienta anterior denominada yacc. Bison ha sido desarrollada con la intención de ser compatible con las especificaciones que procesaba yacc, de manera que el lenguaje que aceptabison es básicamente el lenguaje yacc más algunas modificaciones o mejoras. La herramienta bison va a tomar como entrada un fichero de texto que, básicamente, tiene el siguiente formato:

%header{
<código C de cabecera>
%}
%{
<código C de declaración>
%}
<zona de definiciones>
%%
<producciones y acciones>
%%
<código C de implemetación>

* HerramientaFlex:

Que es y para qué sirve la herramienta flex?

Flex es un una herramienta que permite generar analizadores léxicos. A partir de un conjunto de expresiones regulares, Flex busca concordancias en un fichero de entrada y ejecuta acciones asociadas a estas expresiones.

Los ficheros de entrada de Flex (normalmente con la extensión .l) siguen el siguiente esquema:
%%
patrón1 {acción1}patrón2 {acción2}
...
donde:
patrón: expresión regular
acción: código C con las acciones a ejecutar cuando se encuentre concordancia del patrón con el texto de entrada-

Ejemplo:

Flex recorre la entrada hasta que encuentra una concordancia y ejecuta el código asociado. El texto que no concuerda con ningún patrón lo copia tal cual a la salida. Por ejemplo:
%%
a*b {printf(“X”);};re ;
El ejecutable correspondiente transforma el texto:
abre la puertaab
en
X la puertX
pues ha escrito X cada vez que ha encontrado ab o aab y nada cuando ha encontrado re.

Flex lee los ficheros de entrada dados, o la entrada estándar si no se le ha indicado ningún nombre de fichero, con la descripción de un escáner a generar. La descripción se encuentra en forma de parejas deexpresiones regulares y código C, denominadas reglas. Flex genera como salida un fichero fuente en C, ‘lex.yy.c’, que define una función ‘yylex()’. Este fichero se compila y se enlaza con la librería de Flex para producir un ejecutable.
La sección de definiciones contiene declaraciones de definiciones de nombres sencillas para simplificar la especificación del escáner, y declaraciones de condicionesde arranque, que se explicarán en una sección posterior. Las definiciones de nombre tienen la forma:
nombre definición
El "nombre" es una palabra que comienza con una letra o un subrayado (‘_’) seguido por cero o más letras, dígitos, ‘_’, o ‘-’ (guión). La definición se considera que comienza en el primer carácter que no sea un espacio en blanco siguiendo al nombre y continuando hasta el finalde la línea. Posteriormente se puede hacer referencia a la definición utilizando "{nombre}", que se expandirá a "(definición)".
Por ejemplo,
DIGITO [0-9]
ID [a-z][a-z0-9]*

define "DIGITO" como una expresión regular que empareja un dígito sencillo, e "ID" como una expresión regular que empareja una letra seguida por cero o más letras o dígitos. Una referencia posterior a{DIGITO}+"."{DIGITO}*
es idéntica a
([0-9])+"."([0-9])*
y empareja uno o más dígitos seguido por un ‘.’ seguido por cero o más dígitos.
La sección de reglas en la entrada de Flex contiene una serie de reglas de la forma:
patrón acción
donde el patrón debe estar sin sangrar y la acción debe comenzar en la misma línea.
Finalmente, la sección de código de usuario simplemente se copia a ‘lex.yy.c’...
tracking img