analizador lexico

20
1 UNIVERSIDAD SAN PEDRO Escuela de Ingeniería de Sistemas e Inform CONSTRUCCION MANUAL DE UN ANALIZADOR LEXICO Rivera, Corpus, Roldan, Lozada, Zarate Integrantes: - Ruby Lozada Pariahuache - Julio Corpus Mechato - Ronald Roldan Salinas - Jhair Rivera Martínez Docente: - Ing. Mitchell Paulo Blancas Nuñez CHIMBOTE – PERÚ 2014 - Elvis Zarate Vergaray

Upload: ronaldroldansalinas

Post on 14-Nov-2015

34 views

Category:

Documents


0 download

DESCRIPTION

Teoria de lenguaje y compiladores

TRANSCRIPT

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