Teoría de lenguajes y compiladores Analizadores lexicográficos Unidad I Analizadores lexicográficos Semana 3 Autómatas finitos
Objetivo General El alumno al finalizar el curso podrá desarrollar aplicaciones que le permitan determinar si una estructura gramatical corresponde a una sentencia valida en la definición de un lenguaje en particular, teniendo en cuenta el contexto sintáctico y semántico. Así mismo estará capacitado para proponer nuevas formas estructurales en la definición de lenguajes de programación.
Objetivos Específicos Desarrollar un analizador lexicográfico
Objetivos Instruccionales Comprender el funcionamiento de los autómatas para el reconocimiento o aceptación de cadenas que forman parte o son generadas por un lenguaje.
Expresiones regulares Contenidos Autómatas finitos Gramáticas Regulares Expresiones regulares
DIAGRAMA PRINCIPAL Autómatas AFN AFD Expresiones Regulares Manejador de Tabla Implementación de AFD Especificación léxica
AUTOMATAS FINITOS Automatas Finitos Son modelos matemáticos de los dispositivos que aceptan una entrada y producen una salida apropiada. La característica de un autómata es que la entrada pasa por varios estados para producir la salida. Un autómata finito puede ser determinista (AFD) o no determinista (AFN), donde “no determinista” significa que en un estado se puede dar el caso de tener más de una transición para el mismo símbolo de entrada.
PROCESO RECONOCIMIENTO AF Automatas Finitos PROCESO RECONOCIMIENTO AF Tanto los AFD como los AFN pueden reconocer con precisión a los conjuntos regulares. Dispositivo de entrada a b a a … cabeza lectura dirección movimiento cabeza Mecanismo de control Indicador de estado 1 6 2 Alfabeto de entrada 5 3 4
Análisis de expresiones regulares RECONOCIMIENTO DE FRASES Automatas Finitos Ejemplo: Sea G = (N, T, P, S) T = { a , b } N = { A , B, C } P = { A Aa | Ba B Cb C Ca | a } S = { A } Que genera el lenguaje: L(G) = { am b an | n, m >= 1} Luego la frase aaabaa que pertenece a L(G) tiene la siguiente derivación. A Aa Baa Cbaa Cabaa Caabaa aaabaa Análisis de expresiones regulares Se lee de izquierda a derecha la frase y la acepta como elemento del lenguaje si se puede reducir al símbolo inicial de la gramática Ejemplo: aaabaa Estado inicial 1ra reduccion : Caabaa Regla : C a 2da reduccion : Cabaa Regla : C Ca 3ra reduccion : Cbaa Regla : C Ca 4ta reduccion : Baa Regla : B Cb 5ta reduccion : Aa Regla : A Ba 6ta reduccion : A Regla : A Aa
LENGUAJE ACEPTADO POR UN AUTOMATA FINITO Autómatas Finitos LENGUAJE ACEPTADO POR UN AUTOMATA FINITO Formalmente el lenguaje aceptado por un AF llamado A es: L(A)= w (q0,w) F Los lenguajes aceptados por AFs se conocen como regulares.
AUTOMATA FINITO NO DETERMINISTA Automatas Finitos Hay que reconocer que las cadenas que deben analizarse en una aplicación están construidas a partir de un conjunto de símbolos, y este conjunto de símbolos es finito. A este conjunto lo llamaremos alfabeto. Este dispositivo consta de un conjunto finito de estados internos P entre los cuales hay un estado inicial específico So y un conjunto designado F de estados finales. Un autómata finito no determinista consta de una quintupla (P, V , M, So , F ) donde: P es un conjunto de estados, finito y no vació. V es el alfabeto de entrada M es la f unción de transición de estados So es el estado inicial o de partida ( So ε P ) F es el conjunto de estados finales ( F С P ) Una forma habitual de representar los autómatas finitos es mediante un grafo o diagrama de estados donde los nodos son los estados y las aristas están orientados con los símbolos de alfabeto que hacen que el autómata transite a un nuevo estado.
M esta representada por: AUTOMATA FINITO NO DETERMINISTA Automatas Finitos Ejemplo: El siguiente grafo de transiciones corresponde a un AFN que reconoce el lenguaje: (a | b)* abb a a b b 1 2 3 b M esta representada por: Donde: P = { 0 , 1 , 2 , 3 } V = { a , b } So = { 0 } F = { 3 } estados entrada a b { 0 , 1} { 0 } 1 - { 2 } 2 { 3 }
AUTOMATA FINITO DETERMINISTA Automatas Finitos Un autómata finito determinista, es un caso especial de AFN en el cual: a. Ningún estado tiene una transición vacía b. Para cada estado S y cada símbolo de entrada a hay a lo sumo una arista etiquetada a que sale de S. Un autómata finito determinista tiene a lo sumo una transición desde cada estado con cualquier entrada.
M esta representada por: AUTOMATA FINITO DETERMINISTA Autómatas Finitos Ejemplo: El siguiente grafo de transiciones corresponde a un AFD que reconoce el lenguaje: (a | b)* abb 1 2 3 a b Donde: P = { 0 , 1 , 2 , 3 } V = { a , b } So = { 0 } F = { 3 } M esta representada por: estados entrada a b { 1 } { 0 } 1 { 2 } 2 { 3 } Reconocer Secuencia de estados ababb 0, 1, 2, 1 , 2 , 3 ababaabb 0, 1, 2, 1, 2, 1, 1, 2, 3
Autómatas Finitos Ejercicio Diseñar el grafo asociado a un AFD, para reconocer palabras sobre {a, b, c} en las cuales toda b es inmediatamente seguida de al menos una c. a,c 1 2 b c Aceptación 3 a,b Error Solución 1 a,c a,b,c a,b b c 1 2 Solución 2
Automatas Finitos Investigar Transformación de un autómata finito no determinístico (AFN) a un autómata finito determinístico (AFD)
Gramáticas Regulares Se denominan gramáticas regulares a una colección de terminales y no terminales, junto con un símbolo de inicio y un conjunto finito de reglas de reescritura. Aquí usaremos una notación menos engorrosa. Salvo que se especifique lo contrario, representaremos a los no terminales con letras mayúsculas y a los terminales con letras minúsculas. Una gramática regular se adhiere a las siguientes restricciones: S aB | a | λ
Expresiones Regulares Definición Expresiones Regulares Es una notación equivalente a la de un lenguaje regular o a un autómata Los lenguajes regulares son reconocidos por autómatas finitos y son generados por gramáticas regulares. Una tira de entrada t es reconocida o aceptada por un autómata finito si puede escribirse una secuencia de movimientos entre las configuraciones inicial y final. ( q0 , t ) * ( qi , ) donde qi pertenece a F Por consiguiente, el conjunto de todas las tiras que son reconocidas por un autómata finito, esto es, el lenguaje deducido por un dispositivo de este tipo puede definirse como: L(AF) = { t / t T* , ( q0 , t ) * ( qi , ) , qi F }
Expresiones Regulares La expresión regular para un alfabeto T, permite definir un conjunto de tiras de caracteres, llamado conjunto regular, de la siguiente forma: 1. Ø denota al conjunto vacío Ø Ɛ denota el conjunto regular { γ } Con a se indica a pertenece a T 4. Si P y Q son dos expresiones regulares entonces: P + Q denota P U Q (P Q) denota P Q c. (P*) denota P*
Identificador de un lenguaje de programación Expresiones Regulares Identificador de un lenguaje de programación En notación de expresión regular Identificador = letra (letra + digito)* letra = a + b + c + ……. + z digito = 0 + 1 + 2 + … + 9
Expresiones Regulares También lo son: Como ejemplo, si el alfabeto V fuera {X, Y, Z} entonces (X U (ZY)) seria una expresión regular ya que (ZY) también es una expresión regular y en consecuencia X U (ZY) también lo seria: Cada expresión regular r de un alfabeto V representa un lenguaje denotado por L(r), que se construye a partir de bloques de construcción.
Expresiones Regulares Para ser más precisos: a. L( ) es el lenguaje b. L(x) es el lenguaje {x}, para cada x V c. L((pUq)) = L(p) U L(q) d. L((pq)) = L(p) L(q) e. L(p*) = L(p)* Por ejemplo, la expresión (X U (ZY)) representa el lenguaje {X,ZY}, es decir, representa el lenguaje generado al unir {X} con la concatenación de {Z} y {Y} De forma similar la expresión ((XY)* U Z*) representa el lenguaje que consiste en cadenas de cero o más copias del patrón XY además de las cadenas de cero o mas Z.
PROPIEDADES ALGEBRAICAS DE LAS EXPRESIONES REGULARES Axioma Descripción r | s s | r | es conmutativa r | ( s | t ) ( r | s ) | t | es asociativo ( r s ) t r ( s t ) La concatenación es asociativa r ( s | t ) r s | r t (s | t ) r sr | tr La concatenación distribuye sobre | r r r r es el elemento identidad r* ( r + )* La relación entre * y r** r * es idempotente
Expresiones Regulares EJEMPLO 1 Sean § = {0, 1} y L, M dos lenguajes sobre § dados por L ={1, 10} y M = {1, 01} Entonces: LM = {11, 101, 1001}. Mientras que ML = {11, 110, 011, 0110}.
Expresiones Regulares EJEMPLO 2 Dado V = {0; 1} y la Expresión Regular α = 0*10*, tenemos que: L(0*10*) = L(0*) L(1) L(0*) = (L(0))* L(1) (L(0))* = {0}*.{1}.{0}* = {0n10m | n, m 0}
Expresiones Regulares EJEMPLO 3 Si ∑ = {a, b, c} entonces ∑2 = {aa, ab, ac, ba, bb, bc, ca, cb, cc} EJEMPLO 4 Sea § = {0, 1} y L = {01, 1}, entonces L3 = {010101, 01011, 01101, 0111, 10101, 1011, 1101, 111}
COMPONENTES BASICOS DE UNA EXPRESION REGULAR Expresiones Regulares a b a + b = a | b ab a*
COMPONENTES BASICOS DE UNA EXPRESION REGULAR Expresiones Regulares Ejemplo: t r s r*st* Ejemplo: s r t u (r*st*)(u(r*st*))*
UNION DE LENGUAJES REGULARES Expresiones Regulares Ejemplo: Sean y x Cero o mas x seguidas de una y Cero o mas y seguidas de una x Para unirlos: se crea un nuevo estado inicial a partir del cual podamos entrar a uno de los diagramas originales sin poder regresar. Nuevo estado inicial x y Anterior estado inicial
CONCATENACION DE LENGUAJES REGULARES Expresiones Regulares Ejemplo: Sean 4 x x y y y x 1 2 3 T1 T2 Se procede de la siguiente forma: · A partir de cada extremo de aceptación de T1, dibuje un arco hacia cada estado de T2. · Rotule cada uno de estos arcos con las etiquetas del arco correspondiente T2. · Deje que los estados de aceptación de T1 sigan siendo estados de aceptación si solo si el estado inicial T2 es también un estado de aceptación.
Solución: CONCATENACION DE LENGUAJES REGULARES Expresiones Regulares x y y x 1 2 3 4 x x y y
Reglas de precedencia de las Expresiones Regulares El operador * tiene la precedencia más alta . El siguiente en precedencia es el operador de concatenación. Finalmente, se aplican los operadores de unión con sus operandos. Ejemplo: la expresión 01* + 1 se aplica así (0(1*))+1
M esta representada por: Ejercicios Ejercicio Propuesto 1 Construir un autómata finito determinista que reconozca el lenguaje sobre {0, 1} que consiste de las palabras que terminan con 1, es decir, (0 + 1)*1. 1 M esta representada por: estados entrada 1 { 0 } { 1 } Donde: P = { 0 , 1 } V = { 0 , 1 } So = { 0 } F = { 1 }
M esta representada por: Ejercicios Ejercicio Propuesto 2 Construir un AFD que reconozca cadenas con un número par de 0s y/o un número par de 1s M esta representada por: Donde: P = { q0 , q1, q2, q3 } V = { 0 , 1 } So = {q0 } F = { q0 }
Ejercicio Propuesto 3 Ejercicios Construir un AFD que reconozca la ocurrencia de la palabra 1011 en una cadena conformada por ceros y unos.
Teoría de lenguajes y compiladores Analizadores lexicográficos Unidad I Analizadores lexicográficos Semana 3 Autómatas finitos