Escuela Profesional en Informtica y Sistemas, Universidad Nacional Jorge Basadre Grohmann Tacna, Per @hotmail.com
Abstract This document is an article about the Memory that expresses behavior of memory input an operating system, show us the way how its can be manipulated. In order to become more familiar with the scientific article, and to have better sight about the competitive world in which we live and to be competent, this article is based on the IEEE format, which refers to the size and margins of page, size and style of font, among others, and made in Latex, the programming language made specifically for this class of documents
El analizador lxico, tambin conocido como scanner, lee los caracteres uno a uno desde la entrada y va formando grupos de caracteres con alguna relacin entre s (tokens), que constituirn la entrada para la siguiente etapa del compilador. Cada token representa una secuencia de caracteres que son tratados como una nica entidad. Por ejemplo, en Pascal un token es la palabra reservada BEGIN, en C: WHILE, etc. Las tiras especficas slo tienen tipo (lo que representan), mientras que las tiras no especficas tienen tipo y valor. Por ejemplo, si Contador es un identificador, el tipo de token ser identificador y su valor ser la cadena Contador. El Analizador Lxico es la etapa del compilador que va a permitir saber si es un lenguaje de formato libre o no. Frecuentemente va unido al analizador sintctico en la misma pasada, funcionando entonces como una subrutina de este ltimo. Ya que es el que va leyendo los caracteres del programa, ignorar aquellos elementos innecesarios para la siguiente fase, como los tabuladores, comentarios, espacios en blanco, etc. 3.1. EL PROCESO DEL ANLISIS LXICO
El proceso de anlisis lxico se refiere al trabajo que realiza el scanner con relacin al proceso de compilacin. El scanner representa una interfaz entre el programa fuente y el analizador sintctico o parser. El scanner, a travs del examen carcter por carcter del texto, separa el programa fuente en piezas llamadas tokens, los cuales representan los nombres de las variables, operadores, etiquetas, y todo lo que comprende el programa fuente. El parser, usualmente genera un rbol de sintaxis del programa fuente como ha sido definido por una gramtica. Las hojas del rbol son smbolos terminales de la gramtica. Son esos smbolos terminales o tokens los que el scanner extrae del cdigo fuente y se los pasa al parser. Es posible para el parser usar el conjunto de caracteres terminales del lenguaje como el conjunto de tokens, pero ya que los tokens pueden ser definidos en trminos de gramticas regulares ms simples que en las gramticas ms complejas utilizadas por los parsers, es deseable usar scanners. Usar solo parsers es costoso en trminos de tiempo de ejecucin y requerimientos de memoria, y la complejidad y el tiempo de ejecucin puede reducirse con el uso de un scanner. QUE ES UN ANALIZADOR LXICO? Se encarga de buscar los componentes lxicos (tokens En ingles) o palabras que componen el programa fuente, segn unas reglas o patrones. La entrada del analizador lxico podemos definirla como una secuencia de caracteres.
Grfico N 7: Analizador lxico El analizador lxico tiene que dividir la secuencia de caracteres en palabras con significado propio y despus convertirlo a una secuencia de terminales desde el punto de vista del analizador sintctico, que es la entrada del analizador sintctico. El analizador lxico reconoce las palabras en funcin de una gramtica regular de manera que sus NO TERMINALES se convierten en los elementos de entrada de fases posteriores. En LEX, por ejemplo, esta gramtica se expresa mediante expresiones regulares.
II. DESARROLLO 2.1 FUNCIONES DEL ANALIZADOR LXICO El analizador lxico es la primera fase de un compilador. Su principal funcin consiste en leer los caracteres de entrada y elaborar como salida una secuencia de componentes lxicos que utiliza el analizador sintctico para hacer el anlisis. Esta interaccin, suele aplicarse convirtiendo al analizador lxico en una subrutina o corrutina del analizador sintctico. Recibida la orden Dame el siguiente componente lxico del analizador sintctico, el analizador lxico lee los caracteres de entrada hasta que pueda identificar el siguiente componente lxico. Estos componentes lxicos representan: palabras reservadas: if, while, do, . . . identicadores: asociados a variables, nombres de funciones, tipos definidos por el usuario, etiquetas,... Por ejemplo: Forma: una letra seguida de letras o nmeros. Ej. a, b1, c3D Atributo nombre: string con la secuencia de caracteres que forma el identificador en maysculas. Ej. A, B1, C3D operadores: = * + - / == > < &! = . . . smbolos especiales: ; ( ) [ ] f g ... constantes numricas: literales que representan valores enteros, en coma flotante, etc, 982, 0xF678, -83.2E+2,... Forma: secuencia de dgitos que puede empezar con el signo menos y puede contener un punto. Ej. 10, -3, 15.4, - 54.276, .10 Atributo valor: Double con el valor numrico. Precisin: entero o real. constantes de caracteres: literales que representan cadenas concretas de caracteres, \hola mundo",...
Grfico N 8: Interaccin de un analizador lxico con el analizador sintctico Otras funciones que realiza: Eliminar los comentarios del programa. Eliminar espacios en blanco, tabuladores, retorno de carro, etc, y en general, todo aquello que carezca de significado segn la sintaxis del lenguaje. Reconocer los identificadores de usuario, nmeros, palabras reservadas del lenguaje,..., y tratarlos correctamente con respecto a la tabla de smbolos (solo en los casos que debe de tratar con la tabla de smbolos). Llevar la cuenta del nmero de lnea por la que va leyendo, por si se produce algn error, dar informacin sobre donde se ha producido. Avisar de errores lxicos. Por ejemplo, si @ no pertenece al lenguaje, avisar de un error. Puede hacer funciones de preprocesador.
2.2 NECESIDAD DEL ANALIZADOR LXICO
Un tema importante es el porqu se separan los dos anlisis lexicogrfico y sintctico, en vez de realizar slo el anlisis sintctico, del programa fuente, cosa perfectamente posible aunque no plausible. Algunas razones de esta separacin son: Un diseo sencillo es quizs la consideracin ms importante. Separar el anlisis lxico del anlisis sintctico a menudo permite simplificar una u otra de dichas fases. El analizador lxico nos permite simplificar el analizador sintctico.
Grfico N 9: Necesidad del analizador lxico Si el sintctico tuviera la gramtica de la Opcin 1 , el lexicogrfico sera: Opcin 1: ( 0 | 1 | 2 | ... | 9) + NUM (+ | - | * | /) OPARIT Si en cambio el sintctico toma la Opcin 2, el lexicogrfico sera: Opcin 2: ( 0 | 1 | 2 | ... | 9) + NUM + MAS - MENOS * MULT / DIV
Es ms, si ni siquiera hubiera anlisis lxico, el propio anlisis sintctico vera incrementado su nmero de reglas: NUM 0 | 1 | 2 | 3 .... | NUM NUM 2.3 VENTAJAS DE SEPARAR EL ANLISIS LXICO Y EL ANLISIS SINTCTICO:
Facilita transportabilidad del traductor (por ejemplo, si decidimos en un momento dado cambiar las palabras reservadas begin y end de inicio y en de bloque, por f y g, solo hay que cambiar este modulo. Se simplifica el diseo: el analizador es un objeto con el que se interacta mediante ciertos mtodos. Se localiza en un nico modulo la lectura fsica de los caracteres, por lo que facilita tratamientos especializados de E/S. Se mejora la eficiencia del compilador. Un analizador lxico independiente permite construir un procesador especializado y potencialmente ms eficiente para esa funcin. Gran parte del tiempo se consume en leer el programa fuente y dividirlo en componentes lxicos. Con tcnicas especializadas de manejo de buffers para la lectura de caracteres de entrada y procesamiento de componentes lxicos se puede mejorar significativamente el rendimiento de un compilador. Otra razn por la que se separan los dos anlisis es para que el analizador lxico se centre en el reconocimiento de componentes bsicos complejos.
2.4 COMPONENTES LXICOS, PATRONES, LEXEMAS 2.4.1 COMPONENTE LXICO O TOKEN El valor asociado a una categora o unidad de lxico. Se representa como un nmero entero o una constante de un byte. Ejemplo: el token de un identificador puede ser 1 id (si id fue definida como 1). Los tokens son las unidades lxicas bsicas de igual forma que las palabras y signos de puntuacin son las unidades bsicas de un enunciado. Los tokens varan del lenguaje al lenguaje e incluso de compilador a compilador para el mismo lenguaje, la eleccin de los tokens es tarea del diseador del compilador. En la mayora de lenguajes tendremos tokens para : palabras clave: IF THEN THEN THEN = ELSE; ELSE ELSE = THEN; operadores identificadores constantes (reales, enteras y de tipo carcter), strings de caracteres y signos de puntuacin 1. Tipos de tokens: tiras especficas, tales como palabras reservadas (if, while, begin, etc.), el punto y coma, la asignacin, los operadores aritmticos o lgicos, etc. tiras no especficas, como identificadores, constantes o etiquetas. 2. Prioridad de los tokens Se da prioridad al token con el lexema ms largo: Si se lee >= y > se reconoce el primero. Si el mismo lexema se puede asociar a dos tokens, estos patrones estarn definidos en un orden determinado. Ejemplo: While palabra reservada while letra (letra | digito)* identificador Si en la entrada aparece while, se elegir la palabra reservada por estar primero. Si estas especificaciones iniciales aparecieran en orden inverso, se reconocera un token identificador.
2.4.2 PATRN O EXPRESIN REGULAR Definen las reglas que permiten identificar los componentes lxicos o tokens. 2.4.3 LEXEMA Es cada secuencia de caracteres concreta que encaja con un patrn, es decir, es como una instancia de un patrn. Ejm: 8, 23, 50 (son lexemas que encajan con el patrn ( 0 | 1 | 2 | ... | 9) + ) Una vez detectado que un grupo de caracteres coincide con un patrn, se ha detectado un lexema. A continuacin se le asocia un nmero, que se le pasar al sintctico, y, si es necesario, informacin adicional, como puede ser una entrada en la tabla de smbolos. La tabla de smbolos suelen ser listas encadenadas de registros con parte variable: listas ordenadas, rboles binarios de bsqueda, tablas hash, etc. Ejm: Hacer un analizador lxico que nos reconozca los nmeros enteros, los nmeros reales y los identificadores de usuario. Vamos a hacer este ejemplo en C. Terminales Expresin Regular ( 0 ... 9) + NUM_ENT (0 ... 9)*. (0 ... 9) + NUM_REAL (a ... z) (a ... z 0 ... 9) * ID
Asociado a la categora gramatical de nmero entero tendremos el token NUM_ENT que puede equivaler por ejemplo al nmero 280; asociado a la categora gramatical nmero real tendremos el token NUM_REAL que equivale al nmero 281; asociado a la categora gramatical identificador de usuario tendremos el token ID que equivale al nmero 282. ( 0 ... 9) + { return 280;} (0 ... 9)*. (0 ... 9) + { return 281;} (a ...z) (a ...z 0...9) * { return 282;} Si tuviramos como texto de entrada el siguiente: 95.7 99 hola El analizador lxico intenta leer el lexema ms grande; el 95 encaja con el primer patrn, pero sigue, al encontrarse el punto, se da cuenta de que tambin encaja con el segundo patrn, entonces como este es ms grande, toma la accin del segundo patrn, return NUM_REAL. El 99 coincide con el patrn NUM_ENT, y la palabra con ID. Los espacios en blanco no coinciden con ningn patrn. En vez de trabajar con los nmeros 280, 281, 282, se definen mnemotcnicos. # define NUM_ENT 280 # define NUM_REAL 281 # define NUM_ID 282 ( \t \n) (0 ... 9) + {return NUM_ENT;} (0 ... 9) *. (0 ... 9) + {return NUM_REAL;} (a ... z) (a ... z 0 ... 9)* {return ID;}
Las palabras que entran por el patrn ( \t \n) no tienen accin asociada, por lo que , por defecto, se consideran solo espaciadores. Ejemplo: Programa UNO; Inicio Escribe (Hola); Fin. Cuya tabla de tokens es la siguiente:
El anlisis lxico es un anlisis de los caracteres: Parte de stos y por medio de patrones reconoce los lexemas Enva al analizador sintctico el componente lxico y sus atributos Puede hacer tareas adicionales: eliminar blancos, control lneas.
Grfico N 10: Descripcin del analizador lxico El analizador lxico y el sintctico forman un par productor-consumidor. En algunas situaciones, el analizador lxico tiene que leer Algunos caracteres por adelantado para decidir de qu token se trata.
Grfico N 11: Par Productor-Consumidor
2.6 UNIDADES DE LXICO Categoras en que se clasifican las cadenas de caracteres vlidos en un lenguaje. Los caracteres vlidos reciben el nombre de alfabeto. Por ejemplo, el alfabeto de Pascal es: A-Z, a-z, 0-9, _, =, :, ;, ,, , -, ', ", *, /, (, ), [, ], ., <, > y las unidades de lxico para pascal son: identificadores literales numricas operadores aritmticos cadenas de caracteres separadores operadores relacionales operadores lgicos comentarios Con respecto al lenguaje para controlar al ROBOT, tenemos que su alfabeto es: n,o,r,t,e,s, ,u,i,c y las unidades de lxico son: rdenes (norte, sur, este, oeste, inicio) y espacios en blanco.
2.7 EL ROL DEL ANALIZADOR LXICO
Aunque el analizador de lxico es la primera etapa del proceso de compilacin, no es quien lo inicia. Pudiera considerarse que el analizador de lxico hace su procesamiento y enva sus resultados al analizador gramatical, como secuencialmente se aprecia en el proceso de compilacin; no es as: La compilacin empieza con el analizador gramatical quien solicita un token para realizar su trabajo; el analizador de lxico reune smbolos y enva el token correspondiente a la unidad de lxico que conform al analizador gramatical y espera una nueva solicitud de token. Como se aprecia en la figura siguiente, el analizador de lxico est supeditado por el analizador gramatical.
Grfico N 12: Rol del analizador lxico Durante estas etapas se tiene comunicacin con la tabla de smbolos que concentra informacin de las entidades empleadas en el programa.
2.8 TRATAMIENTO DE LOS ERRORES Un traductor debe adoptar alguna estrategia para detectar, informar y recuperarse para seguir analizando hasta el final. Las respuestas ante el error pueden ser: Inaceptables: Provocadas por fallos del traductor, entrada en lazos infinitos, producir resultados errneos, y detectar slo el primer error y detenerse. Aceptables: Evitar la avalancha de errores (mala recuperacin) y, aunque ms complejo, informar y reparar el error de forma automtica. La conducta de un Analizador de Lxico es el de un Autmata finito o scanner. Deteccin del error: El analizador de Lxico detecta un error cuando no existe transicin desde el estado que se encuentra con el smbolo de la entrada. El smbolo en la entrada no es el esperado. Los errores lxicos se detectan cuando el analizador lxico intenta reconocer componentes lxicos y la cadena de caracteres de la entrada no encaja con ningn patrn. Son situaciones en las que usa un carcter invalido (@,$,",>,...), que no pertenece al vocabulario del lenguaje de programacin, al escribir mal un identificador, palabra reservada u operador. Errores lxicos tpicos son:
1. nombre ilegales de identificadores: un nombre contiene caracteres invlidos. 2. Nmeros incorrectos: un numero contiene caracteres invlidos o no esta formado correctamente, por ejemplo 3,14 en vez de 3.14 o 0.3.14. 3. errores de ortografa en palabras reservadas: caracteres omitidos, adicionales o cambiados de sitio, por ejemplo la palabra while en vez de while. 4. fin de archivo: se detecta un fin de archivo a la mitad de un componente lxico. Los errores lxicos se deben a descuidos del programador. En general, la recuperacin de errores lxicos es sencilla y siempre se traduce en la generacin de un error de sintaxis que ser detectado mas tarde por el analizador sintctico cuando el analizador lxico devuelve un componente lxico que el analizador sintctico no espera en esa posicin. Los mtodos de recuperacin de errores lxicos se basan bien en saltarse caracteres en la entrada hasta que un patrn se ha podido reconocer; o bien usar otros mtodos ms sofisticados que incluyen la insercin, borrado, sustitucin de un carcter en la entrada o intercambio de dos caracteres consecutivos. Una buena estrategia para la recuperacin de errores lxicos: si en el momento de detectar el error ya hemos pasado por algn estado final ejecutamos la accin correspondiente al ultimo estado final visitado con el lexema formado hasta que salimos de el; el resto de caracteres ledos se devuelven al flujo de entrada y se vuelve al estado inicial; Si no hemos pasado por ningn estado final, advertimos que el carcter encontrado no se esperaba, lo eliminamos y proseguimos con el anlisis. 2.9 TRATAMIENTO DE PALABRAS RESERVADAS Son aquellas que los lenguajes de programacin reservan para usos particulares. Cmo diferenciarlas de los identificadores? Resolucin implcita: reconocerlas todas como identificadores, utilizando una tabla adicional con las palabras reservadas que se consulta para ver si el lexema reconocido es un identificador o una palabra reservada. Resolucin explcita: se indican todas las expresiones regulares de todas las palabras reservadas y se integran los diagramas de transiciones resultantes de sus especificaciones lxicas en la mquina reconocedora.
2.10 CONSTRUCCIN DE UN ANALIZADOR LXICO Los analizadores lxicos pueden construirse: Usando generadores de analizadores lxicos: Es la forma ms sencilla pero el cdigo generado por el analizador lxico es ms difcil de mantener y puede resultar menos eficiente. Escribiendo el analizador lxico en un lenguaje de alto nivel: permite obtener analizadores lxicos con ms esfuerzo que con el mtodo anterior pero ms eficientes y sencillos de mantener. Escribiendo el analizador lxico en un lenguaje ensamblador: Slo se utiliza en casos especficos debido a su alto coste y baja portabilidad.
2.11 CONCEPTO DE EXPRESIN REGULAR
El objetivo de las expresiones regulares es representar todos los posibles lenguajes definidos sobre un alfabeto , basndose en una serie de lenguajes primitivos, y unos operadores de composicin. Lenguajes primitivos serian el lenguaje vaci, el lenguaje formado por la palabra vaca, y los lenguajes correspondientes a los distintos smbolos del alfabeto. Los operadores de composicin son la unin, la concatenacin, el cierre y los parntesis. 2.12 DEFINICIN DE EXPRESIN REGULAR Dado un alfabeto finito , las expresiones regulares sobre se definen de forma recursiva por las siguientes reglas: 1. Las siguientes expresiones son expresiones regulares primitivas: o
o, con o e 2. Sean o y | expresiones regulares, entonces son expresiones regulares derivadas: o + | (union) o . | (o simplemente o|) (concatenacion) o* (cierre) (A* repeticin l|A|AA|AAA..) (o) 3. No hay ms expresiones regulares sobre que las construidas mediante estas reglas.
Observacin: La precedencia de los operadores es la siguiente (de mayor a menor): 1. ( ) 2. * cierre 3. . concatenacin 4. + unin
Ejemplo: Algunos ejemplos de expresin regular son: (0 + 1)*01 (aa + ab + ba + bb)* a*(a + b) (aa)*(bb)*b
2.13 OPERACIONES DE EXPRESIONES REGULARES Seleccin entre alternativas. la cual se indica mediante el metacaracter | Concatenacin. La concatenacion entre dos expresiones regulares R y S se expresa por RS. Repeticin. Se indica mediante el metacaracter *
2.14 LENGUAJE DESCRITO POR UNA EXPRESIN REGULAR
Sea r una expresin regular sobre . El lenguaje descrito por r, L(r), se define recursivamente de la siguiente forma:
Ejemplo: L(a*(a+b)) = L(a*)L((a+b)) = L(a)*L(a+b) = L(a)*(L(a) L(b)) = {a}*({a}{b}) = {, a, aa, aaa,...}{a,b} = {a, aa, ..., b, ab, aab, ...} = {a n | n > 1}{ a n b | n > 0}. L((aa)*(bb)*b)= {a 2n b 2m+1 | n,m > 0}. Si = {a,b,c},entonces L(( a + b + c) )= * L(a*(b + c)) L(0*10*)
2.15 TEOREMAS DE EQUIVALENCIA Tal como indica su nombre, mediante expresiones regulares se pueden representar lenguajes regulares. De hecho, la clase de lenguajes que se pueden representar mediante una expresin regular, es equivalente a la clase de lenguajes regulares. Hasta ahora hemos visto que los lenguajes regulares pueden describirse mediante: Gramticas lineales por la izquierda, Gramticas lineales por la derecha, Autmatas finitos deterministas, Autmatas finitos no deterministas.
Por tanto, deben existir algoritmos que permitan obtener un autmata o una gramtica regular a partir de una expresin regular y viceversa. 2.16 MATRICES DE TRANSICIN Una matriz o tabla de transiciones es un arreglo bidimensional cuyos elementos proporcionan el resumen de un diagrama de transiciones. Para elaborar una tabla de transiciones, debe colocarse cada estado del diagrama de transiciones en una fila del arreglo y cada smbolo o categora de smbolos con posibilidades de ocurrencia en la cadena de entrada, en una columna. El elemento que se encuentra en la fila m columna n es el estado que se alcanzara en el diagrama de transiciones al dejar al estado m a travs de un arco de etiqueta n. Al no existir algn arco que salga del estado m, entonces la casilla correspondiente de la tabla se marca como un estado de error. En la siguiente figura se presenta un ejemplo de un diagrama de transiciones que representa la sintaxis para un nmero de punto flotante, seguido de la tabla de transiciones correspondiente.
Existe tambin La matriz de transicin de estados se cre dando valores de estado a cada uno de los tipos de palabra y utilizando las reglas de la gramtica respecto a la relacin que existe entre cada tipo de palabra 2.17 REPRESENTACIN DE LOS AUTMATAS
Grfico N 13: representacin de un autmata
Acepta las secuencias: abc(dc)* Ej. abc, abcdc, abcdcdc, abcdcdc... 2.18 AUTMATA FINITO DETERMINISTA Un autmata finito determinista consiste en un dispositivo que puede estar en un estado de entre un nmero finito de los mismos; uno de ellos ser el estado inicial y por lo menos uno ser estado de aceptacin. Tiene un flujo de entrada por el cual llegan los smbolos de una cadena que pertenecen a un alfabeto determinado. Se detecta el smbolo y dependiendo de este y del estado en que se encuentre har una transicin a otro estado o permanece en el mismo. El mecanismo de control (programa) es que determina cual es la transicin a realizar. La palabra finito se refiere a que hay un nmero finito de estados. La palabra determinista es porque el mecanismo de control (programa) no debe tener ambigedades, es decir, en cada estado solo se puede dar una y solo una (ni dos ni ninguna) transicin para cada smbolo posible (en el ejemplo anterior, la tabla de transiciones era determinista en ese caso, no as el diagrama, aunque podra serlo como veremos mas tarde). El autmata acepta la cadena de entrada si la mquina cambia a un estado de aceptacin despus de leer el ltimo smbolo de la cadena. Si despus del ltimo smbolo la mquina no queda en estado de aceptacin, se ha rechazado la cadena. Si la mquina llega al final de su entrada antes de leer algn smbolo la entrada es una cadena vaca (cadena que no contiene smbolos) y la representaremos con . Solo aceptar si su estado inicial es de aceptacin.
Un autmata finito determinista (AFD) consiste en una quntupla (Q, , o, q 0 , F) donde: Q es un conjunto finito de estados es el alfabeto de la mquina o :Q x ,Q (es la funcin total de transicin) q 0 e Q es el estado inicial F _ Q es el conjunto de los estados de aceptacin (estados finales).
Lee los caracteres de derecha a izquierda Para cada carcter ledo, si para un a e y q, p e S se tiene que o(q, a) = p, significa que siempre que el automata este en el estado q y le llega el carcter a pasar al estado p Ejemplo: Automata que acepta cadenas con un nmero par de ceros y un numero par de unos: AFD = {S, A, B, C}, {0,1},o, Q, {Q}
M se puede definir extensivamente con:
Representacin grfica:
2.19 AUTMATA FINITO NO DETERMINISTA La nica diferencia con los AFD est en que en la transicin en un estado determinado puede haber, para un mismo smbolo, ms de un arco o no haber ninguno. Decimos que un autmata finito no determinista acepta una cadena si es posible que su anlisis deje a la mquina en un estado de aceptacin. Decimos si es posible, pues si se toma el camino equivocado no se aceptara una cadena que podra ser vlida (una cadena del lenguaje aceptado por este autmata, designado por L(M). Un autmata finito no determinista (AFN o AFND) consiste en una quntupla: (Q, , o, q 0 , F) donde: Q es un conjunto finito de estados posibles del automata es el alfabeto de la mquina o :Q x ,2 Q (es la funcin total de transicin) q 0 e Q es el estado inicial F _ Q es el conjunto de los estados de aceptacin (estados finales).
Ejemplo: AFND que reconoce en {a, b, c}* tales que el ultimp smbolo en la caden de entrada apareca tambin anteriormente en la cadena. En este AFND, seria F = {q 0 , q 1 , q 2 , q 3 , q 4 }, {a, ,b, c}, o, q 0 , { q 4 }
Sea la entrada aca:
Concluyendo:
o(q 0 , aca) = { q 0 , q 1 , q 3 } { q 1 , q 4 } = { q 0 , q 1 , q 3, q 4 } Y como o(q 0 , aca) F = {q 4 }, la cadena se acepta.