Analizador Lexico
-
Upload
ronaldroldansalinas -
Category
Documents
-
view
34 -
download
0
description
Transcript of Analizador Lexico
Presentacin de PowerPoint
2
Rivera, Corpus, Roldan, Lozada - FLEX
INDICEQu es un Flex? .3Ejemplo breve 1 . 4Ejemplo breve 2 . 5Formato del Fichero .. 6Patrones 7Cmo se empareja la entrada ?AccionesEscner generadoCondiciones de arranqueMltiples buffers de EntradaReglas de Fin-de-FicheroMacros miscelneasValores disponibles l usuarioInterfaz con YACCInvocando a FlexSinopsisOpcionesConsideraciones de rendimientoGenerando escneres en C++Incompatibilidades con lex y POSIX
3
Rivera, Corpus, Roldan, Lozada - FLEXQU ES UN FLEX? Es una herramienta para generarescneres.
Programas que reconocen patrones lxicos en un texto
Flexlee los ficheros de entrada dados, o la entrada estndar
4
Rivera, Corpus, Roldan, Lozada - FLEXEJEMPLOS BREVES%% username printf ("%s", getlogin() );
Username = El PatrnPrintf = Es la Accin % % = Marca el comienzo de las reglas
5
Rivera, Corpus, Roldn, Lozada - FLEXEJEMPLOS BREVES2. int num_lineas = 0, num_caracteres = 0; %% \n ++num_lineas; ++num_caracteres; . ++num_caracteres;
%%main() { yylex(); printf( "# de lneas = %d, # de caracteres. = %d\n",
6
Rivera, Corpus, Roldan, Lozada - FLEXFORMATO DEL FICHERO
El fichero de entrada deFLEXest compuesto de tres secciones, separadas por una lnea donde aparece nicamente un`%%'en esta:definiciones %% reglas %% cdigo de usuario
7
Rivera, Corpus, Roldan, Lozada - FLEXPATRONESLos patrones en la entrada se escriben utilizando un conjunto extendido de expresiones regulares. Estas son:`x'`.'`[xyz]'`[abj-oZ]'`[^A-Z]'`[^A-Z\n]'`r*'
8
Rivera, Corpus, Roldan, Lozada - FLEXPATRONES`r+'`r?'`r{2,5}'`r{2, }'`r{4}'`{nombre}'`\0'`\123
Entre otros.
9
Rivera, Corpus, Roldan, Lozada - FLEXCOMO SE EMPAREJA LA ENTRADA
Cuando el scner generado est funcionando, este analiza su entrada buscando cadenas que concuerden con cualquiera de sus patrones.Si encuentra ms de 1 emparejamiento:Toma el que empareje ms texto.Si encuentra 2 o ms emparejamiento:Se escoge la regla listada en primer lugar en el fichero de entrada de flex.10
Rivera, Corpus, Roldan, Lozada - FLEXCOMO SE EMPAREJA LA ENTRADA
El texto correspondiente al emparejamiento (token) est disponible en el puntero a carcter global yytext, y su longitud en la variable global entera yyleng. Entonces la accin correspondiente al patrn emparejado se ejecuta, y la entrada restante se analiza para otro emparejamiento. Si no se encuentra un emparejamiento, entonces se ejecuta la regla por defecto: el siguiente carcter en la entrada se considera reconocido y se copia a la salida estndar.
11
Rivera, Corpus, Roldan, Lozada - FLEXACCIONES
Cada patrn en una regla tiene una accin asociada, que puede ser cualquier sentencia en C.
El patrn finaliza en el primer carcter de espacio en blanco que no sea una secuencia de escape, lo que queda de la lnea es su accin,
Si la accin est vaca, entonces cuando el patrn se empareje el token de entrada simplemente se descarta.
12
Rivera, Corpus, Roldan, Lozada - FLEXESCANER GENERADO
La salida de flex es el fichero lex.yy.c que contiene la rutina de anlisis yylex(), un nmero de tablas usadas por esta para emparejar tokens y un nmero de rutinas auxiliares y macros.Por defecto, yylex() se declara as:
Int yylex ( ) { aqu van varias definiciones y las acciones }
13
Rivera, Corpus, Roldan, Lozada - FLEXCONDICIONES DE ARRANQUE
Flex dispone de un mecanismo para activar reglas condicionalmente. Cualquier regla cuyo patrn se prefije con nicamente estar activa cuando el analizador se encuentre en la condicin de arranque llamada sc. Por ejemplo:[^"]* { /* se come el cuerpo de la cadena ... */ ... }estar activa solamente cuando el analizador est en la condicin de arranque "STRING", y\. { /* trata una secuencia de escape ... */ ... }1414Rivera, Corpus, Roldan, Lozada - FLEX
1515Rivera, Corpus, Roldan, Lozada - FLEX
1616Rivera, Corpus, Roldan, Lozada - FLEX
1717Rivera, Corpus, Roldan, Lozada - FLEX
1818Rivera, Corpus, Roldan, Lozada - FLEX
1919Rivera, Corpus, Roldan, Lozada - FLEX
2020Rivera, Corpus, Roldan, Lozada - FLEX