Опубликован: 23.10.2009 | Доступ: свободный | Студентов: 2795 / 93 | Оценка: 4.28 / 4.22 | Длительность: 17:27:00
Специальности: Программист
Лекция 10:

Описание формальных грамматик

< Лекция 9 || Лекция 10: 123 || Лекция 11 >

10.5. Примеры грамматик

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

Примечание. При описании грамматик в этом подразделе используются материалы лекции 12.

10.5.1. Грамматика для построения идентификаторов

В практике программирования часто используется понятие идентификатора. Дадим ему определение.

О п р е д е л е н и е. Идентификатор - это цепочка алфавитно-цифровых знаков, начинающихся с латинской буквы.

Например, следующие цепочки - идентификаторы:

A, a, i, izh003, ai, b12;

а следующие - не идентификаторы:

1, 1a, .htaccess, b[1,2], a_and_i, a&i.

Грамматика, порождающая любые идентификаторы, представлена ниже (Пример 04).

[Пример 04]

<идентификатор> ::= <alphabet>{<alphanum>}
<alphanum> ::= <num>|<alphabet>
<alphabet> ::= [A-Za-z]
<num> ::= [0-9]

В принципе, для реализации грамматики из [примера 04] достаточно использовать сканер лексем (см. раздел 4 "Грамматика" ).

10.5.2. Построение чисел

При разборе текстов часто бывает необходимо отделить числа от других слов. Сложность выделения заключается в том, что числа бывают не только натуральными, но могут быть представлены в научном формате с плавающей точкой (см. раздел 4 "Типы данных" ). Программа-сканер, реализующая такое выделение, приведена в приложении II к "Грамматика" . Ниже представлена грамматика, используемая им при программировании сканера:

[Пример 05]

<число> := <научный формат> | <фиксированная точка> | <целое число>
<научный формат> ::= <фиксированная точка><порядок>
<фиксированная точка> ::= <целое число>.<целое без знака>
<целое число> ::= [(+|-)]<целое без знака>
<порядок> ::= (e|E)<целое число>
<целое без знака> ::= {(0|1|2|3|4|5|6|7|8|9)}+

10.5.3. Разбор арифметических выражений

Запишем грамматику, похожую на приведенную в примере 03, но оперирующую с большим числом выражений:

[Пример 06]

<врж> ::= <терм>|<врж>+<терм>|<врж>-<терм>
<терм> ::= <множ>|<терм>*<множ>|<терм>/<множ>
<множ> ::= <степ>|<множ>^<степ>
<степ> ::= \(<врж>\)|<идентификатор>|<число>

Грамматика из примера 06, однако, допускает выражения A+-5, или 2*+10, B++2, что не допускается в арифметике. Чтобы избежать этих коллизий, надо либо усложнить грамматику, либо ввести дополнительные проверки.

10.6. Резюме

В данной лекции Вы познакомились с основными терминами и положениями важной дисциплины "искусственного интеллекта" - формальной грамматики. Вы разобрались с понятиями "алфавит", "язык", "грамматика", выяснили, что такое сентенциальная форма, фраза грамматики и чем они отличаются. Также Вы ознакомились с представлением грамматики с помощью "деревьев вывода", а также классификацией грамматик по Хомскому.

Этих сведений Вам вполне достаточно, чтобы Вы могли составить правила простейших грамматик и описать несложный язык. Однако для программирования более сложных алгоритмов Вам потребуется более серьезная математическая подготовка, прежде всего - в области теории множеств, групп и автоматов.

10.7. Глоссарий

Термин (рус.) Термин (англ.) Толкование
формальная грамматика formal grammar Раздел алгебры, изучающий символьные операции, логический вывод над символьными данными, грамматики, синтаксические деревья, языки и т.п. Выводы формальной грамматики широко используются в искусственном интеллекте, в построении языков программирования.
алфавит alphabet Непустое конечное множество символов. На основе алфавита строятся остальные предложения грамматик.
слово 2 word 2 Всякая конечная последовательность символов алфавита.
цепочка chain Синоним слова.
пустая цепочка empty chain Цепочка, не содержащая символов алфавита (то есть состоящая только из "пустого" символа).
длина цепочки length of the chain Количество терминальных и нетерминальных символов, находящихся в цепочке (строке). Пустая цепочка имеет длину, равную 0, одиночный символ - равный единице и т.д.
голова 1 (цепочки) head 1 (of chain) Один или несколько начальных символов в цепочке. Пустая голова - голова, представляющая собой пустую цепочку.
хвост (цепочки) tail Один или несколько последних символов цепочки. Пустой хвост - хвост, состоящий из "пустого" символа.
произведение (множеств цепочек) multiplication (of chain sets) Конкатенация всех цепочек, входящих в эти множества, в порядке их умножения. Произведение множеств ассоциативно, но не коммутативно.
степень цепочки power of a chain Если x - непустая цепочка, то n-я степень этой цепочки равна Пx n-раз, где П - операция конкатенации.
правила 2 подстановки rules of a redirection Представляют собой упорядоченную пару (U, x), которая записывается как U ::= x, где U - левая часть, а x - правая часть правила подстановки. И U, и x представляют собой цепочки.
продукция 2. production 2 В формальной грамматике аналог правила подстановки.
терминальный символ terminal Символ, встречающийся только в правой части правил подстановки. Конечный тест состоит только из терминальных символов.
нетерминальный символ non-terminal Символ, встречающийся и в левой, и в правой части правил подстановки. В ходе вывода нетерминальные символы заменяются терминальными символами.
синтаксическая единица syntactic(al) unit Символ (цепочка символов) в формальной грамматике, несущий определенный смысл при грамматическом разборе текста. Например, при разборе текстов на "человеческом" языке синтаксической единицей является член предложения.
словарь vocabulary Алфавит, состоящий из терминальных и нетерминальных символов.
грамматика grammar Конечное, непустое множество правил подстановки, содержащий нетерминальный символ (называющийся "начальным символом грамматики") хотя бы раз на множестве правил.
порождение (цепочек) rising (of a chain) Говорят, что одна цепочка порождает другую, если существуют правила подстановки, с помощью которых левая часть правил приводится к правой части.
приведение (цепочек) reduction (of a chain) Последовательное применение продукций к данной цепочке из множества допустимых в грамматике.
вывод 3 (цепочек) reduce 3 (of a chain) Говорят, что цепочка w выводится из v, если цепочка v порождает w.
длина вывода length of a reduce Количество продукций, используемых при выводе строки символов из начального символа грамматики.
сентенциальная форма sentential form Выводимая из начального символа грамматики цепочка символов.
предложение 1 sentence 1 Сентенциальная форма, состоящая только из терминальных символов.
язык 2 language 2 Подмножества множеств всех терминальных цепочек.
фраза phrase Часть цепочки символов называется фразой этой цепочки, если нетерминальный символ, порождающий эту фразу, входит в сентенциальную форму данной грамматики.
основа 1 (сентенциальной формы) base 1 (of sentential form) Самая левая фраза сентенциальной формы.
рекурсивная грамматика recursive grammar Грамматика, в которой хотя бы в одном из правил нетерминальный символ содержится одновременно в левой и правой части. Если рекурсивный символ находится в голове правой части, то грамматика леворекурсивная, а если в хвосте правой части - праворекурсивная.
левая рекурсия left recurrence Правило, содержащее рекурсивный символ в начале (голове) продукции.
правая рекурсия right recurrence Правило, содержащее рекурсивный символ в конце (хвосте) продукции.
бесконечный язык endless language Язык, содержащий бесконечное число предложений. Он порождается рекурсивной грамматикой.
за конечное число шагов for counting numbers of steps Нахождение всех решений данного алгоритма за конечное число шагов (т.е. алгоритм не "зацикливается"). Только такие алгоритмы может обрабатывать ЭВМ.
синтаксис предложений syntax of sentences Грамматические правила (продукции) языка, позволяющие генерировать все допустимые на языке терминальные цепочки.
узел node Терминальный или нетерминальный символ на синтаксическом дереве.
концевой узел terminal node Узел, не имеющих подчиненных узлов. Концевые узлы состоят из терминальных символов.
висящий узел pendant node Синоним концевого узла
куст узла bush Множество подчиненных данному узлу узлов.
концевой куст terminal bush Куст, все узлы которого - концевые узлы.
корень дерева root of tree Узел, не являющийся подчиненным никакому другому узлу. По-другому, корень - это начальный символ вывода, цель вывода.
лист leaf Синоним концевого узла.
ветвь branch Узел, не являющийся ни конечным узлом, ни корнем дерева.
сын son Подчиненный данному узлу узел.
отец parent Узел, которому подчинен другой узел.
братья brothers Все сыновья одного узла.
младший брат little brother Самый левый брат в синтаксическом дереве.
предки ancestry Отец и все вышележащие кусты дерева для данного узла.
потомки offspring Сыновья и все лежащие ниже кусты дерева для данного узла.
поддерево subtree Состоит из узлов дерева вместе с той частью дерева, которая исходит от него. Концевые узлы образуют фразу для корня этого поддерева.
приводимость к узлу reduce to a node Существование пути от заданных кустов до заданного узла дерева.
синтаксическое дерево syntactic(al) tree Дерево, представляющее "графическую форму" представления грамматического вывода на основе продукций.
неоднозначность 1 (предложения) ambiguity 1 (of a sentence) Предложение грамматики неоднозначно, если для его вывода существует, по крайней мере, два синтаксических дерева.
неоднозначная грамматика ambiguous grammar Грамматика считается неоднозначной, если она допускает неоднозначные (1) предложения. Доказано, что задача проверки грамматики на однозначность алгоритмически неразрешима.
контекст 2. context 2 Введение в правила грамматики дополнительных проверок на значения (ключевые слова), которые не входят в грамматические правила, но позволяют делать грамматику однозначной. Например, это может быть проверкой на присутствие в цепочке перед продукцией определенного символа и т.п.
правила по-умолчанию default rules Введение в грамматику правил, указывающих очередность применения продукций вне зависимости от их написания. Например, правила, что продукцию, выбирающую умножение, необходимо применять до сложения и т.п.
классификация грамматик по Хомскому grammar classification by Chomsky По Хомскому существует 4 типа грамматик: тип 0 - грамматика с фразовой структурой, тип 1 - контекстно-зависимая грамматика, тип 2 - контекстно-свободная грамматика, тип 3 - регулярная грамматика. Их определения приведено в [4]. На практике в основном используются контекстно-свободная и регулярная грамматики.
приведенная грамматика adjusted grammar Грамматика является приведенной, если, во-первых, любой ее нетерминал участвует в выводе из начального символа грамматики, а во-вторых, любой ее нетерминал приводится к цепочкам, состоящим только из терминальных символов.
< Лекция 9 || Лекция 10: 123 || Лекция 11 >