Teor´ıa de Autómatas y Lenguajes Formales
Teor´ıa de Autómatas y Lenguajes Formales
Teor´ıa de Autómatas y Lenguajes Formales
- No tags were found...
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
66 CHAPTER 3.ACEPTACIÓN Y GENERACIÓN DE LENGUAJES REGULARESExpresionesRegulares❄Generador <strong>de</strong>Analizadores LexicosTexto✲❄TablaTokens✲Analizador LexicoFigure 3.23: Construcción <strong>de</strong> analizadores léxicosPor ejemplo, el editor <strong>de</strong> texto <strong>de</strong> UNIX permite un comando como:s/ ̸ b ̸ b ̸ b ∗ / ̸ b/que sustituye por un solo blanco el primer string con dos o más blancos que se encuentre en una línea.Si T ODO <strong>de</strong>nota la expresión a 1 + a 2 + . . . + a n en que los a i ’s son todos los carácteres <strong>de</strong>l computador,excepto el <strong>de</strong> cambio <strong>de</strong> línea (newline), es posible convertir una expresión regular r a un AFD que acepteT ODO ∗ r. La presencia <strong>de</strong> T ODO ∗ permite reconocer un miembro <strong>de</strong> L(r) que comience en cualquier parte<strong>de</strong> una línea. Sin embargo, la conversión <strong>de</strong> la expresión regular a un AFD toma, en la mayoría <strong>de</strong> los casos,mucho más tiempo que el que toma revisar una línea usando el AFD y, a<strong>de</strong>más, el AFD pue<strong>de</strong> tener unnúmero <strong>de</strong> estados que es exponencial en la longitud <strong>de</strong> la expresión regular.Lo que realmente suce<strong>de</strong> en el editor <strong>de</strong> texto <strong>de</strong> UNIX, es que la expresión regular T ODO ∗ r es convertidaen un AFND-ε, el que es simulado directamente. A medida que se revisa la línea, una lista <strong>de</strong> estados posibles(o actuales según se mire), es mantenida, la que inicialmente es la clausura − ε <strong>de</strong>l estado inicial. Si a esel próximo carácter en la línea, se crea una nueva lista <strong>de</strong> todos los estados con una transición en a <strong>de</strong>s<strong>de</strong>algunos <strong>de</strong> los estados <strong>de</strong> la lista antigua. La lista antigua se <strong>de</strong>scarta y se computa la clausura vacía <strong>de</strong> lanueva. Si no hay estados finales en la lista nueva, se repite el proceso con el próximo símbolo.