11.07.2015 Views

Teor´ıa de Autómatas y Lenguajes Formales

Teor´ıa de Autómatas y Lenguajes Formales

Teor´ıa de Autómatas y Lenguajes Formales

SHOW MORE
SHOW LESS
  • 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.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!