Debe introducir al menos 3 caracteres en el buscador.
Inicio / Wikis / Tutoriales / Flex, versión 2.5 - Cómo se empareja la entrada

Flex, versión 2.5 - Cómo se empareja la entrada

 ****- (2 opiniones)
GNU Free Documentation License Tutorial de Vern Paxson - 14 de Febrero de 2006
6. Cómo se empareja la entrada
Cuando el escáner generado está funcionando, este analiza su entrada buscando cadenas que concuerden con cualquiera de sus patrones. Si encuentra más de un emparejamiento, toma el que empareje más texto (para reglas de contexto posterior, se incluye la longitud de la parte posterior, incluso si se devuelve a la entrada). Si encuentra dos o más emparejamientos de la misma longitud, se escoge la regla listada en primer lugar en el fichero de entrada de flex.

Una vez que se determina el emparejamiento, el texto correspondiente al emparejamiento (denominado el token) está disponible en el puntero a caracter global yytext, y su longitud en la variable global entera yyleng. Entonces la acción correspondiente al patrón emparejado se ejecuta (See section Acciones, para una descripción más detallada de las acciones), y entonces la entrada restante se analiza para otro emparejamiento.

Si no se encuentra un emparejamiento, entonces se ejecuta la regla por defecto: el siguiente caracter en la entrada se considera reconocido y se copia a la salida estándar. Así, la entrada válida más simple de flex es:

%%

que genera un escáner que simplemente copia su entrada (un caracter a la vez) a la salida.

Fíjese que yytext se puede definir de dos maneras diferentes: bien como un puntero a caracter o como un array de caracteres. Usted puede controlar la definición que usa flex incluyendo una de las directivas especiales `%pointer' o `%array' en la primera sección (definiciones) de su entrada de flex. Por defecto es `%pointer', a menos que use la opción de compatibilidad `-l', en cuyo caso yytext será un array.

La ventaja de usar `%pointer' es un análisis substancialmente más rápido y la ausencia de desbordamiento del buffer cuando se emparejen tokens muy grandes (a menos que se agote la memoria dinámica). La desventaja es que se encuentra restringido en cómo sus acciones pueden modificar yytext (see section Acciones), y las llamadas a la función `unput()' destruyen el contenido actual de yytext, que puede convertirse en un considerable quebradero de cabeza de portabilidad al cambiar entre diferentes versiones de lex.

La ventaja de `%array' es que entoces puede modificar yytext todo lo que usted quiera, las llamadas a `unput()' no destruyen yytext (ver más abajo). Además, los programas de lex existentes a veces acceden a yytext externamente utilizando declaraciones de la forma:

extern char yytext[];

Esta definición es errónea cuando se utiliza `%pointer', pero correcta para `%array'.

`%array' define a yytext como un array de YYLMAX caracteres, que por defecto es un valor bastante grande. Usted puede cambiar el tamaño símplemente definiendo con #define a YYLMAX con un valor diferente en la primera sección de su entrada de flex. Como se mencionó antes, con `%pointer' yytext crece dinámicamente para acomodar tokens grandes. Aunque esto signifique que con `%pointer' su escáner puede acomodar tokens muy grandes (tales como emparejar bloques enteros de comentarios), tenga presente que cada vez que el escáner deba cambiar el tamaño de yytext también debe reiniciar el análisis del token entero desde el principio, así que emparejar tales tokens puede resultar lento. Ahora yytext no crece dinámicamente si una llamada a `unput()' hace que se deba devolver demasiado texto; en su lugar, se produce un error en tiempo de ejecución.

También tenga en cuenta que no puede usar `%array' en los analizadores generados como clases de C++ (see section Generando escáneres en C++).
Autor y licencia de 'Flex, versión 2.5 - Cómo se empareja la entrada'
Vern Paxson Extraído de: http://es.tldp.org/Manuales-LuCAS/FLEX/flex-es-2.5.html#SEC25 GNU Free Documentation License
Licencia GNU Free Documentation License: http://www.es.gnu.org/licencias/fdles.html
Este contenido ha sido recopilado por el equipo de Wikilearning. Todo el contenido recopilado se ha obtenido respetando y comunicando en nuestro site la licencia de cada fuente.
Wikilearning tiene permiso expreso por escrito de los autores para publicar los contenidos que ha extraído de otras webs, incluyendo su uso comercial.

Wikis relacionados con 'Flex, versión 2.5 - Cómo se empareja la entrada'

Un sistema invariante en el tiempo TI (Time-Invariant) tiene la propiedad de que cierta entrada... Más »
La convolución nos ayuda a determinar el efecto que tiene el sistema en la señal... Más »
Este documento pretende ser el punto de entrada de los hispanohablantes al mundo Linux, intentando... Más »
"Es nuestra experiencia lingüística, la inserción en ese diálogo interno con nosotros mismos, que es... Más »
Este es el COMO Programar el puerto serie en Linux. Todo sobre cómo programar comunicaciones... Más »
¿Estás seguro de que deseas eliminar este capítulo?