Формальная грамматика

Поделись знанием:
Перейти к: навигация, поиск
Генеративная лингвистика

Формальная грамматика или просто грамматика в теории формальных языков — способ описания формального языка, то есть выделения некоторого подмножества из множества всех слов некоторого конечного алфавита. Различают порождающие и распознающие (или аналитические) грамматики — первые задают правила, с помощью которых можно построить любое слово языка, а вторые позволяют по данному слову определить, входит ли оно в язык или нет.





Термины

  • Терминал (терминальный символ) — объект, непосредственно присутствующий в словах языка, соответствующего грамматике, и имеющий конкретное, неизменяемое значение (обобщение понятия «буквы»). В формальных языках, используемых на компьютере, в качестве терминалов обычно берут все или часть стандартных символов ASCII — латинские буквы, цифры и спец. символы.
  • Нетерминал (нетерминальный символ) — объект, обозначающий какую-либо сущность языка (например: формула, арифметическое выражение, команда) и не имеющий конкретного символьного значения.

Порождающие грамматики

Словами языка, заданного грамматикой, являются все последовательности терминалов, выводимые (порождаемые) из начального нетерминала по правилам вывода.

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

Итак, грамматика определяется следующими характеристиками:

  • <math>\Sigma</math> — набор (алфавит) терминальных символов
  • N — набор (алфавит) нетерминальных символов
  • P — набор правил вида: «левая часть» <math>\rightarrow</math> «правая часть», где:
    • «левая часть» — непустая последовательность терминалов и нетерминалов, содержащая хотя бы один нетерминал
    • «правая часть» — любая последовательность терминалов и нетерминалов
  • S — стартовый (или начальный) символ грамматики из набора нетерминалов.

Вывод

Выводом называется последовательность строк, состоящих из терминалов и нетерминалов, где первой идет строка, состоящая из одного стартового нетерминала, а каждая последующая строка получена из предыдущей путём замены некоторой подстроки по одному (любому) из правил. Конечной строкой является строка, полностью состоящая из терминалов, и следовательно являющаяся словом языка.

Существование вывода для некоторого слова является критерием его принадлежности к языку, определяемому данной грамматикой.

Типы грамматик

По иерархии Хомского, грамматики делятся на 4 типа, каждый последующий является более ограниченным подмножеством предыдущего (но и легче поддающимся анализу):

Кроме того, выделяют:

  • Неукорачивающиеся грамматики. Каждое правило такой грамматики имеет вид <math>\alpha \rightarrow \beta</math>, где <math>|\alpha| \leqslant |\beta|</math>. Длина правой части правила не меньше длины левой[1].
  • Линейные грамматики. Каждое правило такой грамматики имеет вид <math>A \rightarrow uBv</math>, или <math>A \rightarrow u</math>, то есть в правой части правила может содержаться не более одного вхождения нетерминала[2].

Применение

Пример — арифметические выражения

Рассмотрим простой язык, определяющий ограниченное подмножество арифметических формул, состоящих из натуральных чисел, скобок и знаков арифметических действий. Стоит заметить, что здесь в каждом правиле с левой стороны от стрелки <math>\Rightarrow</math> стоит только один нетерминальный символ. Такие грамматики называются контекстно-свободными.

Терминальный алфавит:

<math>\Sigma</math> = {'0','1','2','3','4','5','6','7','8','9','+','-','*','/','(',')'}

Нетерминальный алфавит:

  { ФОРМУЛА, ЗНАК, ЧИСЛО, ЦИФРА }

Правила:

1. ФОРМУЛА <math>\to</math> ФОРМУЛА ЗНАК ФОРМУЛА                (формула есть две формулы, соединенные знаком)
2. ФОРМУЛА <math>\to</math> ЧИСЛО                               (формула есть число)
3. ФОРМУЛА <math>\to</math> ( ФОРМУЛА )                         (формула есть формула в скобках)
4. ЗНАК <math>\to</math> + | - | * | /                          (знак есть плюс или минус, или умножить, или разделить)
5. ЧИСЛО <math>\to</math> ЦИФРА                                 (число есть цифра)
6. ЧИСЛО <math>\to</math> ЧИСЛО ЦИФРА                           (число есть число и цифра)
7. ЦИФРА <math>\to</math> 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 (цифра есть 0 или 1, или ... 9 )

Начальный нетерминал:

ФОРМУЛА

Вывод:

Выведем формулу (12+5) с помощью перечисленных правил вывода. Для наглядности, стороны каждой замены показаны попарно, в каждой паре заменяемая часть подчеркнута.

ФОРМУЛА <math>\stackrel{3}{\to}</math> (ФОРМУЛА)
(ФОРМУЛА) <math>\stackrel{1}{\to}</math> (ФОРМУЛА ЗНАК ФОРМУЛА)
(ФОРМУЛА ЗНАК ФОРМУЛА) <math>\stackrel{4}{\to}</math> (ФОРМУЛА + ФОРМУЛА)
(ФОРМУЛА + ФОРМУЛА) <math>\stackrel{2}{\to}</math> (ФОРМУЛА + ЧИСЛО)
(ФОРМУЛА + ЧИСЛО) <math>\stackrel{5}{\to}</math> (ФОРМУЛА + ЦИФРА)
(ФОРМУЛА + ЦИФРА) <math>\stackrel{7}{\to}</math> (ФОРМУЛА + 5)
(ФОРМУЛА + 5) <math>\stackrel{2}{\to}</math> (ЧИСЛО + 5)
(ЧИСЛО + 5) <math>\stackrel{6}{\to}</math> (ЧИСЛО ЦИФРА + 5)
(ЧИСЛО ЦИФРА + 5) <math>\stackrel{5}{\to}</math> (ЦИФРА ЦИФРА + 5)
(ЦИФРА ЦИФРА + 5) <math>\stackrel{7}{\to}</math> (1 ЦИФРА + 5)
(1 ЦИФРА + 5) <math>\stackrel{7}{\to}</math> (1 2 + 5)


Аналитические грамматики

Порождающие грамматики — не единственный вид грамматик, однако наиболее распространенный в приложениях к программированию. В отличие от порождающих грамматик, аналитическая (распознающая) грамматика задает алгоритм, позволяющий определить, принадлежит ли данное слово языку. Например, любой регулярный язык может быть распознан при помощи грамматики, задаваемой конечным автоматом, а любая контекстно-свободная грамматика — с помощью автомата со стековой памятью. Если слово принадлежит языку, то такой автомат строит его вывод в явном виде, что позволяет анализировать семантику этого слова.

См. также

Напишите отзыв о статье "Формальная грамматика"

Примечания

Литература

  • Белоусов А. И., Ткачев С. Б. Дискретная математика. — М.: МГТУ, 2006. — 743 с. — ISBN 5-7038-2886-4.
  • Гладкий А. В. Формальные грамматики и языки. — М.: Наука, 1973.
  • Касьянов В. Н. Лекции по теории формальных языков, автоматов и сложности вычислений. — Новосибирск: НГУ, 1995. — 112 с.
  • Хомский Н., Миллер Дж. Введение в формальный анализ естественных языков // Кибернетический сборник / Под ред. А.А.Ляпунова и О.Б.Лупанова. — М.: Мир, 1965.
  • Гросс М., Лантен А. Теория формальных грамматик. — М.: Мир, 1971. — 296 с.

Отрывок, характеризующий Формальная грамматика

«Ну, за что они меня?…» думал про себя Тушин, со страхом глядя на начальника.
– Я… ничего… – проговорил он, приставляя два пальца к козырьку. – Я…
Но полковник не договорил всего, что хотел. Близко пролетевшее ядро заставило его, нырнув, согнуться на лошади. Он замолк и только что хотел сказать еще что то, как еще ядро остановило его. Он поворотил лошадь и поскакал прочь.
– Отступать! Все отступать! – прокричал он издалека. Солдаты засмеялись. Через минуту приехал адъютант с тем же приказанием.
Это был князь Андрей. Первое, что он увидел, выезжая на то пространство, которое занимали пушки Тушина, была отпряженная лошадь с перебитою ногой, которая ржала около запряженных лошадей. Из ноги ее, как из ключа, лилась кровь. Между передками лежало несколько убитых. Одно ядро за другим пролетало над ним, в то время как он подъезжал, и он почувствовал, как нервическая дрожь пробежала по его спине. Но одна мысль о том, что он боится, снова подняла его. «Я не могу бояться», подумал он и медленно слез с лошади между орудиями. Он передал приказание и не уехал с батареи. Он решил, что при себе снимет орудия с позиции и отведет их. Вместе с Тушиным, шагая через тела и под страшным огнем французов, он занялся уборкой орудий.
– А то приезжало сейчас начальство, так скорее драло, – сказал фейерверкер князю Андрею, – не так, как ваше благородие.
Князь Андрей ничего не говорил с Тушиным. Они оба были и так заняты, что, казалось, и не видали друг друга. Когда, надев уцелевшие из четырех два орудия на передки, они двинулись под гору (одна разбитая пушка и единорог были оставлены), князь Андрей подъехал к Тушину.
– Ну, до свидания, – сказал князь Андрей, протягивая руку Тушину.
– До свидания, голубчик, – сказал Тушин, – милая душа! прощайте, голубчик, – сказал Тушин со слезами, которые неизвестно почему вдруг выступили ему на глаза.


Ветер стих, черные тучи низко нависли над местом сражения, сливаясь на горизонте с пороховым дымом. Становилось темно, и тем яснее обозначалось в двух местах зарево пожаров. Канонада стала слабее, но трескотня ружей сзади и справа слышалась еще чаще и ближе. Как только Тушин с своими орудиями, объезжая и наезжая на раненых, вышел из под огня и спустился в овраг, его встретило начальство и адъютанты, в числе которых были и штаб офицер и Жерков, два раза посланный и ни разу не доехавший до батареи Тушина. Все они, перебивая один другого, отдавали и передавали приказания, как и куда итти, и делали ему упреки и замечания. Тушин ничем не распоряжался и молча, боясь говорить, потому что при каждом слове он готов был, сам не зная отчего, заплакать, ехал сзади на своей артиллерийской кляче. Хотя раненых велено было бросать, много из них тащилось за войсками и просилось на орудия. Тот самый молодцоватый пехотный офицер, который перед сражением выскочил из шалаша Тушина, был, с пулей в животе, положен на лафет Матвевны. Под горой бледный гусарский юнкер, одною рукой поддерживая другую, подошел к Тушину и попросился сесть.
– Капитан, ради Бога, я контужен в руку, – сказал он робко. – Ради Бога, я не могу итти. Ради Бога!
Видно было, что юнкер этот уже не раз просился где нибудь сесть и везде получал отказы. Он просил нерешительным и жалким голосом.
– Прикажите посадить, ради Бога.
– Посадите, посадите, – сказал Тушин. – Подложи шинель, ты, дядя, – обратился он к своему любимому солдату. – А где офицер раненый?
– Сложили, кончился, – ответил кто то.
– Посадите. Садитесь, милый, садитесь. Подстели шинель, Антонов.
Юнкер был Ростов. Он держал одною рукой другую, был бледен, и нижняя челюсть тряслась от лихорадочной дрожи. Его посадили на Матвевну, на то самое орудие, с которого сложили мертвого офицера. На подложенной шинели была кровь, в которой запачкались рейтузы и руки Ростова.
– Что, вы ранены, голубчик? – сказал Тушин, подходя к орудию, на котором сидел Ростов.
– Нет, контужен.
– Отчего же кровь то на станине? – спросил Тушин.
– Это офицер, ваше благородие, окровянил, – отвечал солдат артиллерист, обтирая кровь рукавом шинели и как будто извиняясь за нечистоту, в которой находилось орудие.
Насилу, с помощью пехоты, вывезли орудия в гору, и достигши деревни Гунтерсдорф, остановились. Стало уже так темно, что в десяти шагах нельзя было различить мундиров солдат, и перестрелка стала стихать. Вдруг близко с правой стороны послышались опять крики и пальба. От выстрелов уже блестело в темноте. Это была последняя атака французов, на которую отвечали солдаты, засевшие в дома деревни. Опять всё бросилось из деревни, но орудия Тушина не могли двинуться, и артиллеристы, Тушин и юнкер, молча переглядывались, ожидая своей участи. Перестрелка стала стихать, и из боковой улицы высыпали оживленные говором солдаты.
– Цел, Петров? – спрашивал один.
– Задали, брат, жару. Теперь не сунутся, – говорил другой.
– Ничего не видать. Как они в своих то зажарили! Не видать; темь, братцы. Нет ли напиться?
Французы последний раз были отбиты. И опять, в совершенном мраке, орудия Тушина, как рамой окруженные гудевшею пехотой, двинулись куда то вперед.
В темноте как будто текла невидимая, мрачная река, всё в одном направлении, гудя шопотом, говором и звуками копыт и колес. В общем гуле из за всех других звуков яснее всех были стоны и голоса раненых во мраке ночи. Их стоны, казалось, наполняли собой весь этот мрак, окружавший войска. Их стоны и мрак этой ночи – это было одно и то же. Через несколько времени в движущейся толпе произошло волнение. Кто то проехал со свитой на белой лошади и что то сказал, проезжая. Что сказал? Куда теперь? Стоять, что ль? Благодарил, что ли? – послышались жадные расспросы со всех сторон, и вся движущаяся масса стала напирать сама на себя (видно, передние остановились), и пронесся слух, что велено остановиться. Все остановились, как шли, на середине грязной дороги.
Засветились огни, и слышнее стал говор. Капитан Тушин, распорядившись по роте, послал одного из солдат отыскивать перевязочный пункт или лекаря для юнкера и сел у огня, разложенного на дороге солдатами. Ростов перетащился тоже к огню. Лихорадочная дрожь от боли, холода и сырости трясла всё его тело. Сон непреодолимо клонил его, но он не мог заснуть от мучительной боли в нывшей и не находившей положения руке. Он то закрывал глаза, то взглядывал на огонь, казавшийся ему горячо красным, то на сутуловатую слабую фигуру Тушина, по турецки сидевшего подле него. Большие добрые и умные глаза Тушина с сочувствием и состраданием устремлялись на него. Он видел, что Тушин всею душой хотел и ничем не мог помочь ему.
Со всех сторон слышны были шаги и говор проходивших, проезжавших и кругом размещавшейся пехоты. Звуки голосов, шагов и переставляемых в грязи лошадиных копыт, ближний и дальний треск дров сливались в один колеблющийся гул.
Теперь уже не текла, как прежде, во мраке невидимая река, а будто после бури укладывалось и трепетало мрачное море. Ростов бессмысленно смотрел и слушал, что происходило перед ним и вокруг него. Пехотный солдат подошел к костру, присел на корточки, всунул руки в огонь и отвернул лицо.
– Ничего, ваше благородие? – сказал он, вопросительно обращаясь к Тушину. – Вот отбился от роты, ваше благородие; сам не знаю, где. Беда!
Вместе с солдатом подошел к костру пехотный офицер с подвязанной щекой и, обращаясь к Тушину, просил приказать подвинуть крошечку орудия, чтобы провезти повозку. За ротным командиром набежали на костер два солдата. Они отчаянно ругались и дрались, выдергивая друг у друга какой то сапог.
– Как же, ты поднял! Ишь, ловок, – кричал один хриплым голосом.
Потом подошел худой, бледный солдат с шеей, обвязанной окровавленною подверткой, и сердитым голосом требовал воды у артиллеристов.
– Что ж, умирать, что ли, как собаке? – говорил он.
Тушин велел дать ему воды. Потом подбежал веселый солдат, прося огоньку в пехоту.
– Огоньку горяченького в пехоту! Счастливо оставаться, землячки, благодарим за огонек, мы назад с процентой отдадим, – говорил он, унося куда то в темноту краснеющуюся головешку.
За этим солдатом четыре солдата, неся что то тяжелое на шинели, прошли мимо костра. Один из них споткнулся.
– Ишь, черти, на дороге дрова положили, – проворчал он.