Linguaggio generato da una grammatica
Si dice che l'insieme di tutte le stringhe che possono essere derivate da una grammatica sia il linguaggio generato da quella grammatica. Una lingua generata da una grammaticaG è un sottoinsieme definito formalmente da
L (G) = {W | W ∈ ∑ *, S ⇒ G W}
Se L(G1) = L(G2), la grammatica G1 è equivalente alla grammatica G2.
Esempio
Se c'è una grammatica
G: N = {S, A, B} T = {a, b} P = {S → AB, A → a, B → b}
Qui S produce ABe possiamo sostituire A di a, e B di b. Qui, l'unica stringa accettata èab, cioè
L (G) = {ab}
Esempio
Supponiamo di avere la seguente grammatica:
G: N = {S, A, B} T = {a, b} P = {S → AB, A → aA | a, B → bB | b}
La lingua generata da questa grammatica -
L (Sol) = {ab, a 2 b, ab 2 , a 2 b 2 , ………}
= {a m b n | m ≥ 1 en ≥ 1}
Costruzione di una grammatica che genera una lingua
Considereremo alcune lingue e le convertiremo in una grammatica G che produce quelle lingue.
Esempio
Problem- Supponiamo che L (G) = {a m b n | m ≥ 0 e n> 0}. Dobbiamo scoprire la grammaticaG che produce L(G).
Solution
Poiché L (G) = {a m b n | m ≥ 0 e n> 0}
l'insieme di stringhe accettate può essere riscritto come -
L (G) = {b, ab, bb, aab, abb, …….}
Qui, il simbolo di inizio deve prendere almeno una "b" preceduta da un numero qualsiasi di "a" incluso null.
Per accettare l'insieme di stringhe {b, ab, bb, aab, abb, …….}, Abbiamo preso le produzioni -
S → aS, S → B, B → be B → bB
S → B → b (Accettato)
S → B → bB → bb (Accettato)
S → aS → aB → ab (Accettato)
S → aS → aaS → aaB → aab (Accettato)
S → aS → aB → abB → abb (Accettato)
Quindi, possiamo provare che ogni singola stringa in L (G) è accettata dal linguaggio generato dall'insieme di produzione.
Da qui la grammatica -
G: ({S, A, B}, {a, b}, S, {S → aS | B, B → b | bB})
Esempio
Problem- Supponiamo che L (G) = {a m b n | m> 0 e n ≥ 0}. Dobbiamo scoprire la grammatica G che produce L (G).
Solution -
Poiché L (G) = {a m b n | m> 0 en ≥ 0}, l'insieme di stringhe accettate può essere riscritto come -
L (G) = {a, aa, ab, aaa, aab, abb, …….}
Qui, il simbolo di inizio deve prendere almeno una "a" seguita da un numero qualsiasi di "b" incluso null.
Per accettare l'insieme di stringhe {a, aa, ab, aaa, aab, abb, …….}, Abbiamo preso le produzioni -
S → aA, A → aA, A → B, B → bB, B → λ
S → aA → aB → aλ → a (Accettato)
S → aA → aaA → aaB → aaλ → aa (Accettato)
S → aA → aB → abB → abλ → ab (Accettato)
S → aA → aaA → aaaA → aaaB → aaaλ → aaa (Accettato)
S → aA → aaA → aaB → aabB → aabλ → aab (Accettato)
S → aA → aB → abB → abbB → abbλ → abb (Accettato)
Quindi, possiamo provare che ogni singola stringa in L (G) è accettata dal linguaggio generato dall'insieme di produzione.
Da qui la grammatica -
G: ({S, A, B}, {a, b}, S, {S → aA, A → aA | B, B → λ | bB})