Gramáticas Introducción Las gramáticas definen las reglas que definen a los lenguajes Las reglas pueden tener una diversa variedad de esquemas En algunos lenguajes, una sucesión de símbolos depende del anterior En algunos lenguajes, es posible separar una palabra en partes más pequeñas, que no dependan unas de otras En un lenguaje, pueden existir elementos que cambien su significado dependiendo de su contexto Algunos lenguajes tienen una estructura general, que no se ajusta a lo ya comentado Análisis Considere el caso del lenguaje asociado a las expresiones matemáticas 9-8+1 9-(8+1) Para estudiar las estructuras que pueden presentarse en los diferentes tipos de lenguaje, se ha diseñado teoría como la Jerarquía de Chomsky Notación Una regla de producción se representa como <término que se define> ::= <definición> Ejemplo <instruccion> ::= <asignacion> <asigancion> ::= <identificador> = <expresion> <expresion> ::= <sumando> <expresion> ::= <sumando> + <expresion> <sumando> ::= <factor> <sumando> ::= <factor> * <sumando> <factor> ::= <identificador> <factor> ::= <numero> <identificador> ::= x <identificador> ::= y <identificador> ::= z Notación Sea Σ un alfabeto y P un conjunto de reglas de producción. Sean u y v dos palabras del mismo alfabeto. Se dice que v deriva directamente de u mediante P, si es posible descomponer u y v de la siguiente manera: Por otro lado, se dice que v deriva de u si existen una secuencia finita tales que: u = xyz, v = xwz P contiene la regla y ::= w La derivación directa se representa por: u v u = u0 u1 … un = v La derivación se denota como: u + v Existe una relación Thue entre u y v si: u = v ó u * v Gramática Una gramática se define como la cuádrupla G = (ΣT, ΣN, S, P), donde: ΣT: símbolos terminales ΣN: símbolos no terminales S∈ΣN: axioma o símbolo inicial P: conjunto finito de reglas de producción Tanto ΣT y ΣN deben de ser conjuntos disjuntos Ejemplo: considere la gramática G = ({0, 1, …, 9}, {N,C}, N, P), donde P es el conjunto: N ::= NC N ::= C C ::= 0 C ::= 1 … C ::= 9 Verificar si es posible generar la palabra 1230 a partir de esta gramática Notación Backus Si el conjunto de reglas de producción contiene dos reglas de la forma: Se puede representar de forma abreviada la notación de la forma: u ::= v u ::= w u ::= v | w Por ejemplo, las reglas de producción del ejemplo anterior se expresan como: N ::= NC | C C ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 Lenguaje asociado a una gramática Sea la gramática G = (ΣT, ΣN, S, P), se llama el lenguaje asociado a G al conjunto L(G) = {x | S * x, x ∈ Σ*T} Se dice que dos gramáticas G1 y G2 son equivalentes cuando describen el mismo lenguaje, es decir, L(G1) = L(G2) Se una gramática G = (ΣT, ΣN, S, P) y v = x u y tal que S * x u y. Se dice que u es una frase de la forma sentencial v respecto del símbolo no terminal U si se verifica que S * xUy U + u Recursividad Una regla de producción es recursiva si tiene la forma Sea G = (ΣT, ΣN, S, P), se dice que: U ::= x U y Si x = λ, se dice que la regla es recursiva a la izquierda Si y = λ, se dice que la regla es recursiva a la derecha G es recursiva en el símbolo no terminal U ∈ ΣN si U + xUy Si un lenguaje es infinito, la gramática que lo representa tiene que ser recursiva Clasificación de gramáticas Chomsky clasificó a las gramáticas en 4 grandes grupos Gramáticas de tipo 0 Gramáticas de tipo 1 Gramáticas de tipo 2 Gramáticas de tipo 3 Gramáticas Tipo 3 o Regulares Las gramáticas del tipo 3 se clasifican en dos grupos: Gramáticas lineales por la izquierda: sea G = (ΣT, ΣN, S, P), las reglas de producción de P serán de la forma: Gramáticas lineales por la derecha: sea G = (ΣT, ΣN, S, P), las reglas de producción de P serán de la forma: A ::= a A ::= Va S ::= λ Donde a ∈ ΣT, A,V,S ∈ ΣN, S es el axioma de la gramática A ::= a A ::= aV S ::= λ Donde a ∈ ΣT, A,V,S ∈ ΣN, S es el axioma de la gramática En ambos casos, la última regla puede aparecer únicamente si la gramática no es recursiva en S. Si se desea considerar en el lenguaje representado por la gramática a la palabra vacía, se genera una nueva transición Gramáticas Tipo 3 o Regulares Ejemplo: G1 = ({0,1}, {A, B}, A, {A ::= B1 | 1, B ::= A0}) G2 = ({0,1}, {A, B}, A, {A ::= 1B | 1, B ::= 0A}) G3 = ({a,b}, {S, A}, S, {S ::= bA, A ::= aS | a}) ¿Estas gramáticas son del tipo G3? Describe cada lenguaje asociado a las gramáticas descritas Soluciones G1 = ({0,1}, {A, B}, A, {A ::= B1 | 1, B ::= A0}) G2 = ({0,1}, {A, B}, A, {A ::= 1B | 1, B ::= 0A}) L(G1) = {1(01)n: n >=0} L(G2) = {1(01)n: n >= 0} G3 = ({a,b}, {S, A}, S, {S ::= bA, A ::= aS | a}) L(G3) = {(ba)n: n >= 1} Gramáticas libres de contexto o Tipo 2 Sea G = (ΣT, ΣN, S, P) una gramática, G es gramática tipo 2 o libre de contexto, si las reglas de producción tienen la forma: A ::= v v ∈ (ΣT ∪ ΣN)* A ∈ ΣN Un lenguaje libre de contexto es un lenguaje generado por una gramática libre de contexto Gramáticas libres de contexto o Tipo 2 Ejemplo Considere la gramática G = (ΣT, ΣN, S, P), donde ΣT = {Num, +, -, (, )} ΣN = {Q0, Q1, Op} S = Q1 P esta formado por Q0 ::= Q1 Op | Q1 Op ::= +Q1 | -Q1 Q1 ::= Num | (Q0) Nota: considere que Num es un número. Gramáticas tipo 1 o sensibles al contexto Sea G = (ΣT, ΣN, S, P) una gramática, G es gramática tipo 1 si todas sus producciones P son del tipo: xAy ::= xvy A ∈ ΣN x,y ∈ (ΣT ∪ ΣN)* v ∈ (ΣT ∪ ΣN)+ Esto dice que un símbolo no terminal A se transforma en la cadena v si está flanqueado a la izquierda por la cadena x y a la derecha por la cadena y (contexto). Además, v no puede ser la cadena vacía Gramáticas de tipo 0 Sea G = (ΣT, ΣN, S, P) una gramática, G es gramática tipo 0 si todas sus producciones P son del tipo: u ::= v u, v ∈ (ΣT ∪ ΣN)* Hay que notar que un lenguaje regular siempre es un lenguaje libre de contexto Ejemplo Considere la gramática G = ({a,b}, {A, B, C}, A, P), donde: A ::= aABC | abC CB ::= BC bB ::= bb bC ::= b