Язык, порожденный грамматикой

Набор всех строк, которые могут быть получены из грамматики, называется языком, созданным из этой грамматики. Язык, созданный грамматикойG является подмножеством, формально определяемым

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

Если L(G1) = L(G2), грамматика G1 эквивалентно грамматике G2.

пример

Если есть грамматика

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

Вот S производит AB, и мы можем заменить A по a, и B по b. Здесь единственной допустимой строкой являетсяab, т.е.

L (G) = {ab}

пример

Предположим, у нас есть следующая грамматика -

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

Язык, порожденный этой грамматикой -

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

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

Построение грамматики, порождающей язык

Мы рассмотрим некоторые языки и преобразуем это в грамматику G, которая производит эти языки.

пример

Problem- Предположим, что L (G) = {a m b n | m ≥ 0 и n> 0}. Нам нужно узнать грамматикуG который производит L(G).

Solution

Поскольку L (G) = {a m b n | m ≥ 0 и n> 0}

принятый набор строк можно переписать как -

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

Здесь начальный символ должен содержать как минимум одну букву «b», перед которой стоит любое количество «а», включая ноль.

Чтобы принять набор строк {b, ab, bb, aab, abb, …….}, Мы взяли продукцию -

S → aS, S → B, B → b и B → bB

S → B → b (принято)

S → B → bB → bb (принято)

S → aS → aB → ab (принято)

S → aS → aaS → aaB → aab (принято)

S → aS → aB → abB → abb (принято)

Таким образом, мы можем доказать, что каждая строка в L (G) принимается языком, порожденным производственным набором.

Отсюда грамматика -

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

пример

Problem- Предположим, что L (G) = {a m b n | m> 0 и n ≥ 0}. Нам нужно найти грамматику G, которая дает L (G).

Solution -

Поскольку L (G) = {a m b n | m> 0 и n ≥ 0}, набор принятых строк можно переписать как -

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

Здесь начальный символ должен содержать как минимум одну букву «a», за которой следует любое количество «b», включая ноль.

Чтобы принять набор строк {a, aa, ab, aaa, aab, abb, …….}, Мы взяли продукцию -

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

S → aA → aB → aλ → a (принято)

S → aA → aaA → aaB → aaλ → aa (принято)

S → aA → aB → abB → abλ → ab (принято)

S → aA → aaA → aaaA → aaaB → aaaλ → aaa (Принято)

S → aA → aaA → aaB → aabB → aabλ → aab (принято)

S → aA → aB → abB → abbB → abbλ → abb (Принято)

Таким образом, мы можем доказать, что каждая строка в L (G) принимается языком, порожденным производственным набором.

Отсюда грамматика -

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