Грамматика языка и порождающие грамматики. Сказ о «правильных» скобочках

Предыдущая статья: Что такое язык программирования? Не спешим отвечать, знакомимся с определением формальных языков.

Небольшое добавление к предыдущей статье. Запись языка над алфавитом Σ принято записывать так:

L(Σ) = { α, …}

Поставим задачу описать язык «правильных» скобочек, то есть множество всех цепочек, где наши любимые рунетом цепочки символов ))))))))) без открывающих скобочек не входит в этот язык, эх … (((((((((, ну и закрывающих. Но мы то знаем какие «правильные»?

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

Давайте знакомится с формулой порождающей грамматики:

G = (T, N, P, S) - теперь по порядку, что есть что.

Т и N - это алфавиты, Т - основных символов их ещё называют терминалами, а N - вспомогательных символов, нетерминалы.

Немного о значении слова терминал, от лат. terminus — предел, конец.

P - конечное множество правил вывода (переходов), вида: α → β, где α и β цепочки из символов алфавитов Т и N.

S - начальный нетерминал, с чего начинаются все выводы цепочек языка.

Уже появились мысли, как записать язык «правильных» скобочек?

Не мучайтесь, вот ответ: G = ( {(, )}, {S}, {S → (S), S →SS, S → ε}, S)

Пример вывода:

S => (S) => (SS) => ((S)(S)) => (()())

Результат вывода называют сентенцией (от sentence — предложение), то что может предложить наша грамматика.

Итого, таким образом с помощью нашей Gрамматики, мы можем вывести некое множество цепочек (предложений, сентенций) над алфавитом Т, которое составляет наш язык L(T).

А вот о типах грамматик, о тех что Хомски рассказывает, мы поговорим чуть позже. Чтожъ, мои милые братцы и сестрицы, а на том пока.

Лига образования

4.5K постов21.9K подписчиков

Добавить пост

Правила сообщества

Публиковать могут пользователи с любым рейтингом. Однако мы хотим, чтобы соблюдались следующие условия:


ДЛЯ АВТОРОВ:


Приветствуются:

-уважение к читателю и открытость

-желание учиться

Не рекомендуются:

-публикация недостоверной информации


ДЛЯ ЧИТАТЕЛЕЙ:


Приветствуются:

-конструктивные дискуссии на тему постов

Не рекомендуются:

-личные оскорбления и провокации

-неподкрепленные фактами утверждения


В этом сообществе мы все союзники - мы все хотим учиться! :)