Ingenieria

Solo disponible en BuenasTareas
  • Páginas : 6 (1424 palabras )
  • Descarga(s) : 0
  • Publicado : 9 de febrero de 2012
Leer documento completo
Vista previa del texto
INTERACTIVIDAD ENTRE LEX/FLEX Y YACC/BISON






























Estructura de LEX/FLEX


















Especificación
LEX / FLEX
Especificación
YACC /
BISON
*.l
*.y
LEX /
FLEX
YACC /
BISON
yylex( )
yyparse ( )
Archivo
de entradalex.yy.c
y.tab.c
Leer caracteres
Solicitud del
siguiente token

de token
0
si es EOF
yylval
Valor de
token
Uso el valor del token en las
acciones de las reglas
%{
Declaraciones en C
%}
Declaraciones
LEX/FLEX

%%

Reglas:
Patrón acción

%%

Código de usuario
(opcional)


Código de inicialización para el lenguaje C como
#include<>, const, definición de variables globales,
funciones o comentarios. Todo lo anterior va entre
%{ %} Esta sección se copiará en el archivo C
generado.


Definiciones de especificaciones para LEX como
macros, xopciones xdel xusuario, xdefinición xde
patrones (se bautizan los patrones) y directivas.
Se divide en dos partes separados por un espacio, a la
iz
quierda se ubican los patrones (exp. regulares) y a la
derecha las acciones, código en lenguaje C, que debe
realizar cuando la entrada concuerde con dicho patrón.
Código de usuario es opcional. Puede estar en un archivo
separado con la condición de que en el archivo deba
incluirse lex.yy.c en la cabecera del mismo para poder
invocar a la función yylex().
#
include “lex.yy.c”Estructura de YACC/BISON






















Funciones y variables LEX/FLEX

yylex(): función que inicializa el análisis léxico.

yymore(): Modifica la variable yytext. Esta concatena la última cadena que ha
concordado con un patrón determinado con la cadena entrante que concuerda con patrón
determinado. Por ejemplo:

%%hacer-
yymore();
deshacer
echo;
%%

En el ejemplo, se ingresa la cadena “hacer-” esta se guardará en la variable yytext, y la
si la siguiente cadena es “deshacer” se concatenará a lo que tenia la variable yytext, es
decir que va a producir una salida “hacer-deshacer”

yywrap(): esta función maneja múltiples ficheros de entrada. Devuelve 0 si encuentra
otro fichero para seranalizado o 1 si encuentra un fin de ficheros. Si se necesita trabajar
con multiples archivos, se debe definir yywrap. Si no se necesita trabajar con multiples
archivos de entrada se debe agregar la directiva %option noyywrap en la sección de
definiciones del archivo lex o compilar el archivo lex.yy.c con la opción –ll (-lfl en
Flex).

yytext: es una variable que apunta a la cadena deentrada a analizar. Por cada nueva
cadena de entrada la variable yytext se reinicializará, es decir, borrará la cadena que
%{
Declaraciones C
%}
Declaraciones
ACC/BISON

%%
Reglas de la
Gramática

Producciones acciones
;


%%

Código de usuario (opcional)


Código de inicialización para el lenguaje C como
#
include<>, const, definición devariables globales,
funciones o comentarios. Todo lo anterior va entre
%{ %} Esta sección se copiará en el archivo C
generado.


En esta sección se puede declarar el tipo de la
variable xyylval, xlos xsímbolos x(terminales xy xno
terminales) xde xla xgramática, xel xaxioma xde xla
gramática, y la asociatividad y precedencia de los
operadores.

Contiene las reglas de lagramática escritas en un formato
concreto y con acciones asociadas a las reglas opcionalmente.
Formato de las reglas es
símboloNoTerminal:
simb1 simb2 .. simbM [acción]
;
Se puede agregarle semántica a cada regla de producción

En esta sección debe ir al menos la función main() la cual
va a contener la llamada al analizador sintáctico que a su
vez éste va a llamar al...
tracking img