Beruflich Dokumente
Kultur Dokumente
jojorque@udec.cl
PREPARADO POR:
Jorge Jorquera M. (jojorque@udec.cl)
DIICC
Universidad de Concepción
INTRO
Hola, muxax@s. Espero que este pequeño manual logre sacarlos del pánico en que
han entrado al oír las palabras “Flex” y “Bison”, ya que no es nada muy complicado o del
otro mundo.
Declaraciones y Definiciones
%%
Patrones y Acciones
%%
Código Auxiliar
Sección de Declaraciones
DIGITO [0-9]
LETRA [a-zA-Z]
Patrón 1 {Acción 1}
Patrón 2 {Acción 2}
...
Patrón n {Acción n}
Los patrones determinan los componentes léxicos a reconocer; pueden a su vez ser
definidos como expresiones regulares. Las acciones son el código a ejecutar cuando se
reconoce un determinado componente léxico. Si la acción a ejecutar ocupa más de una
línea, debe obligatoriamente ponerse entre llaves, si no, las llaves no son necesarias.
main(){
yylex();//funcion de análisis léxico
}
Operador Descripción
[] Rango de valores
* Cero o más repeticiones
+ Al menos una vez
? Opcionalidad
. Cualquier otra cosa diferente a las ER anteriores
| Alternativa
^ Negación
Variables Descripción
char * yytext Texto del patrón reconocido
int yyleng Longitud del patrón reconocido
FILE * yyin Archivo de entrada (por defecto stdin)
FILE * yyout Archivo de salida (por defecto stdout)
int yylex() Llamada al analizador léxico
int yyparse() Llamada al analizador sintáctico
Si una entrada calza con más de un patrón se sigue el siguiente criterio: se elige la
opción que calza con un mayor número de caracteres. Al igual número de caracteres se
elige la regla que se encuentra en primer lugar (de aquí que sea más convenienteponer la
definición de las palabras clave antes que los identificadores).
Por ejemplo para la entrada ende, la reconoceríamos como un identificador
La generación de una analiz ador Bison tiene lugar de la siguiente forma: la entrada
es un archivo con la extensión ‘.y’ que contiene la definición de los terminales, no-
terminales y la gramática. La salida es un programa en C que realiza el análisis sintáctico.
Al igual que Flex, consta de tres secciones:
Declaraciones y Definiciones
%%
Reglas de la gramática
%%
Código Auxiliar
Declaraciones y Definiciones
Definiciones de BISON:
Reglas de la gramática
Acciones: Las acciones contienen código C que se ejecutará cada vez que se
reconozca una instancia de la regla asociada. Las acciones se componen de sentencias
C incluidas entre llaves. Se suelen situar al final de la regla y se ejecutan cuando se
reconoce completamente la parte derecha de la regla. También se admiten acciones
en cualquier posición dentro de las reglas, que se ejecutarán en cuanto se reconozca
la fracción de regla asociada.
En la acción asociada al patrón del TOKEN se debe cargar en la variable yylval los
atributos léxicos que se vayan a utilizar en el análisis sintáctico (opcional) y devolver el
tipo del TOKEN encontrado mediante una orden return (obligatorio).
%%
[0-9]+ { yylval.entero = atoi(yytext[0]);
return CONSTANTE_ENTERA; }
"+" { return yytext[0]; }
. . . .
%%
Para compilar
bison –d sintactico.y
flex lexico.l
gcc lex.yy.c sintactico.tab.c –o mianalizador –lfl
PALABRAS AL CIERRE
Espero que este tutorial les sea de provecho, cualquier sugerencia para mejorarlo es
bienvenida.
Saludos a todos!!!
Koke.