•1 •Teoría lenguajes de programación - Tema 2 TEMA 2 LENGUAJES FORMALES Y GRAMÁTICAS. 2 Objetivos Saber los fundamentos de los lenguajes formales Conocer los tipos de mecanismos formales Utilizar las gramáticas como mecanismos generadores de lenguajes formales Conocer los tipos de lenguajes Conocer los tipos de gramáticas •Teoría lenguajes de programación - Tema 2 Tema 2 Lenguajes formales y gramáticas •3 1.1 Conceptos sobre lenguajes formales 1.1.1 Conceptos básicos sobre palabras 1.1.2 Operaciones con palabras 1.1.3 Conceptos de lenguajes formales 1.1.4 Operaciones con lenguajes formales 1.1.5 Mecanismos formales 1.2 Gramáticas formales 1.2.1 Definición de gramática formal 1.2.2 Derivación 1.2.3 Lenguaje generado por una gramática 1.2.4 Forma sentencial y sentencia 1.2.5 Gramáticas equivalentes 1.3 Clasificación de las gramáticas formales 1.3.1 Tipos de gramáticas 1.3.2 Determinación del tipo de una gramática 1.4 Clasificación de los lenguajes formales 1.4.1 Tipos de lenguajes formales 1.4.2 Determinación del tipo de un lenguaje •Teoría lenguajes de programación - Tema 2 1.1.1 - Conceptos sobre lenguajes formales. Definiciones de palabras •4 Leng. Formal - conjunto de palabras definidas sobre un alfabeto Alfabeto - conjunto finito, no vacío de símbolos. Se representan por (Σ). Σ={a, b} Símbolo - componente mínimo e indivisible que puede formar parte de una palabra. Cadena, palabra - secuencia finita de símbolos de un alfabeto. x=aab, y=b,.. Longitud de una palabra x - conjunto de símbolos que tiene esa palabra, |x|=3 Palabra vacía - palabra que no tiene símbolos, se representa por ε, |ε|= 0. Σ* - conjunto de todas las palabras que se pueden formar con el alfabeto Σ. •Teoría lenguajes de programación - Tema 2 1.1.1 - Conceptos sobre lenguajes formales - Definiciones de palabras •5 Subpalabra de una palabra - es una palabra entresacada de forma consecutiva de la palabra dada Sean x, y, z, v ∈ Σ*, y es subpalabra de x; si ∃ z, v ∈ Σ*| x = vyz Prefijo de una palabra - subpalabra entresacada desde el inicio de la misma Sean x, y, z ∈ Σ*, y es prefijo de x , si ∃ z ∈ Σ* | x = y·z Prefijo propio - y es prefijo propio de x , si ∃ z ∈ Σ+ , z ∉ε | x = y·z Sufijo de una palabra, es una subpalabra entresacada desde el final. Sean x, y, z ∈ Σ*, y es sufijo de x ; si ∃ z ∈ Σ* | x =z · y Sufijo propio - y es sufijo propio de x ; si ∃ z ∈ Σ+ , z ∉ε | x = z.y Cualquier palabra x incluyendo la palabra vacía, son prefijo y sufijo de sí misma •Teoría lenguajes de programación - Tema 2 1.1.2 – Conceptos sobre lenguajes formales - Operaciones con palabras •6 Concatenación de palabras (.) Sean dos palabras x, y definidas sobre el mismo alfabeto Σ, la concatenación de ambas x.y (xy) es una nueva palabra z, formada por los símbolos de x seguidos de los símbolos de y. x(∑) . y(∑) = x(∑) y(∑) = z (∑) x=ab, y=aa ; xy=z=abaa ; |x|+|y|=|z| Propiedades de la concatenación ∀ x, y ∈ Σ*, la operación concatenación (.) cumple las siguientes propiedades: - Operación cerrada x.y =z - P. asociativa x(yz) = (xy)z - E. neutro xε=εx=x •Teoría lenguajes de programación - Tema 2 1.1.2 – Conceptos sobre lenguajes formales. Operaciones con palabras •7 Potencia de una palabra Dado que la concatenación de palabras permite la propiedad asociativa, una palabra x, se puede concatenar consigo misma un número determinado n de veces, dando lugar a la potencia n-ésima de esa palabra xn x=aab, x0=ε , x3=aabaabaab Propiedades de la potencia ∀ x ∈ Σ* ⇒ ∃ xn∈ Σ* ε si n=0 xn = xn-1x si n>0 |xn|=n |x| •Teoría lenguajes de programación - Tema 2 1.1.2 – Conceptos sobre lenguajes formales - Operaciones con palabras •8 Palabra inversa (refleja, transpuesta) Dada una palabra x definida sobre un alfabeto Σ, su inversa o refleja x-1 (xi ), es una nueva palabra definida sobre el mismo alfabeto Σ, formada por los mismos símbolos que tiene x, pero situados en orden inverso. x=aab , x-1=baa Propiedades de la inversión ∀ x ∈ Σ* ⇒ ∃ x-1∈ Σ* ε si x= ε x-1 = y-1a si x=ay |x|=|x-1| La operación inversa cumple la propiedad de idempotencia ( x-1 ) -1 = x Dos palabras son iguales sí tienen la misma longitud y los símbolos en la misma posición. •Teoría lenguajes de programación - Tema 2 1.1.3 – Conceptos de lenguajes formales •9 Un lenguaje formal L definido sobre un alfabeto Σ, es cualquier subconjunto de Σ* conjunto de palabras con una significación propia y, tiene una definición formalizada L (Σ) ⊆ Σ* L(Σ) = {x ∈ Σ* | x cumple con la definición formal del lenguaje} Ejemplos de lenguajes formales definidos sobre el alfabetos Σ = {a, b}: L1 = {}= φ, lenguaje vacío en donde el cardinal ({})=0 L2 = { ε }, lenguaje no vacío en done el cardinal ({ε })=1 L3 = {a, b}, el lenguaje coincide con el alfabeto L4 = {a, ab, ε} el lenguaje contiene la palabra vacía L5 = {an, n≥0}= {a0, a1, a2,…}={ ε, a, aa,…} L6 = {anbm | n, m≥0}={a0b0, a0b1,… .}= {εε, εb,…}={ ε, b,…} L7 = {palabras formadas por un número impar de aes}={a, ba,ab, bab, …} Σ* = lenguaje universal a Σ , o cierre de Σ . Lenguaje, formado de todas las palabras que se pueden construir con los símbolos {a,b} sin limitación de orden y longitud, incluyendo la palabra vacía. •Teoría lenguajes de programación - Tema 2 1.1.4 – Conceptos sobre lenguajes formales - Operaciones con leng. formales •10 Operaciones con lenguajes formales: Al ser un lenguaje formal un conjunto de palabras, se puede aplicar toda la teoría de conjuntos sobre ellos. Sean L1 y L2, lenguajes definidos sobre Σ; L1, L2 ⊆ Σ* L1 = {ε, a, aa, aab}, L2 = {b, bb, aa, aabb} Alternativa o unión de lenguajes Dado dos lenguajes L1 y L2 definidos sobre un mismo alfabeto Σ, la unión de ambos es un nuevo lenguaje L3 , definido sobre el mismo alfabeto Σ y formado por las palabras de L1 y L2 L1 | L2 = L1 U L2 = { x∈ Σ * | x∈ L1 o x∈ L2 } L1 = { ε, a, aa, aab } , L2 ={ b, bb, aa, aabb } L1 | L2 = { ε, a, aa, aab, b, bb, aabb} •Teoría lenguajes de programación - Tema 2 1.1.4 – Conceptos sobre lenguajes formales - Operaciones con leng. formales •11 Propiedades que cumple la operación (|) unión de lenguajes ∀ L ⊆ Σ* se cumplen las siguientes propiedades: Operación cerrada L1| L2 = L3 P. idempotente L1 | L1 = L1 P. conmutativa L1 | L2 = L2 | L1 P. asociativa E. neutro L1 | ( L2 | L3 ) = ( L1 | L2 ) | L3 L1| Φ = L1 •Teoría lenguajes de programación - Tema 2 1.1.4 – Conceptos sobre lenguajes formales- Operaciones con leng. formales •12 Concatenación o yuxtaposición Dado dos lenguajes L1 y L2 definidos sobre un mismo alfabeto Σ, la concatenación de ambos es un nuevo lenguaje L3 , definido sobre el mismo alfabeto Σ y formado por las palabras de L1 concatenadas por las palabras de L2 L1 L2 = L1 · L2 = { xy ∈ Σ* | x∈ L1 y y∈ L2 } L1 = { ε, a, aa, aab } , L2 = { b, bb, aa, aabb } L1. L2 = { εb, εbb, εaa, εaabb, ab, abb, aaa, aaabb, aabb, aabbb, } Propiedades que cumple la operación (.) ∀ L ⊆ Σ* se cumplen las siguientes propiedades: Operación cerrada L1 L2 = L3 P. asociativa L1 ( L2 L3 ) = ( L1 L2 ) L3 E. neutro L1 . ε = ε. L1 = L1 La operación concatenación de lenguajes formales cumple con la propiedad distributiva con respecto a la operación unión P. distributiva L1 ( L2 | L3 ) = ( L1 L2 | ( L1 L3) ; (L1 | L2 ) L3 = ( L1 L3)| ( L2 L3 ) •Teoría lenguajes de programación - Tema 2 1.1.4 – Conceptos sobre lenguajes formales -Operaciones con leng. formales •13 Potencia de lenguajes Dado que la concatenación de lenguajes formales permite la propiedad asociativa, un lenguaje formal L1 se puede concatenar consigo mismo, un número determinado n de veces, dando lugar a la potencia n-ésima de ese lenguaje Ln Ln =LLL..n veces L L1 = { ε, a, aa, aab} L1 L1= L12 ={ εε, εa, εaa , εaab, aε, aa, aaa, aaab, aaε, aaa, aaaa,…} Propiedades de la potencia de lenguajes ∀ L ⊆ Σ* , ∃ Ln ⊆ Σ* Operación cerrada L∈ Σ * , Ln ∈ Σ * Li .L = L .Li = Li+1 Cualquier lenguaje L0= ε ε si n=0 Ln = Ln-1 L si n>0 En la definición anterior existe una incongruencia para el lenguaje L= φ , φ0= ε •Teoría lenguajes de programación - Tema 2 1.1.4 – Conceptos sobre lenguajes formales Operaciones con lenguajes formales •14 L* (L estrella, cierre de Kleene) L* es el conjunto de palabras que se pueden formar al concatenar en cualquier orden y cantidad las palabras de L, incluyendo la palabra vacía. ∞ L* = L0| L1| …..Ln…= U Li i=0 Sea L1 = { ε, a, aa, aab} L1* = { ε } | { ε, a, aa, aab} | {εε, εa, εaa , εaab, aε, aa, aaa, aaab, aaε, aaa,…} L+ (L mas , cierre positivo de L) L+ es el conjunto de palabras que se pueden formar al concatenar en cualquier orden y cantidad las palabras de L ∞ L+=L1| L2…..Ln…= U Li i=1 Sea L1 = {ε, a, aa, aab} L1+ = {ε, a, aa, aab} | { εε, εa, εaa , εaab, aε, aa, aaa, aaab, aaε, ...} L* = L+| L0 ; L* = L+| { ε } ; L+ = L* sii ε ∈ L ; L+ = L*.L •Teoría lenguajes de programación - Tema 2 1.1.4 – Conceptos sobre lenguajes formales -Operaciones con lenguajes formales •15 Σ * ( sigma estrella, lenguaje universal sobre Σ) Σ* es el conjunto de palabras que se pueden formar al concatenar en cualquier orden y cantidad los símbolos de Σ , incluyendo la palabra vacía. ∞ Σ* = Σ0 | Σ1 | Σ2….= U Σ i i=0 Σ* = L* sii Σ ⊆ L ; Σ* = L+ sii Σ ⊆ L y ε ∈ L Σ+ (sigma mas) es el conjunto de palabras que se pueden formar al concatenar en cualquier orden y cantidad los símbolos de Σ ∞ + 0 1 2 Σ = Σ | Σ | Σ ….= U Σ i i=1 Σ+= L+ sii Σ ⊆ L y ε ∉ L ; Σ+ ≠ L* ; Σ +≠ Σ* •Teoría lenguajes de programación - Tema 2 1.1.4 – Conceptos sobre lenguajes formales - Operaciones con lenguajes formales •16 Intersección de lenguajes Dado dos lenguajes L1 y L2 definidos sobre un mismo alfabeto Σ , la intersección de ambos L1∩ L2 es un nuevo lenguaje L3 definido sobre el mismo alfabeto Σ y formado por las palabras que pertenecen a L1 y a L2 L1 ∩ L2 = { x ∈ Σ * | x ∈ L1 y x ∈ L2 } L1 = { ε, a, aa, aab}, L2 = { b, bb, aa, aabb} L1 ∩ L2 = {aa} Propiedades de la operación (∩) ∀ L ⊆ Σ* se cumplen las siguientes propiedades: Operación cerrada L1 ∩ L2 = L3 P. idempotente L1 ∩ L1 = L1 P. conmutativa L1 ∩ L2 = L2 ∩ L1 P. asociativa L1 ∩ ( L2 ∩ L3 ) = ( L1∩ L2 ) ∩ L3 E. neutro L1 ∩ Σ *= L1 P. distributiva L1 ∪ (L2 ∩ L3 ) = ( L1 ∪ L2 ) ∩ ( L1∪ L3 ) L1 ∩ ( L2 ∪ L3 ) = ( L1 ∩ L2 ) ∪ ( L1∩ L3 ) •Teoría lenguajes de programación - Tema 2 1.1.4 – Conceptos sobre lenguajes formales- Operaciones con leng. formales •17 Diferencia de lenguajes formales Dado dos lenguajes L1 y L2 definidos sobre un mismo alfabeto Σ, la diferencia de ambos L1- L2 , es un nuevo lenguaje L3 definido sobre el mismo alfabeto Σ y formado por las palabras que pertenecen a L1 y no pertenecen a L2 L1- L2 = { x ∈ Σ * | x ∈ L1 y x ∉ L2 } L1 = { ε, a, aa, aab}, L2 = { b, bb, aa, aabb} L1- L2 = { ε, a, aab} Propiedades de la operación (-) diferencia de lenguajes ∀ L ⊆ Σ* se cumplen las siguientes propiedades: Operación cerrada L1 - L2 = L3 E. neutro L1 - φ = L1 L1 - L1 = φ P. distributiva con respeto de la intersección e la (L1 - L2 ) ∩ L3 = (L1 ∩ L3) – ( L2 ∩ L3 ) •Teoría lenguajes de programación - Tema 2 1.1.4 – Conceptos sobre lenguajes formales-Operaciones con leng. Formales •18 Complemento de un lenguaje: Dado un lenguaje L definido sobre un alfabeto Σ, su complementario L, es un nuevo lenguaje formal definido sobre el mismo alfabeto, compuesto de todas las palabras que se pueden formar con los símbolos de Σ (Σ* lenguaje universal) menos las palabras del propio L, L= Σ* - L L = { x ∈ Σ * | x ∈ Σ* y x ∉ L} Propiedades: ∀ L ⊆ Σ* se cumplen las siguientes propiedades: Operación cerrada L ⊆ Σ* ; L ⊆ Σ* L = ∑* - L L =L L ∩L=φ L U L = Σ* •Teoría lenguajes de programación - Tema 2 1.1.4 – Conceptos sobre lenguajes formales - Operaciones con leng. formales •19 Lenguaje inverso Dado un lenguaje L definido sobre el alfabeto Σ, su inverso L-1 es un nuevo lenguaje definido sobre el mismo alfabeto Σ y, formado por las palabras inversas de L L-1 = { x-1 ∈ Σ * | x ∈ L } L = { ε, a, aba, aab} , L-1 = { ε, a, aba, baa } Mecanismos formales - Un LF se define por las propiedades que cumplen las palabras que lo componen. Las propiedades que cumplen las palabras del lenguaje deben permitir representarlas de una manera formalizada. - Si el lenguaje es finito, para su definición basta con su enumeración - Si el conjunto L⊆ Σ*, definido sobre Σ, es un conjunto infinito numerable, habrá que buscar un medio finito y preciso para su definición. No todos los leng. formales pueden definirse de una forma finita y precisa Para evitar el problema de indefinición, se crearon los mecanismos formales: Expresiones regulares, autómatas y gramáticas •Teoría lenguajes de programación - Tema 2 1.1.5 – Conceptos sobre lenguajes formales- Mecanismos formales •20 Mecanismos formales Las expresiones regulares - mecanismos que sirven para describir un tipo de lenguajes formales, denominados lenguajes regulares Los autómatas - mecanismos que permiten especificar de manera finita y precisa cualquier lenguaje formal, permiten simular el reconocimiento del lenguaje para dicha especificación Las gramáticas - mecanismos que permiten especificar de manera finita y precisa cualquier lenguaje formal, permiten simular la generación de las palabras del lenguaje especificado. Diferencias entre lenguaje formal y lenguaje natural. En general, un lenguaje natural es aquel que evoluciona con el paso del tiempo con fines de comunicación humana, evolucionan sin tener en cuenta reglas gramaticales estrictas que puede resolver situaciones ambiguas. Mientras que los lenguajes formales, al contrario, están definidos por reglas de producción preestablecidas y, se ajustan con todo rigor y formalidad a ellas. •Teoría lenguajes de programación - Tema 2 1.2.1 - Conceptos sobre lenguajes formales - Gramáticas formales •21 Definición formal – Gramáticas formales Una gramática es un mecanismo formal compuesto por cuatro elementos G = (Σ, N, S, P) en donde: Σ - alfabeto terminal, alfabeto de las palabras del lenguaje que genera la gramática N - alfabeto no terminal, alfabeto auxiliar que determina la complejidad de la estructura de las palabras a generar por la gramática Σ ∩ N=Φ S - símbolo inicial a partir del cual se obtienen todas las palabras del lenguaje a generar por la gramática S∈N P - conjunto finito de reglas de producción a través de las cuales se obtienen todas las palabras del lenguaje que genera la gramática. P: { α1→β1, α2→β2…..} , αi ∈ ( N | Σ)* N ( N | Σ)*, βi ∈ ( N | Σ)* Ejemplo: L= { an | n>=1} G = ( Σ = {a}, N = { S }, S, P) P: { S → a, S → a S } •Teoría lenguajes de programación - Tema 2 1.2.2 – Conceptos sobre gramáticas -Derivación •22 Derivación en el entorno de una gramática Derivación en el entorno de una gramática - es un proceso enfocado en la obtención de las palabras del lenguaje que genera dicha gramática Sea una gramática G = (Σ, N, S, P) P: { α1→β1, α2→β2, .. } α ∈ ( N | Σ) * N ( N| Σ)*, β ∈ ( N|Σ)* L(G) = { x∈ Σ* | x δ G ( x deriva de G) } Derivación directa (derivación de un paso) Consiste en aplicar sobre una palabra ω ∈ ( N | Σ)* N ( N | Σ)* obtenida de la gramática G, una producción α1→β1 de la propia gramática. - Sea la palabra ω1 = δ1 α1 δ2 ; δ1, δ2 ∈ ( N | Σ )* y α1∈ ( N | Σ)* N ( N | Σ)* Aplicando la producción α1→β1 de la gramática G sobre dicha palabra ω1, la palabra ω1 se transforma en δ1β1δ2= ω2 en donde δ1, β1, δ2 ∈ ( N | Σ)* Es decir δ1 α1 δ2→δ1 β1 δ2 , ω1→ ω2 •Teoría lenguajes de programación - Tema 2 1.2.2 - Conceptos sobre gramáticas - Derivación •23 Derivación de cero o más pasos Sean la palabras ωi,…ωm ∈ ( N | Σ)* N ( N | Σ)* se dice que están en relación de derivación en la gramática G, si la palabra (ωi produce la palabra ωm ) o (ωm deriva de la palabra ωi) en cero o más derivaciones directas. ωi → ωj ; ωj → ωk ; ωk→ ωm El proceso de cero o más derivaciones se representa de forma: ωi →*ωm , de la misma manera para representar un proceso de una o más derivaciones es la siguiente: ωi →+ωm Lenguaje generado por una gramática Conjunto de palabras definidas sobre el alfabeto Σ, que se obtienen desde el símbolo inicial en un proceso de derivación de cero o más pasos. S → α1 → α2 → α3….→ x ; x ∈ Σ* L(G) = { x | x∈ Σ*, S→*x } •Teoría lenguajes de programación - Tema 2 1.2.3– Gramáticas formales -Lenguaje generado por una gramática •24 Forma sentencial – cualquier palabra obtenida de un proceso de derivación G1 = ( Σ = { a, b}, N = { S, A, B }, S, P) P: S → AB A → Aa |ε B → Bb |ε - Son formas sentenciales: S, AB, ε, a, b,…..,aaabb, - Si la forma sentencial está formada únicamente por símbolos terminales, se llama sentencia . Son sentencias: ε, a, b, aa,…..aaabb - A partir de la anterior definición, se puede decir que, el lenguaje generado por una gramática es el conjunto de sentencias que pueden obtenerse desde el símbolo inicial en un proceso de derivación de cero o más pasos Gramáticas equivalentes- son aquellas que generan el mismo lenguaje, G1 ,y G2 son gramáticas equivalentes G2 = ( Σ = { a, b }, N = { S, A, B }, S, P) P: S → aA| bB |ε A → Aa | ε | bB B → Bb | ε •Teoría lenguajes de programación - Tema 2 1.3.1 – Clasificación de las gramáticas formales - Tipos de gramáticas •25 Gramáticas de Tipo 3 (Gramáticas regulares). Pueden ser a su vez, de dos tipos: - Lineales por la derecha. sus producciones son de la forma: A → aB A→a A→ε en donde A, B ∈ N , a ∈ Σ Ejemplo: L= { an | n>=1} G = ( Σ= {a}, N={ S}, S, P) P: { S → a, S → aS } - Lineales por la izquierda. sus producciones son de la forma: A → Ba A→a A →ε ¸ en donde A, B ∈ N , a ∈ Σ Ejemplo: L= { an | n>=1} G = (Σ= {a}, N={ S}, S, P) P: { S → a, S → Sa } - Los lenguajes generados por estas gramáticas se llaman lenguajes regulares o lenguajes de tipo 3 •Teoría lenguajes de programación - Tema 2 1.3.1 – Clasificación de las gramáticas formales - Tipos de gramáticas •26 Gramáticas de Tipo 2 (Gramáticas libres del contexto). Las producciones son de la forma: A → α donde A ∈ N , α ∈ ( N | Σ)* Los lenguajes generados por este tipo de gramáticas se llaman lenguajes libres del contexto o lenguajes de tipo 2 y, todos forman la clase de lenguajes L2. Ejemplo: L= { an | n>=1} G= ( Σ= {a}, N={ S }, S, P) P: { S → a, S → aS } Ejemplo: L= { an bn | n>=1} G = ( Σ = {a}, N={ S }, S, P) P:{ S → ab, S → aSb} Gramáticas de Tipo 1 (Gramáticas sensibles al contexto). Las producciones son de la forma: α → β en donde α ∈ ( N | Σ)* N ( N | Σ)*, β ∈ ( N | Σ)* en donde debe cumplirse la siguiente condición : | α | ≤ | β | Ejemplo G = (Σ = {a, +, =}, N= { S, B }, S, P) P: { S → BSa | aSa | a+a=aa Ba → aB B+ → +a } •Teoría lenguajes de programación - Tema 2 1.3.1 –Clasificación de las gramáticas formales- Tipos de gramáticas •27 Gramáticas de Tipo 0 (Gramáticas con estructura de frase, no restringidas) Son gramáticas generales sin restricciones. Las producciones pueden ser de cualquier tipo permitido, es decir, de la forma: α → β , α є ( N | Σ) * N ( N | Σ)* β є ( N | Σ)* Los lenguajes generados por estas gramáticas son los lenguajes con estructura de frase, que se agrupan en la clase de lenguajes de tipo de L0. Estos lenguajes también se conocen como lenguajes recursivamente numerables. Relación de inclusión de las gramáticas: Tipo 3 ⊆ Tipo 2 ⊆ Tipo 1 ⊆ Tipo 0 Tipo 0 Tipo 1 Tipo 2 Tipo 3 •Teoría lenguajes de programación - Tema 2 1.3.2 – Clasificación de las gramáticas - Determinación del tipo de gramática •28 Determinación del tipo de una gramática Para determinar el tipo de una gramática G, basta por equiparar las producciones de dicha gramática a las producciones de las familias de los tipos de gramáticas, empezando por las producciones de gramáticas de tipo superior, de no ser así se baja de tipo, hasta encontrar un tipo que coincida con la dada. Ejemplo: G = (Σ ={a, b}, N={S, A, B}, S, P) P: S → AB A → Aa |ε B → Bb |ε La producción S → AB ∉ tipo 3, la gramática G no es de tipo 3 Todas las producciones: {S → AB, A → Aa |ε , B → Bb | ε} ∈ tipo 2, la gramática G anterior es de tipo 2 •Teoría lenguajes de programación - Tema 2 1.4.1 – Clasificación de los lenguajes formales- Tipos de lenguajes formales •29 Dado que un lenguaje, puede ser generado por varias gramáticas equivalentes que pueden ser de tipo diferentes, existe el problema de relacionar lenguajes con gramáticas, que tipo de gramática asociar al lenguaje. Para solucionar la anterior indecisión, podemos aplicar el siguiente axioma a la hora de determinar el tipo del lenguaje generado por la gramática: Un lenguaje es de tipo N (N=0, 1, 2, 3), si existe una gramática con un tipo N que lo genera y no otra de un tipo N superior. L0 L1 L2 L3 •Teoría lenguajes de programación - Tema 2 1.4.2 – Clasificación de los lenguajes formales Determinación del tipo de lenguaje •30 - Determinación del tipo de lenguaje Sea el lenguaje L (Σ) = { an bm | n, m ≥ 0 } = { a0b0, a0b1, a1b0, a1b1,…, lenguaje que puede ser generado entre otras por las gramáticas G1 y G2 Ejemplo: G1 = ( Σ = { a, b}, N = { S, A, B}, S, P) P: S → A B A → Aa |ε B → Bb |ε G2 = ( Σ = { a, b }, N = { S, A, B }, S, P) P: S → aA| bB |ε A → Aa |ε |bB B → Bb |ε El lenguaje será del tipo 3 •Teoría lenguajes de programación - Tema 2 Ejercicios •31 Sea ∑ un alfabeto cualquiera y L un lenguaje cualquiera definido sobre ∑ . Para cada una de las siguientes igualdades, justificar si siempre son ciertas o no. L*=L+ ∑*=L+ ∑+=L+ L+=L*-ε ∑+=∑*- ε ∑*=(∑*)-1 Φ *= ε=Φ+ L =∑*- L = L*-L (L*)*=(L+)*=(L*)+=L*=(L+)+ (L*)I=(LI)* L1-(∑*-L1)=L1 L1-∑*-L1= Φ •Teoría lenguajes de programación - Tema 2 Ejercicios •32 1. Dados los siguientes lenguajes formales definidos sobre el alfabeto ∑= {a, b}: L0={} L1={ε} L2={a} L3={a, b} L4={(a b)n | 0<= n < 2 } L5={am bl | m, l >= 0 } L6={an bn | n>=0 } L7 ={lenguaje formado por las palabras que tienen un número impar de aes} Determinar para cada uno de ellos L0, L3 y L* 2. Sean las siguientes operaciones con los anteriores lenguajes formales: L0n L1n, L0n| L1n, L3n L1n, L3n | L1n, L3n L0n, L3n| L0n, L7n ∩ L5n, L7n| L5n , L0n , L3n , L7n Determinar qué lenguajes definen suponiendo que n = 0. Determinar qué lenguajes definen suponiendo que n = 3 Determinar qué lenguajes definen suponiendo que n = * •Teoría lenguajes de programación - Tema 2 Ejercicios •33 3. Sea L1 un lenguaje definido sobre un alfabeto Σ ={a, b} formado por las palabras que cumplen la siguiente igualdad L1= { an | n>=1} . Ejemplos válidos: a, aa, aaa, aaaa, .. Sea L2 un lenguaje definido sobre un alfabeto Σ ={a, b} formado por las palabras que cumplen la siguiente igualdad L2= { bn | n>=0} . Ejemplos válidos: ε, b, bb, bbb, …. Justificar si se cumplen o no las siguientes igualdades: L1 | L2=Σ* , L1.L2=L2.L1 , L1*=Σ* , L1=L2 complementario •Teoría lenguajes de programación - Tema 2 Ejercicios •34 4. Sea L1 un lenguaje definido sobre un alfabeto Σ ={a, b} formado por las palabras que cumplen la siguiente igualdad L1= { longitud par} . Ejemplos válidos: ε, aa, ba, abbb, .. Sea L2 un lenguaje definido sobre un alfabeto Σ ={a, b} formado por las palabras que cumplen la siguiente igualdad L2= { longitud impar} . Ejemplos válidos: b, abb, bbb, aaa,…. Justificar si se cumplen o no las siguientes igualdades: L1 | L2=Σ* , L1.L2=L2.L1 , L1*=Σ* , L1=L2 complementario •Teoría lenguajes de programación - Tema 2 Ejercicios •35 5. Sea L1 un lenguaje definido sobre un alfabeto Σ ={a, b} formado por las palabras que tienen un número impar de símbolos a y como máximo dos símbolos b consecutivos. Ejemplos válidos: a, aaba, aaabbaba, babbabbab Ejemplos no válidos: ε, aabbba, bb, abbabbaba Sea L2 un lenguaje definido sobre un alfabeto Σ ={a, b} formado por las palabras que tienen un número par de símbolos a (el 0 se considera un número par) y como máximo dos símbolos b consecutivos. Ejemplos válidos: ε, aa, aaaba, aaabbaaba, baabbabbab, bb Ejemplos no válidos: a, aabbbaa, aabbabbaba Justificar si se cumplen o no las siguientes igualdades: L1 | L2=Σ* , L1.L2=L2.L1 , L1*=Σ* , L1=L2 complementario •Teoría lenguajes de programación - Tema 2 Ejercicios •36 5. Definir una gramática regular para especificar cada uno de los siguientes lenguajes: El lenguaje de los identificadores, definido por cadenas formadas por una secuencia de letras minúsculas (al menos una) dentro del rango a..d, y precedidas por el carácter almohadilla #. L ={ a (b|c)n a | n>=0}: cadenas que comienzan y finalizan por a y entre ambas aparece un número indeterminado de símbolos b o c en número >=0. El lenguaje de las constantes cadena de caracteres, definido sobre un alfabeto. Una constante cadena se representa delimitada por dobles comillas (“..”) y entre ambas puede venir una secuencia indeterminada (cero o más) formada por dígitos o cualquiera de las letras minúsculas a y b. Ejemplos: “4abab4”, “a55b”, “”. L ={ (a|b)m c (a|b)n | m>0, n=1 ó n=0}: cadenas que comienzan por secuencias creadas a partir de a o b con longitud m>0, contienen obligatoriamente una c y finalizan por a o por b en número n que puede ser 0 o 1. Ejemplos: ababbac, bababbaaca, ac •Teoría lenguajes de programación - Tema 2 Ejercicios •37 6. Obtener una gramática para cada uno de los siguientes lenguajes: 1) 2) 3) 4) 5) 6) 7) 8) 7. ∑= {a, b, c}, L = {an bm cn | n, m >= 1} ∑= {a, b, c}, L = {an bm cn+2m | n >=0, m >= 1} ∑= {a, b, c}, L = {an bn+m cm | n >= 1, m >= 0} ∑= {a, b}, L = {an bm | n >= m >= 1} ∑= {a, b}, L = {an bm | n > m >= 0} ∑ = {a, b, c}, L = {am bn ck | m > n + k ; n, k >=0} ∑ = {a, b}, L = { an bm | m <= n <= 2m ; n, m >=0} ∑ = {a, b}, L = { an bm | n <>m ; n, m >0} Construir una gramática que especifique el siguiente lenguaje: L = { w ∈ {0, 1, 2}* | w contiene exactamente dos o tres símbolos 0 en cualquier posición}. ¿Sería posible obtener una gramática regular o de tipo 3? 8. Dado el alfabeto Σ= {a, +, = } y el siguiente lenguaje: L={an+am=an+m | n, m > 0}, construir una gramática de tipo 2 que defina dicho lenguaje. •Teoría lenguajes de programación - Tema 2 Ejercicios •38 Sea el lenguaje de sumas de números naturales sobre Σ = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, + }. Ejemplos de palabras del lenguaje: 2+67+9870 ó 35 Ejemplos de palabras no válidas: 34+ ó 34++23 Representar mediante una gramática de tipo 2 en notación BNF los siguientes lenguajes: Sea L1 el lenguaje de sumas en el que los números naturales no pueden tener ceros a la izquierda. El número 0 se representará por un único cero, nunca por una secuencia de ceros. Ejemplo:10+0 Ejemplo de palabra no válida: 03+12 Sea L2 el lenguaje de sumas en el que los números naturales pueden empezar por 0, aunque no sea el número 0, pero en cada suma se cumple siempre la condición de que el primer y el último número tienen siempre la misma longitud (al menos habrá dos números). Ejemplo: 10+1+01 Ejemplos de palabras no válidas: 03+129 , 1 Sea L3 el lenguaje de sumas en el que los números naturales pueden empezar por 0, aunque no sea el número 0, pero en el que se cumple la condición de que al menos dos números tienen la misma longitud. Ejemplo: 0503+30+450+89+203+03 •Teoría lenguajes de programación - Tema 2 Ejercicios •39 Dadas las siguientes gramáticas: G1 = ( Σ = { 0, 1}, N = { S, A, B}, S, P) S ──> 0 S | A A ──> 0 B | 0 B ──> 1A G2 = ( Σ = { 0, 1}, N = { S, A, B}, S, P) S ──> 0 A | 0 A ──> 0 A | 1B | 0 B ──> 1B | 1 G3 = ( Σ = { a, b, c }, N = { S, A, B, C}, S, P) S ──> abA | bbB A ──> bC B ──> a C ──> cS | ε Obtener el lenguaje que generan •Teoría lenguajes de programación - Tema 2