Итак, мы подошли к главному моменту изложения материала данного курса - описанию так называемых
Формальная
Выводы теории
При чтении этого раздела Вам может быть потребуется обращаться как к предыдущим, так и последующим разделам. Более подробно материал из этого раздела представлен в [41].
Изучение любого языка человек начинает с азбуки. В
О п р е д е л е н и е. Алфавит - это непустое конечное множество элементов.
В "классическом" языке алфавит - это набор литер. В фонетике - набор издаваемых человеком звуков речи. В музыке - это набор нот, и т.д.
С помощью алфавита часто возможно описать
Всякая конечная последовательность
x = SVT
цепочка, состоящая из символов S, V и T, и именно в этом порядке.
О п р е д е л е н и е. |x|. Например: |Л| = 0, |A| = 1, |BA| = 2, |ABBA| = 4.
Если x и y являются цепочками, то их конкатенацией будет цепочка xy. От перестановки цепочек при конкатенации результат меняется (как и в теории групп). Если z = xy - цепочка, то x - голова, а y - хвост цепочки. Если нам безразлична голова цепочки, мы будем обозначать:
z = … x
а если нам безразличен хвост, мы будем писать:
z = x …
О п р е де л е н и е. Произведение двух множеств цепочек определяется как конкатенация всех цепочек, входящих в эти множества. Например, если множество A = {a, b}, а B = {c,d}, то:
AB = {ac, ad, bc, bd}
В произведении множеств, как и при конкатенации, порядок множителей существенен.
И при конкатенации цепочек, и при перемножении множеств цепочек истинным остается ассоциативный закон, записывающийся как:
z = (ab)c = a(bc) = abc
D = (AB)C = A(BC) = ABC
И, наконец, определим степень цепочки. Если x - непустая цепочка, то x0 = {Л}, x1 = x, x2 = xx, xn = x(x)(n-1). То же самое обстоит и со степенью множеств.
Понятие терминальных и
О п р е д е л е н и е. Продукцией, или правилом подстановки, называется упорядоченная пара ( U, x ), записываемая как:
U ::= x
где U - символ, а x - непустая конечная
Символы, встречающиеся только в правой части, называются
О п р е д е л е н и е. G[Z] называют конечное, непустое множество правил, содержащее Z хотя бы один раз на множестве правил. Символ Z называют начальным символом. Далее мы все
[Пример 01]
<число> ::= <чс> <чс> ::= <цифра> <чс> ::= <чс><цифра> <цифра> ::= 0 <цифра> ::= 1 <цифра> ::= 2 <цифра> ::= 3 <цифра> ::= 4 <цифра> ::= 5 <цифра> ::= 6 <цифра> ::= 7 <цифра> ::= 8 <цифра> ::= 9
Дадим еще определение:
О п р е д е л е н и е. Цепочка v непосредственно порождает цепочку w, если:
v = x<U>y, а w = xuy
где <U> ::= u - правило v => w. Мы также говорим, что цепочка w непосредственно выводима из v. При этом цепочки x и y могут быть пустыми.
О п р е д е л е н и е. Говорят, что v порождает w, или w приводится к v, если существует конечная цепочка выводов u0, u1, …, u[n] (n > 0), такая, что
v = u0 => u1 => u2 => … => u[n] = w
Эта последовательность называется выводом длиной n, и обозначается v =>+ w. И, наконец, пишут:
v =>* w, если v => w или v =>+ w
О п р е д е л е н и е. Пусть G[Z] - x - цепочка. Тогда x называют сентенциальной формой, если <Z> =>* x. Предложение - это сентенциальная форма, состоящая только из
Далее следует важное определение, и читатель не должен читать раздел далее до тех пор, пока ему не будет полностью понятен смысл определения.
О п р е д е л е н и е. Пусть G[Z] - w = xuy - сентенциальная форма. Тогда u называется фразой сентенциальной формы w для <U>, если:
Z =>* x<U>y и <U> =>+ u
Если же
Z =>* x<U>y и <U> => u
то цепочка u называется простой фразой.
Следует быть осторожным с термином "фраза". Тот факт, что <U> =>+ u (цепочка u выводима из <U> ) вовсе не означает, что u является фразой сентенциальной формы x<U>y; необходима также x<U>y из начального символа Z.
В качестве иллюстрации фразы рассмотрим [Пример 01] сентенциальную форму <чс>1. Значит ли это, что символ <чс> является фразой, если существует правило: <число> ::= <чс>? Конечно же, нет, поскольку невозможен вывод цепочки: <число><1> - из начального символа: <число>. Какие же фразы сентенциальной формы <чс>1? Рассмотрим вывод:
<число> => <чс> => <чс><цифра> => <чс><1>
Таким образом,
<число> =>* <чс> и <чс> =>+ <чс>1
<число> => <чс><цифра> и <цифра> => 1
Следовательно, <чс>1 и 1 - фразы. Простой же фразой будет только 1.
О п р е д е л е н и е. Основой всякой сентенциальной формы является ее самая левая простая фраза.
<чс> ::= <чс><цифра>, то есть в некотором смысле символ <чс> сам себя определяет.
В общем случае, если:
<U> =>+ … <U> …
мы говорим, что <U>. Если же:
<U> =>+ <U> …
то имеет место
<U> =>+ … <U>
то имеет место правая рекурсия.
Если язык бесконечный, то определяющая его
<чс> ::= <чс><цифра> - программа будет "обращать внимание" на символ <чс> и "не замечать" символа <цифра>. Это можно исправить как подбором Отступление. Вообще, чем больше в
В этом разделе обобщаются сведения, полученные на данной лекции в разделах 10.01 - 10.03, и в лекции 9. Прочтите этот раздел внимательно.
Синтаксические деревья помогают понять синтаксис предложений. В качестве иллюстрации построим дерево для вывода предложения 22 из
<число> => <чс> => <чс><цифра> => <цифра><цифра> => 2<цифра> => 22
Отправившись от символа <число>, нарисуем его куст, чтобы указать его непосредственный вывод (см. рисунок 10.1 a))
(рис 10.1) Синтаксические деревья для двух непосредственных выводов. a) первый куст; b) первый и второй кустКуст узла - это множество подчиненных ему узлов. Чтобы показать второй вывод, из узла, представляющего заменяемый символ, рисуется куст, узлы которого образуют цепочку, заменяющую этот символ ([[#g04fb] рисунок G.04 b)]. Концевые (висящие) узлы синтаксического дерева - это узлы, не имеющие подчиненных узлов. При чтении слева направо концевые узлы образуют цепочку, вывод которой
Существует и другая терминология. В ней концевые узлы называются "листьями", не концевые узлы - "ветвями". Начальный символ вывода везде называется "корнем".
Пусть N - ветвь (узел) дерева. Сыновьями N называются узлы куста, подчиненного N. N - их отец. Сыновья называются братьями. Самым младшим братом является самый левый из них. На рисунке 10.1, b) ветвь <чс> имеет двух сыновей, <чс> и <цифра>, младшим из них является <чс>.
О п р е д е л е н и е. Пусть N - ветвь синтаксического дерева. Тогда потомками ветви (узла) N будут все выводимые из него узлы, то есть все ветви и листья, лежащие выше нее. Предками узла N будут все ветви (N (лежащие выше нее в дереве вывода).
Поддерево синтаксического дерева состоит из узлов дерева, вместе с той частью дерева, которая исходит от него. Поддеревья тесно связаны с фразами: концевые узлы образуют фразу для корня данного поддерева.
Т е о р е м а. Концевые узлы образуют фразу для корня данного поддерева.
Д о к а з а т е л ь с т в о.
Пусть <U> - корень поддерева, а u - цепочка из концевых узлов поддерева. Тогда <U> =>+ u.
Пусть x - цепочка концевых узлов, расположенная слева от концевых узлов поддерева u, а y - цепочка концевых узлов справа от u. Тогда xuy - сентенциальная форма, то есть Z =>* xuy. Эти условия соответствуют определению фразы (10.11).
Подводя итог, сформируем следующее положения о синтаксических деревьях:
<U> - корень поддерева сентенциальной формы: w = xuy, где u цепочка конечных узлов этого поддерева. Тогда u - фраза сентенциальной формы w для <U>. Она является простой фразой, если поддерево представлено единственным кустом.О п р е д е л е н и е. Предложение
О п р е д е л е н и е.
Пример неоднозначной
[Пример 02]
Неоднозначная
Рассмотрим следующую
<врж> ::= <врж>+<врж> <врж> ::= <врж>*<врж> <врж> ::= (<врж>) <врж> ::= i
Теперь рассмотрим ее сентенциальную форму:
i + i * i
Для нее возможны следующие
(рис 10.2) Два синтаксических дерева одной сентенциальной формыДерево, определенное на рисунке 10.2, (a) указывает на приоритет умножения, а на рисунке 10.2, (b) - приоритет сложения. Поэтому оба результата являются с точки зрения этой
[Пример 03].
Однозначная
<врж> ::= <терм> <врж> ::= <врж>+<терм> <терм> ::= <множ> <терм> ::= <терм>*<множ> <множ> ::= (<врж>) <множ> ::= i
Теперь синтаксическое дерево для сентенциальной формы (10.20) будет единственным и выглядит следующим образом:
(рис 10.3) Синтаксическое дерево грамматики из примера 03Из вышесказанного следует, что в практических целях лучше использовать однозначную
Следует отметить, что большинство используемых человеческих языков построено на "неоднозначных" грамматиках (в лексическом понимании). Примеры: "Петя взял лук" (какой лук, который едят или которым стреляют?), "Казнить нельзя помиловать" (без запятой непонятно, убить ли надо человека или отпустить на волю?) и т.д. Даже такой популярный язык программирования, как C++, часто реализуется неоднозначной
Американский ученый Хомский в [11, 19] определил четыре основных классов языков в терминах [V, T, P, Z], где:
V - алфавит, содержащий и терминальные, и T (входит в V ) - алфавит P - набор правил подстановок;Z - начальный символ, принадлежащий V - T (Тогда
u ::= v, где u входит в V+, а v входит в V*
то есть левая часть u также может быть последовательностью символов, а правая часть может быть пустой.
Если ввести ограничения на правила подстановки, то получится класс
xUy ::= xuy, где U входит в V-T, u входит в V+, а x,y входят в V*
Термин "контекстно-чувствительный" отражает тот факт, что можно заменить U на u только в контексте x … y.
Дальнейшее ограничение дает класс
U ::= u, где U входит в V-T, и u входит в V*
Этот класс U можно изменять, не обращая внимание на контекст, в котором он встретился (то есть символы меняются на цепочки независимо). Однако в КС-
U ::= <пусто>
где <пусто> - пустая цепочка. Поэтому КС-
И, наконец, введя ограничения:
U ::= N, или U ::= NW, где N входит в T, а U и W входят в V-T
то получим
Чтобы появиться в выводе какого-нибудь предложения, <U> должен удовлетворять двум условиям:
Z =>* x<U>y для некоторых (в том числе пустых) цепочек x и y
<U> =>+ t для некоторой t входящей в VT+
О п р е д е л е н и е. <U> удовлетворяет условиям: (10.26) и (10.27).
Также
<U> ::= <U>
В этом подразделе приводятся примеры
В практике программирования часто используется понятие идентификатора. Дадим ему определение.
О п р е д е л е н и е. Идентификатор - это цепочка алфавитно-цифровых знаков, начинающихся с латинской буквы.
Например, следующие цепочки - идентификаторы:
A, a, i, izh003, ai, b12;
а следующие - не идентификаторы:
1, 1a, .htaccess, b[1,2], a_and_i, ai.
[Пример 04]
<идентификатор> ::= <alphabet>{<alphanum>}
<alphanum> ::= <num>|<alphabet>
<alphabet> ::= [A-Za-z]
<num> ::= [0-9]
В принципе, для реализации
При разборе текстов часто бывает необходимо отделить числа от других слов. Сложность выделения заключается в том, что числа бывают не только натуральными, но могут быть представлены в научном формате с плавающей точкой (см. раздел 4 лекции 5). Программа-сканер, реализующая такое выделение, приведена в приложении II к лекции 9. Ниже представлена
[Пример 05]
<число> := <научный формат> | <фиксированная точка> | <целое число>
<научный формат> ::= <фиксированная точка><порядок>
<фиксированная точка> ::= <целое число>.<целое без знака>
<целое число> ::= [(+|-)]<целое без знака>
<порядок> ::= (e|E)<целое число>
<целое без знака> ::= {(0|1|2|3|4|5|6|7|8|9)}+
Запишем
[Пример 06]
<врж> ::= <терм>|<врж>+<терм>|<врж>-<терм> <терм> ::= <множ>|<терм>*<множ>|<терм>/<множ> <множ> ::= <степ>|<множ>^<степ> <степ> ::= \(<врж>\)|<идентификатор>|<число>
В данной лекции Вы познакомились с основными терминами и положениями важной дисциплины "искусственного интеллекта" -
Этих сведений Вам вполне достаточно, чтобы Вы могли составить правила простейших
| Термин (рус.) | Термин (англ.) | Толкование |
|---|---|---|
| формальная грамматика | formal grammar | Раздел алгебры, изучающий символьные операции, |
| алфавит | alphabet | Непустое конечное множество символов. На основе алфавита строятся остальные предложения |
| слово 2 | word 2 | Всякая конечная последовательность |
| цепочка | chain | |
| пустая цепочка | empty chain | Цепочка, не содержащая |
| длина цепочки | length of the chain | Количество терминальных и |
| голова 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 | |
| контекст 2. | context 2 | Введение в правила |
| правила по-умолчанию | default rules | Введение в |
| классификация грамматик по Хомскому | grammar classification by Chomsky | По Хомскому существует 4 типа |
| приведенная грамматика | adjusted grammar |
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.