Σ - L.P.S.I.

Anuncio
•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
Descargar