2. Гаченко А.С., Хмельнов А.Е. Технология создания информационных систем на основе метаданных // Инфо-коммуникационные и вычислительные технологии и системы: материалы II Всероссийской конференции (ИКВТС-06) с международным участием. Улан-Удэ: Изд-во Бурят. госуниверситета, 2006. Т.1. С. 99-100.
3. Присяжнюк С.П., Железняков А.В. Опыт применения инструментария GIS ToolKit в отечественных разработках // Информационный бюллетень, ГИС Ассоциация. 2001. № 3(30)
4. URL: http://public.admirk.ru/gisinv/index.html ГИС Инвестор г. Иркутска.
Гаченко Андрей Сергеевич кандидат технических наук, старший научный сотрудник ИДСТУ СО РАН, тел. (395-2) 453103, e-mail: [email protected]
Маджара Тарас Игоревич, кандидат технических наук, и.о. заведующего лабораторией ИДСТУ СО РАН, тел. (395-2) 453071, e-mail: [email protected]
Ружников Геннадий Михайлович, кандидат технических наук, заместитель директора ИДСТУ СО РАН, тел. (395-2) 453006, e-mail: [email protected]
Хмельнов Алексей Евгеньевич, кандидат технических наук, заведующий лабораторией ИДСТУ СО РАН, тел. (395-2) 453071, e-mail: [email protected]
Gachenko Andrey Sergeevich, candidate of technical sciences, Institute for System Dynamics and Control Theory SB RAS.
Madzhara Taras Igorevich, candidate of technical sciences, acting head of laboratory, Institute for System Dynamics and Control Theory SB RAS.
Ruzhnikov Gennady Mikhailovich, candidate of technical sciences, deputy director, Institute for System Dynamics and Control Theory SB RAS.
Khmelnov Alexey Evgenevich, candidate of technical sciences, head of laboratory, Institute for System Dynamics and Control Theory SB RAS.
УДК 681.51
© Л.Н. Федорченко, Л.М. Лукьянова СИНТЕЗ РАСПОЗНАВАТЕЛЯ ДЛЯ КСР-ЯЗЫКА
В статье представлены метод и алгоритмы, выполняющие построение состояний распознавателя (анализатора) для языка, порождаемого трансляционной КСР-грамматикой. Метод и алгоритмы реализованы в инструментальной системе SynGT (Syntax Graph Transformation).
Ключевые слова: тнтаксическая граф-схема, состояние распознавателя, КСР грамматика.
L.N. Fedorchenko, L.M. Lukyanova SYNTHESIS OF RECOGNIZER FOR A CFR-LANGUAGE
The paper presents a method and algorithms that perform construction of recognizer states (parser) for the language generated by translational CFR-grammar. The method and algorithms are implemented in the special tool system SynGT (Syntax Graph Transformation).
Keywords: syntactic flow-chart, state of recognizer, CFR-grammar.
Введение
В настоящее время языковые технологии активно включаются в различные сферы нашей жизни, что приводит к развитию современных транслирующих систем, ориентированных на разнообразный ассортимент вычислительных устройств, применяемых в производственных системах типа «организационно-технический комплекс» (далее «комплекс») [1, 2]. При этом наиболее остро проявилась проблема быстрой настройки синтаксического определения языка на ту форму, которая допускает автоматическую или ручную реализацию, а также проблема учета ограничений выбранного метода синтаксического анализа. Первая проблема обусловлена разнообразием спецификаций реализуемых языков, диапазон которых простирается от обычной формы Бэкуса-Наура (БНФ) и языка разметки HTML, до двухуровневых грамматик, чаще всего используемых при конкретизации применительно к специфике комплекса, которая должна быть отражена в языках описания целей, подцелей и логических связей между ними. Вторая проблема ведет либо к языковой неоднозначности, либо к недетерминированности распознающего автомата.
Опыт использования различных инструментальных систем в производственной сфере показывает, что при построении языка целей комплекса его удобно задавать в виде двухуровневой КС-грамматики (типа VW-грамматики), которая расширена рядом контекстных правил. Такой тип грамматики эквивалентно трансформируется в КС-грамматику в регулярной форме (КСР-грамматику) [4, 5], которая отличается от обычной КС-грамматики тем, что в ней помимо алфавитов нетерминалов и терминалов имеется дополнительный алфавит контекстных символов (семантик), а правые части правил представляют собой регулярные выражения над символами объединенного алфавита грамматики. Эти выражения трактуются как формулы с регулярными операциями над множествами цепочек, составленных из терминальных и контекстных символов. Таким образом, множество правил КСР-грамматики рассматривается как система, определяющая значения всех нетерминалов в качестве ее неизвестных. В такой грамматике классическое понятие вывода заменяется понятием вычислимости значения регулярного выражения.
Далее рассмотрим построение распознавателя (анализатора) для языка, определяемого КСР-грамматикой (КСР-языка).
1. Синтез распознающего автомата
Напомним определения КСР-грамматики и синтаксической граф-схемы графового аналога КСР-грамматики.
Определение 1. КСР-грамматикой называется пятерка множеств GR = (N ,T, 2, P, S), где N — множество нетерминалов, Т - множество терминалов, 2 - множество семантик, P - множество КСР-правил, P = {A : RA.| A е N,RA — регулярное выражение над алфавитом N и T и 2}, S — начальный нетерминал грамматики.
С практической точки зрения, КСР-правила удобно представлять в виде конечных ориентированных графов с помеченными вершинами и дугами. Такие графы, представляющие КСР-грамматику, преобразуются в детерминированную конечно-автоматную схему, в которой каждая вершина соответствует состоянию автомата, а ее метка специфицирует порождаемый символ. В специальном программном средстве SynGT(Syntax Graph Transformations), разработанном в СПИИРАН, набор графов, представляющих правила КСР-грамматики, снабженных дополнительной информацией на дугах (семантики, предикаты), называется синтаксической граф-схемой (СГС) КСР-грамматики [4, 5]. Синтез граф-схемы рекуррентен и описан в [4]. В системе SynGT используется графический интерфейс, примеры которого можно найти в [4, 5].
С каждой KCP -грамматикой G связываем ее такую синтаксическую граф-схему Гс, что LFg = L(G).
Введение понятия синтаксической граф-схемы в качестве порождающего механизма для языка вызвано следующими соображениями:
— являясь адекватным регулярному выражению, граф нагляднее отражает структуру KCP -грамматики и не вводит лишнюю рекурсивность(структурированность) в KCP -язык;
— из граф-схемы проще выбирать информацию о порождаемом языке;
— в терминах вершин удобней описать автомат, распознающий язык, порождаемый синтаксической граф-схемой;
— с дугами граф-схемы легко связать вызовы семантических процедур;
— синтаксическая граф-схема позволяет использовать более простую структуру, чем вывод в KC -грамматике, а именно маршруты или путь в синтаксической граф-схеме, в терминах которого легче формулировать и проверять ограничения на класс грамматик с эффективным анализом.
Далее определим понятие состояния, играющее основную роль в синтезе распознающих автоматов. Известное из литературы [3] понятие состояния автомата связывается с помеченными вершинами граф-схемы.
2. Состояния распознавателя
^стоянию, в котором находится автомат, приписывается определенное количество информации о языке. Прежде чем определить состояние автомата, рассмотрим состояния в СГС. В данном случае под состоянием распознавателя будем понимать состояние в синтаксической граф-схеме Гс, т.е.
множество вершин Гс . Переход от одного состояния к другому, которое также является множеством (возможно пустым) вершин в синтаксической граф-схеме (СГС), управляется текущим символом, поступающим из входного текста.
Переходное состояние содержит информацию о том, какие символы допустимы для следующего перехода, а следовательно, о том, какие текущие символы разрешены в данный момент, а следовательно, какие подслова допустимы к моменту перехода в это состояние. Таким образом, состояние позволяет установить принадлежность слова языку, порождаемому данной синтаксической граф-схемой.
2.1. Регулярный случай
Рассмотрим случай, когда КСР-грамматика G порождает регулярный язык, а множество Р правил грамматики содержит только одно £ -правило для начального нетерминала £, Р = (£: А} , правая часть которого - регулярное выражение А в алфавите Т . Синтаксическая граф-схема Гс состоит из одного графа для нетерминала £ — Гс = (Г£ }, и не содержит нетерминальных вершин.
В этом случае состояние в Гс определяется состоянием для регулярного выражения А в графе Га .
Пусть ГА — граф для регулярного выражения А. Определим понятие состояния для регулярного выражения в графе ГА .
Определение 2. Состоянием в графе ГА называется:
1) либо выходная вершина FA;
2) либо терминальная вершина в ГА ;
3) либо объединение состояний в ГА .
Для произвольной вершины р в графе ГА , (р Ф FA) определим состояние вершины в в графе ГА как множество вершин, смежных с вершиной в .
Определение 3. Состоянием вершины в графе ГА называется множество вершин £р :
£р =( а | а - терминальная или выходная вершина в ГА , ае succ(р) }.
То есть состояние произвольной неконечной вершины в графе для нетерминала А совпадает с множеством вершин, смежных с данной вершиной, £р = succф) .
Если р — входная вершина графа ГА , р = ЕА , то £р называется начальным состоянием графа ГА .
Из определения 3 видно, что начальное состояние графа ГА является множеством вершин, достижимых из входной вершины Еа . Достижимость из Еа означает то, что символы, помечающие вершины в начальном состоянии, соответствуют начальной букве слова, порождаемого графом ГА .
Аналогично, состоянием произвольной вершины р в графе ГА является множество вершин ГА , достижимых из вершины р , а символы, помечающие их, соответствуют букве, которая может стоять за буквой (совпадающей с меткой вершины р ) в слове, порождаемом данным графом.
2.2. Переходное состояние
Определенное выше состояние в графе ГА по содержанию тождественно понятию состояния конечного автомата [3]. При синтезе автомата каждое его состояние отождествляется с состоянием в графе для регулярного выражения.
Переход из одного состояния в другое управляется символом, поступающим на вход автомата. По определению любое состояние является множеством вершин в граф-схеме, т.е. содержит множество альтернатив о том, как поступившее подслово может быть продолжено.
После того как одна из этих альтернатив выбрана (когда известна следующая буква слова), может составляться следующая альтернатива (следующее состояние). Это можно осуществить с помощью операции «переход по символу».
Пусть £ — произвольное состояние в графе ГА , и £, — буква из алфавита Т.
Определение 4. Состояние £ / Е называется переходом по символу Е (переходным состоянием для £) в граф-схеме ГА, причем:
1) если £ = 0 или £ = (Р}, то £ / Е = 0 ;
2) если £ = (а}, а — терминальная вершина в ГА , то
Г0, если т(а) Ф %
£ /х = \ ;
1£ а, если т(а) = %
3) если £ = 0 £ , то £ / х = 0 (£ / Е).
а -
к
х
i=1 г=1
Из данного определения следует, что результатом применения операции перехода по символу является объединение состояний тех вершин, которые помечены этим терминальным символом в рассматриваемом состоянии.
Если исходное состояние пусто или отсутствуют терминальные вершины, помеченные данным символом, то переходное состояние также пусто.
Переходное состояние представляет информацию о том, как должно продолжаться слово после появления на входе автомата рассматриваемого символа. Если переходное состояние пусто, значит данный символ (в качестве следующей буквы слова) недопустим.
Операцию «переход по символу» можно естественным образом обобщить до операции «переход по слову».
Пусть £ — произвольное состояние в графе ГА , и х = х'Е — слово в алфавите Т , X е Т*.
Определение 5. Переходом по слову х для состояния £ называется состояние £ / х = (£ / X)/ Е . Переходом по пустому слову е называется состояние £ / в = £ .
Из вышесказанного следует утверждение.
Утверждение. Язык, порождаемый графом для регулярного выражения, состоит в точности из тех слов, переход по которым для начального состояния данного графа содержит выходную вершину:
^ = (х е Т*| Ра е £еа / х}.
2.3. Общий случай
Рассмотрим общий случай, когда КСР -грамматика G порождает КС-язык, а регулярные выражения КСР -правил из Р содержат вхождения нетерминалов. Синтаксическая граф-схема Гс состоит из совокупности графов для нетерминалов Г<з = (Г£, ГА^, ГА ,_,ГА ) и содержит нетерминальные вершины.
Вхождения нетерминальных вершин в графах нарушают регулярность языка, порождаемого Гс, и это находит свое отражение в определении состояния: оно может содержать не только одно множество вершин (как в регулярном случае), а два — состояние перехода и состояние возврата. Каждое из них может содержать другие состояния, и таким образом возникает иерархия все более сложных состояний. В таком сложном состоянии существует множество вершин, которое является «фактическим» состоянием, а все остальные — накопленные (магазинные) состояния.
Таким образом, в общем случае состояние содержит всю информацию об «истории» порождения текущего подслова, то есть о том, как текущее подслово, прерванное вхождением нетерминальной вершины в Гс, может быть продолжено или процесс порождения завершен.
Чем меньше нетерминальных вершин в Гс (или вхождений нетерминалов в КСР -правилах), тем меньше сложных состояний возникает при синтезе магазинного автомата. Поэтому представляется целесообразным максимально снизить число вхождений нетерминалов в грамматике, используя эквивалентные преобразования с применением операции обобщенной итерации (#). Для этой цели необходимо применить процедуру регуляризации КСР -грамматики, формальное описание которой дано в [4].
Переход из одного состояния в другое в общем случае также управляется текущим символом и происходит с помощью операции «переход по символу». Но в отличие от регулярного случая в конце
подслова (порожденного некоторой компонентой граф-схемы ГА) можно вернуться к накопленному состоянию - состоянию возврата и затем продолжить переход.
Следующим определением введем понятие состояния в СГС ГО, обобщающее ранее определенное в разделах 2.1, 2.2.
Определение 6. Состоянием в графе-схеме ГО называется:
1) либо выходная вершина FAj графа для некоторого нетерминала из алфавита N ;
2) либо терминальная вершина в ГО ;
3) либо пара множеств (£х,S2), где S1 и S2 - состояния в ГО ;
4) либо объединение состояний в ГО .
Для произвольной вершины р (р не является выходной вершиной) в синтаксической граф-схеме ГО определим состояние Sр - состояние вершины в ГО .
Определение 7. Для произвольной вершины р в синтаксической граф-схеме ГО состояние вершины Sр имеет вид:
а | ае sжc(fi), а - терминальная или выходная вершина в ГО =< .
(£е , £а ) | ае succ(P), а - нетерминальная вершина в ГО
Если р - входная вершина графа Га. для некоторого нетерминала из алфавита N , то состояние Sр в ГО будет называться начальным состоянием графа Га. ($Еа ).
Начальное состояние графа ГS для стартового символа КСР -грамматики называется начальным состоянием синтаксической граф-схемы ГО (обозначение $0).
Таким образом, чтобы построить состояние некоторой вершины в ГО, необходимо сначала построить состояние этой вершины в некотором Га. . Поскольку в графе Га. встречаются как терминальные, так и нетерминальные вершины, то они должны входить в строящееся состояние. Затем нетерминальные вершины заменяются на сложное состояние (пара) в соответствии с назначением нетерминальных вершин в ГО. После подслова, порожденного графом для такого нетерминала, слово продолжается так, как если бы вместо нетерминальной вершины в ГО находилась бы терминальная вершина, а вместо подслова поступил бы символ - метка этой нетерминальной вершины.
Таким образом, состояние в ГО - это иерархия вложенных пар множеств терминальных или выходных вершин. Самый нижний уровень этой иерархии представляет собой «фактическое» состояние, все остальные состояния в парах - магазинные.
Пример 1. Рассмотрим грамматику О :
О = (^,С1,С2}, {а,Ь}, Р, S). Р = { S : а,(С1;С2),а, С1: Ь,S, С2 :Ь }
Показана синтаксическая граф-схема ГО для КСР -грамматики О (рис. 1.).
С2 7
МлН
Рис. 1. Пример синтаксической граф-схемы Го
Условимся, все вершины, кроме выходных, в состояниях ГО обозначать парой - метка и номер вершины в ГО . Тогда для КСР -грамматики О имеем следующее множество состояний вершин:
БЕб - {а _1} ;
£а_1 - {({Ь -5},£С1 _2),({6 -7},£С2_з)} ;
Бь-5 - ({а -1}, ^ _ б);
£а - 4 - № };
Бб-б - ^};
БЬ-7 - {^С2 } ;
БС1 -2 - БС2 -3 - {а _ 4}.
Поскольку состояние в Гс - это объединение цепочек вложенных пар множеств терминальных или выходных вершин в Гс, которое можно разбить на классы следующим образом.
Обозначим через 3 множество состояний в Гс к -го уровня, к > 0 .
Определение 8. Состояние Б принадлежит множеству 30, если
а) либо Б - {а} , где а - терминальная или выходная вершина в Гс;
к
Ь) либо Б - УБ,, где Б, е 30, V/ е {1,2,...,к}, п > 1.
/-1
Определение 9. Состояние Б принадлежит множеству 3 , (к > 0), если
к
a) либо Б - (Б1,Б2), где Б1, Б2 из УБ, ;
/-1
к
b) либо Б - ^ Б,, где Б, е 3к и п > 1.
/-1
Из определения состояния вершины в Гс видно, что иногда процесс построения состояния для некоторой вершины может не закончиться. В этом случае условимся считать, что состояние этой вершины не существует. Множество состояний, которые существуют в Гс, обозначим и на нем определим операции «переход по символу» и «переход по слову».
Пусть Б - состояние в Гс и £, - буква из терминального алфавита Т . Дадим определение переходного состояния на множестве состояний .
Определение 10. Состояние Б/£, называется переходным состоянием по символу £, для состояния Б в Г0 , причем:
1. Если Б - 0 или Б - {^ }, то Б / ^ - 0 .
2. Если Б - {а}, где а - терминальная вершина в Г0, то
Г0, если т(а) Ф Е
Б / Е Ч .
[Ба, если т(а) - Е
кк
3. Если Б - У Б,, то Б / х - У (Б, / £) .
/-1 /-1
4. Если Б - (Б1,Б2), то
Г(Б1/Е, Б2), если Б1/Е Ф0 Б / Е - ^ Б2 / Е, если Б1 / Е - 0 и вершинаFAе Б1 для некоторого ГА .
0 иначе.
Операция перехода по символу задает отображение множества х Т в . Расширение области
*
определения этого отображения на х Т производится обычным образом.
Для состояния Б е переходом по пустому слову е называется состояние Б / в - Б .
Определение 11. Для состояния S e3G и слова x в алфавите T, x = x%, x' е T* переходом по слову x для S е 3G называется состояние (переходное состояние) S / x = (S / x ') / Е .
Конечное множество переходных состояний для всех терминальных символов из 3G задают таблицу состояний распознавателя, адекватного КСР-грамматике.
Из вышесказанного следует, что состояние распознавателя КСР-языка - это иерархически упорядоченное множество множеств вершин в rG . Внизу этой иерархии находятся самые простые состояния - одноэлементные множества вершин. Из них с помощью объединения и композиции можно образовать более сложное состояние - так возникает состояние, имеющее много элементов или уровней иерархии. Объединением (как в регулярном случае) определяются альтернативы, а композицией -информация, которая могла бы быть потеряна в результате нарушения регулярности. Выходная вершина указывает не только на конец подслова, порождаемого некоторым графом-компонентой rG, но и на планируемый возврат к накопленному состоянию.
Пример 2. Для KCP -грамматики G из примера 1 и входного слова «aba» переход по слову «aba» для начального состояния S0 в rG дает состояние S3, которое получается следующим образом:
S0= Ses = {a-1}
S = So / a = Sa-i = {({b - 5}, SCi _2),({b - 7}, SQ -3)}.
52 = S1 / b = { (Sb-5, SC1 -2),(Sb-7, SC2 -3)} =
= {(({a -1}, Ss-6), Sc1 -2),(Fc2, Sc2 -3)}.
53 = S2 /a ={((Sa-1,SS-6),SC1 -2),SC2-3 /a} =
= {((Sa-1,Ss-6),SC1 -2),{a - 4}/a} = {((Sa-1,Ss-б),Sc1 -2),Sa-4} =
= {(({b - 5}, Sc1 -2),({b - 7}, Sc2 -3)}, Ss-б), Sc1 -2), Fs }.
Заключение
Метод автоматического синтеза распознавателя КСР-языка, предложенный в данной статье, реализован в системе SynGT и может применяться при построении анализаторов достаточно большого класса практических языков. Совместно с новыми алгоритмами регуляризации КСР-грамматик он демонстрирует увеличение в эффективности по сравнению с методами построения трансляторов в известных системах серии GNU [6].
Литература
1. Лукьянова Л. М. Результаты развития методологии формирования решений по организационнотехническим комплексам // Известия КГТУ. 2010. №19. С. 36-44.
2. Лукьянова Л.М. , Федорченко Л.Н. Средства формализации целей и проблем сложных систем производственной сферы // Вестник Бурятского госуниверситета. 2012. № 9. С 42-48.
3. G. Rozenberg A. Salomaa (Eds.) Handbook of Formal Languages. Vol. 2. Berlin, Heidelberg, New York. Springer-Verlag, 1997. 527 p.
4. Федорченко Л.Н. Регуляризация контекстно-свободных грамматик. / LAP LAMBERT Academic Publishing GmbH & Co. KG Dudweiler Landstr. 99, 66123 Saarbrücken, Germany. 2011. C 180.
5. Федорченко Л.Н. Синтаксически управляемая обработка данных для практических задач // Вестник Бурятского госуниверситета. 2013. № 9. С 87-99.
6. Bison - GNU parser generator. URL://www.gnu.org/software/bison/.
Федорченко Людмила Николаевна, кандидат технических наук, старший научный сотрудник лаборатории прикладной информатики Санкт-Петербургского института информатики и автоматизации Российской академии наук (СПИИРАН). Тел. +7 (812) 328-1919. E-mail: [email protected]
Лукьянова Людмила Михайловна, доктор технических наук, профессор кафедры систем управления и вычислительной техники Калининградского государственного технического университета, академик Международной академии информатизации (МАИ). Тел. +7 (4012) 995-942. E-mail: [email protected]
Fedorchenko Lyudmila Nikolaevna, candidate of technical sciences, senior researcher, laboratory of applied computer science, St.Petersburg Institute for Informatics and Automation RAS (SPIIRAS).Tel. +7 (812) 328-1919.E-mail: [email protected]