Lenguaje generado por una gramática

Se dice que el conjunto de todas las cadenas que se pueden derivar de una gramática es el lenguaje generado a partir de esa gramática. Un lenguaje generado por una gramáticaG es un subconjunto definido formalmente por

L (G) = {W | W ∈ ∑ *, S G W}

Si L(G1) = L(G2), la gramática G1 es equivalente a la gramática G2.

Ejemplo

Si hay una gramática

G: N = {S, A, B} T = {a, b} P = {S → AB, A → a, B → b}

aquí S produce ABy podemos reemplazar A por ay B por b. Aquí, la única cadena aceptada esab, es decir,

L (G) = {ab}

Ejemplo

Supongamos que tenemos la siguiente gramática:

G: N = {S, A, B} T = {a, b} P = {S → AB, A → aA | a, B → bB | b}

El lenguaje generado por esta gramática -

L (G) = {ab, a 2 b, ab 2 , a 2 b 2 , ………}

= {a m b n | m ≥ 1 yn ≥ 1}

Construcción de una gramática que genera un lenguaje

Consideraremos algunos idiomas y los convertiremos en una gramática G que produce esos idiomas.

Ejemplo

Problem- Suponga, L (G) = {a m b n | m ≥ 0 yn> 0}. Tenemos que averiguar la gramáticaG que produce L(G).

Solution

Dado que L (G) = {a m b n | m ≥ 0 y n> 0}

el conjunto de cadenas aceptadas se puede reescribir como -

L (G) = {b, ab, bb, aab, abb, …….}

Aquí, el símbolo de inicio debe tomar al menos una 'b' precedida por cualquier número de 'a', incluido el nulo.

Para aceptar el conjunto de cadenas {b, ab, bb, aab, abb, …….}, Hemos tomado las producciones -

S → aS, S → B, B → by B → bB

S → B → b (aceptado)

S → B → bB → bb (aceptado)

S → aS → aB → ab (Aceptado)

S → aS → aaS → aaB → aab (Aceptado)

S → aS → aB → abB → abb (Aceptado)

Por lo tanto, podemos probar que cada cadena en L (G) es aceptada por el lenguaje generado por el conjunto de producción.

De ahí la gramática:

G: ({S, A, B}, {a, b}, S, {S → aS | B, B → b | bB})

Ejemplo

Problem- Suponga, L (G) = {a m b n | m> 0 y n ≥ 0}. Tenemos que averiguar la gramática G que produce L (G).

Solution -

Dado que L (G) = {a m b n | m> 0 y n ≥ 0}, el conjunto de cadenas aceptadas se puede reescribir como -

L (G) = {a, aa, ab, aaa, aab, abb, …….}

Aquí, el símbolo de inicio debe tomar al menos una 'a' seguida de cualquier número de 'b', incluido el nulo.

Para aceptar el conjunto de cadenas {a, aa, ab, aaa, aab, abb, …….}, Hemos tomado las producciones -

S → aA, A → aA, A → B, B → bB, B → λ

S → aA → aB → aλ → a (Aceptado)

S → aA → aaA → aaB → aaλ → aa (Aceptado)

S → aA → aB → abB → abλ → ab (Aceptado)

S → aA → aaA → aaaA → aaaB → aaaλ → aaa (Aceptado)

S → aA → aaA → aaB → aabB → aabλ → aab (Aceptado)

S → aA → aB → abB → abbB → abbλ → abb (Aceptado)

Por lo tanto, podemos probar que cada cadena en L (G) es aceptada por el lenguaje generado por el conjunto de producción.

De ahí la gramática:

G: ({S, A, B}, {a, b}, S, {S → aA, A → aA | B, B → λ | bB})