УДК 681.51
DOI: 10.18101/2304-5728-2019-2-44-60
ГОМОМОРФИЗМ ЭКВИВАЛЕНТНЫХ ПРЕОБРАЗОВАНИЙ ГРАММАТИК, ПРИМЕНЯЕМЫЙ ПРИ ГЕНЕРАЦИИ АНАЛИЗАТОРОВ ЯЗЫКА
© Федорченко Людмила Николаевна
кандидат технических наук, доцент, старший научный сотрудник Санкт-Петербургский институт информатики и автоматизации Российской академии наук
Россия, 199178, г. Санкт-Петербург, 14 Линия В.О., 39;
Санкт-Петербургский государственный университет, Россия, 199034, г. Санкт-Петербург, Университетская наб., 7/9 E-mail: [email protected]
При построении транслятора, как правило, необходимо проводить эквивалентные преобразования грамматики реализуемого языка, преобразующие синтаксическую спецификацию языка в тот вид, который допускает автоматическую или ручную реализацию исходного языка, и решающие проблемы учёта ограничений выбранного метода синтаксического анализа. Эти проблемы возникают как из-за разнообразия способов определения реализуемых языков, так и из-за языковой неоднозначности или недетерминированности распознающего автомата. Каждое преобразование, выполняемое на трансляционных КС-грамматиках, может задаваться как отношение подобия (гомор-физма), определяемое на классах грамматик. Такие отношения имеют непосредственную связь с сохранением семантического значения грамматических конструкций при эквивалентных преобразованиях синтаксиса, так как конечной целью трансляции является получение последовательности действий, предписываемых вычислительной среде.
В статье представлен краткий обзор различных типов отношений подобия на грамматиках, применяемых при построении трансляторов c 1970-х гг. Представлена схема построения анализаторов LL-языков с использованием синтаксических граф-схем (СГС). Даны формальное понятие маршрута (пути) в СГС и пример автоматического преобразования КСР-грамматики формального языка CIAO, выполненный в системе эквивалентных преобразований SynGT (Syntax Graph Transformations).
Ключевые слова: эквивалентные преобразования грамматик; отношение подобия; гомоморфизм покрытия; КСР-грамматики; синтаксическая граф-схема; регуляризация грамматик.
Для цитирования:
Федорченко Л. Н. Гомоморфизм эквивалентных преобразований грамматик, применяемый при генерации анализаторов языка // Вестник Бурятского государственного университета. Математика, информатика. 2019. № 2. С. 44-60.
Введение
При построении компилятора (или любого транслятора) разработчики реализуемого языка проводят эквивалентные преобразования грамматики исходного языка, необходимые, чтобы получить ту форму синтаксического определения языка, которая допускает автоматическую или ручную реализацию языка, а также учесть ограничения, диктуемые методом синтаксического анализа. Первая проблема возникает из-за разнообразия вида определений реализуемых языков, вторая — из-за языковой неоднозначности или недетерминированности распознающего автомата. Для этого следует так использовать информацию о языке, определяя его синтаксис и статическую семантику в виде специальной КС-грамматики (трансляционной) [1], чтобы помимо основной своей функции порождения цепочек языка грамматика позволяла задавать трансляции, необходимые разработчикам [1-3].
1 Эквивалентность КС-грамматик и гомоморфизмы
Под трансляцией из языка L1 cS в язык L2 сА называется отношение тс Li х L2. Здесь S — входной алфавит, L1 — входной язык, А — выходной алфавит, L2 — выходной язык. Другими словами, трансляция есть некоторое множество пар предложений (x, y), где xeL1 — входное, а yeL2 — выходное предложение.
Каждое преобразование, выполняемое на трансляционных КС-грамматиках [1-4] может задаваться как отношение подобия (гоморфиз-ма) [6], определяемое на классах грамматик. Такие отношения имеют непосредственную связь с сохранением семантического значения грамматических конструкций при эквивалентных преобразованиях синтаксиса (теорема Флойда), так как конечной целью трансляции является получение последовательности действий, предписываемых вычислительной среде (Environment), как одного из разделов спецификации трансляционной грамматики.
Из грамматик наиболее простыми для разработки являются регулярные грамматики типа 3 (по иерархии Хомского) [3], которые порождают регулярные языки, обрабатываемые конечными автоматами. На практике широко применяется грамматики типа 2-контекстно-свободные грамматики (КСГ), относительная простота которых позволяет применять для анализа КС-языков эффективные полиномиальные алгоритмы. Например, алгоритм Эрли (Early) [5] для КСГ имеет вычислительную сложность O (n ), где n — длина входной цепочки. Более сильные ограничения на КС-языки классов LL, LR, LALR дают возможность синтезировать анализаторы, имеющие линейную сложность разбора.
Перевод грамматик из одного класса в другой — это задача эквивалентных преобразований синтаксического описания языка.
Грамматика Эквивалентное преобразование Грамматика Анализатор для грамматики типа У Разбор для грамматики
типа X типа У типа X
Рис. 1. Схема применения эквивалентного преобразования при разборе
Таким образом, разработчики трансляторов и инструментальных систем, автоматизирующих процесс разработки, при настройке синтаксиса всегда стремятся преобразовать его таким образом, чтобы получить грамматику, принадлежащую к наиболее простому классу иерархии Хомского или к тому подклассу КСГ, для которого есть используемый в системе автоматического построения трансляторов метод синтеза анализатора языка.
При автоматизированном построении транслятора дополнительно к задаче приведения грамматики к необходимому способу спецификации приходится решать задачу разрешения конфликтов, связанных с языковой неоднозначностью или недетерминированностью распознающего устройства. Снять эти проблемы можно только с помощью эквивалентного преобразования грамматики или такого преобразования, которое восстановит первоначальную семантику с помощью гомоморфизмов (отношений на грамматиках).
В работах [7], [8], [9], [10], [11], [12], [13] подробно рассмотрены различные типы эквивалентных отношений — слабая и структурная эквивалентность, сильная структурная эквивалентность. Показано, что проблема сильной структурной эквивалентности алгоритмически разрешима, так как существует только конечное число нумераций, а для всякой такой нумерации скобочная версия О[ ] определяет простой детерминированный
язык (£-язык). Преобразование О[ ] в £ -грамматику прямое. Кореньяк,
Хопкрофт в [14] и Саломаа в [15] доказали, что проблема, порождают ли две £ -грамматики один и тот же язык, алгоритмически разрешима. Все эти и другие типы эквивалентных преобразований рассмотривались с точки зрения сложности грамматического разбора. С целью выразить отношение грамматического подобия более точно появилось много новых формальных понятий. В работах [16; 17] даны определения и описаны результаты для грамматических гомоморфизмов, изоморфизмов, слабых покрытий и т. д. В работах [18-21] даны определения и описаны результаты для грамматических гомоморфизмов, изоморфизмов, слабых покрытий и покрытий по Рейнольдсу. В этих определениях сделан акцент на правила грамматик, а не на множества выводов или грамматических разборов. Так, отношение гомоморфной эквивалентности КС-грамматик, являясь более тонким, чем отношение структурной, сильно структурной и частично структурной эквивалентности, может быть определено следую -щим образом:
КС-грамматика О = (N,Т,Р,£) называется гомоморфно эквивалентной грамматике О' = ^' ,Т',Р',£'), если существует гомоморфизм
у: О ® О' и Ц(О) = Ь(О'). В этом случае гомоморфизм у представляется тройкой отображений : О ® О', у2 : Т ® Т', уз : Р ® Р' и У1( ^) = ^'.
В работе [20] Грей и Харрисон определили понятие грамматического покрытия (разновидность гомоморфизма), которое описывает отношение между множествами деревьев вывода двух КС-грамматик. Интерес авторов к этому понятию был основан исключительно на его применении в области синтаксического анализа языков.
Если ограничиться моделью анализа, в которой каждое предложение исходного языка даётся описанием его деревьев вывода в виде строки правил грамматики (или меток, идентифицирующих эти правила), то соответствие двух КС-грамматик, которое описывается грамматическим покрытием, является отношением между такими описаниями деревьев вывода для данного предложения.
Результат синтаксического анализа можно считать аргументом семантического отображения. В случае когда КС-грамматика О' покрывает КС-грамматику О , разбор предложения w относительно О' может быть отображён гомоморфизмом на разбор той же w относительно О . Отсюда следует вывод, что язык ЦО) можно анализировать относительно преоб -
разованной грамматики О', а затем использовать первоначальное семантическое отображение, как на рис. 1.
Неформально говоря, основная идея в том, что та КС-грамматика О, которая «трудна» для анализа или не удовлетворяет определённым огра -ничениям, диктуемым методом синтаксического анализа, преобразуется в КС-грамматику О', которую можно анализировать более простым анали-затором. Последующий синтаксический анализ проводится относительно преобразованной О', а после этого результат анализа (разбора) отображается покрывающим гомоморфизмом на соответствующий разбор относи -тельно О .
Эквивалентное преобразование
ЦО) = Ь(О')
О'
we ЦО')
we Ц(О)
О
Разбор р р = у(р ') ^-покрывающий Разбор р'
~ гомоморфизм
Рис. 2. Схема эквивалентного преобразования с использованием покрытий Подводя итог вышесказанному, можно сказать, что в том случае, если синтаксические правила, которые подаются на вход инструментальной системе, не специфицируют грамматику, для которой выбранный тип анализатора может быть построен, возникают следующие ситуации:
- система диагностирует о своей неспособности построить анализатор и выдает информацию, почему она терпит неудачу; эта информация может быть использована разработчиком языка для того, чтобы изменить (не обязательно эквивалентно преобразовать) эти правила (и связанные с ними семантики) с целью сделать их подходящими для системы;
- система может применить эквивалентные преобразования к входной грамматике для того, чтобы сделать её адекватной методу. Но это должно делаться так, чтобы первоначальные семантики сохранялись;
- синтаксические правила на входе системы не специфицируют грамматику, которая годится для метода анализа, заложенного в инструментальной системе, но у разработчика есть возможность обеспечить систему дополнительной информацией (например, пополнить новыми правилами), достаточной для построения правильного анализатора.
Если синтаксические правила (с дополнительной информацией) не специфицируют грамматику желаемого типа, то система может принять решение, которое ведёт к успешному построению анализатора. Но эквивалентные преобразования могут изменять структуру грамматики. Это означает то, что преобразованная грамматика не обязательно выполняет тот же самый перевод к семантическим действиям, что и первоначальная (исходная грамматика). Для этого необходим покрывающий гомомор-физм, при котором, если преобразование делается таким образом, что можно провести разбор в терминах исходной грамматики, можно как бы «обмануть» пользователя инструментальной системы. Эта идея была проиллюстрирована на рис. 2.
2 Обобщение регулярной модели
Можно отказаться от модели с деревьями вывода в КС-грамматиках и обратиться к модели с вычислением значений регулярных выражений.
Формальной базой для построения трансляторов является методика, основанная на использовании КС-грамматик с обобщёнными регулярными выражениями и атрибутами в виде семантик для представления контекстных ограничений. Эта методика развивается в курсе лекций студентам СПбГУ и поддерживается пакетом программных приложений, реализованных на платформе Delphi. В качестве основы взят код специального инструментального средства SynGT, разрабатываемого с 2000 г. [2].
Формальной моделью методики построения языковых процессоров, описанной в [1-2], являются регулярные выражения и конечный автомат — в качестве адекватного средства их обработки.
Данная модель обобщена до применения для класса КСР-языков с использованием специальных магазинных автоматов [19; 21; 22]. КСР-язык порождается КСР-грамматикой — обобщением КС-грамматики. Основные определения были даны в работах [1; 2; 4]. Из теории [2] формальным языком является набор цепочек языковых токенов (лексем или терминалов) в соответствии с грамматикой языка.
Синтаксис языка описывается его контекстно-свободной составляющей в виде КС-правил и контекстно-зависимой (ограничения).
КС-правила представлены в виде обобщённых регулярных выражений (КСР-правила):
Нетерминал : обобщённое регулярное выражение . Регулярные выражения состоят из токенов (лексем), нетерминалов, регулярных операций (конкатенация, альтернативный выбор и обобщённая итерация), пустой цепочки ("") и скобок ("(" и ")").
- Конкатенация (","): A,B = AB.
- Альтернативный выбор (";"): A;B = либо A, либог B.
- Обобщённая итерация ( "#"): A#B = A; ABA; ABABA; ABABABA;
- Унарная итерация Клини ("*"): А* =...; A; AA; AAA;...
- Возможно пустое множество цепочек X: [ X ] = ( X; ) Обобщение конечно автоматной модели обработки языков сводится к
следующему:
- вводится итерация с разделителем (#) или обобщённая итерация, или итерация, которая не расширяет множество регулярных слов и может быть определена через традиционную (одноместную) операцию Клина (*) как (P#Q)=P,(Q,P;
- КСР-грамматика — обобщение КС-грамматики. Класс языков не расширяет, но снимает лишнюю структурированность языка;
- синтаксическая граф-схема (СГС) — графический аналог КСР-грамматики, стартовый объект для синтеза распознавателя (анализатора) языка, в терминах вершин которой удобно формулировать свойство детерминированности языка и возможные типы конфликтов (Shift/Reduce). СГС является промежуточной моделью между порож-дающей структурой, грамматикой и распознающей машиной, МП-автоматом.
3 Синтаксическая граф-схема (СГС)
Регулярные выражения в правых частях КСР-правил определяют бесконечное множество слов (регулярные множества), которые удобнее представлять в виде конечного ориентированного графа с метками в вершинах.
Такой граф считается порождающей конечно-автоматной схемой. В нём каждая вершина соответствует состоянию конечного автомата, а ее метка специфицирует порождаемый символ.
В синтаксической граф-схеме (СГС) каждому нетерминалу соответствует одна компонента — граф для нетерминала или одно правило КСР-грамматики, правая часть которого является обобщённым регулярным выражением над символами объединенного алфавита грамматики. В объединённый алфавит грамматики входят алфавиты терминалов, нетерминалов, семантик и, возможно, предикатов. СГС создается рекурсивно из графов для элементарных регулярных выражений и бинарных операций, подробно описанных в [1].
Одним из основных понятий в данной модели является понятие достижимости, с помощью которого формулируется вычисление множества слов (язык), порождаемых СГС. Дадим определения.
4 Достижимые вершины и понятие маршрута (пути) в синтаксической граф-схеме
Пусть дан алфавит V = {^1, Х2,____X«), « > 0.
Определение 4.1. Граф-схемой над алфавитом V называется конечная совокупность ориентированных графов Г = {Г^, Г2,..., Г к }, (к = 1,2,п), удовлетворяющая следующим условиям:
- в каждом графе Г/, V/ е {1,2,...,к}, выделены две вершины — входная и выходная, причем во входную вершину не входит, а из выходной вершины не выходит ни одна из дуг, а каждая из вершин, отличных от этих двух, помечена буквой из алфавита V ;
- графы Г/ для V/ е {1,2,...,к} не имеют между собой общих вершин и называются компонентами граф-схемы.
Входную и выходную вершины в каждом графе Г/ V/ е {1,2,..., к} обозначим Е/ и ^} соответственно. Пусть вершина а принадлежит
графу Г/ е Г .
Определение 4.2. Буква X из алфавита V, которой помечена вершина а , называется меткой вершины а и обозначается т(а), X = т(а).
Каждой вершине а такой, что (а Ф ), V/ е {1,2,...,к}, в граф-схеме Г поставим в соответствие множество вершин succ(a), смежных с данной вершиной: succ(a) = {р | р е Г}, причем существует дуга, началом которой является вершина а , а концом — вершина р }.
Любым двум вершинам а и р, принадлежащим графу Г/ е Г в граф-схеме Г , (а, р Ф ), можно поставить в соответствие множество слов Ц/(а,р), порождаемых маршрутами от вершины а к вершине р .
Определение 4.3. Множество слов Ц (а,р), порождаемых маршрутами от вершины а к вершине р, - это:
1. Пустое слово е е Ц (а,р), если а = р;
2. Слово х^е Ц- (а,р), если х е Ц (а, у), и существует вершина р графа Г/ такая, что р е succ(у) и т(р) = X .
*
Лемма 4.1. Слово х еV принадлежит множеству слов Ц (а,р) тогда и только тогда, когда существует последовательность вершин а0,а^,...,ак,(к > 0), графа Г/, такая, что а = а0, р = ак , а/ е succ(ai_l), т(а/) = X/, V/ е {1,2,...,к} и х = Х1Х2 - -Хк .
Обозначим через Ь/ - множество слов, порождаемых всеми маршрутами в графе Гi еГ, начинающихся из входной вершины Ei графа Гi,
Ц = и Ц (Е/ ,Р).
Fiеsuccф)
Следствие 4.1. Слово х в алфавите V принадлежит множеству Ц тогда и только тогда, когда существует последовательность вершин графа Г/, ао,а},...,а^ (к > 0) такая, что ао = Ei, Fi е тсс(ак), а/ е 5мсс(аг--1), т(а/) = X , V/' е {1,2,...,к} и х = Х1Х2 •••Хк .
Очевидно, что для любого графа Г/ множество слов Ь/ регулярно.
В работе [1] есть строгие доказательства этих утверждений и подробно рассмотрен вопрос однозначности регулярных выражений.
Далее построим граф-схему для нетерминала в КСР-грамматике О . Для этого условимся в дальнейшем алфавитом V считать объединение алфавитов нетерминалов, терминалов и пустой буквы, то есть V = N и Т и {1} . В дальнейшем алфавит V будет расширяться за счет добавления новых символов-понятий — вспомогательных нетермина -лов, семантик, предикатов и других.
Тогда если метка вершины а , т(а) из алфавита N, то а называется нетерминальной вершиной; если т(а) из алфавита Т, то а — терминальная вершина; если т(а) = 1, то а — пустая вершина.
Определение синтаксической граф-схемы для КСР -грамматики О будем вести последовательно: сначала опишем способ построения графа Га для всякого регулярного выражения А над алфавитом V, затем определим граф для нетерминала из алфавита N КСР -грамматики О .
Построение графа ГА проводится индуктивно следующим образом: для элементарных выражений (е и X е V) соответствующие графы пока -заны на рис. з, 4. Семантики будем отображать на дугах, для них графическое представление дано на рис. 5.
В работе [1] дан рекуррентный алгоритм построения синтаксической граф-схемы. В начале строится граф ГАдля регулярных выражений с операциями конкатенации, объединения и обобщённой итерации, формулируются леммы о равенстве множества слов (языка), порождаемого регулярным выражением А и графом ГА.
Введение синтаксической граф-схемы в качестве механизма порожде -ния цепочек языка вызвано следующими соображениями:
- являясь адекватным регулярному выражению (Лемма 2.2.) в [1], граф нагляднее отражает синтаксическую структуру КС -языка и не вводит лишнюю рекурсивность (структурированность) в его спецификацию;
- из граф-схемы проще извлекать информацию о порождающих цепочках, рассматривая маршруты в графах, а не деревья вывода в традиционных грамматиках;
- в терминах вершин удобней описать состояния автомата (анализатора) языка, порождаемого синтаксической граф-схемой;
- с дугами граф-схемы удобно связать вызовы процедур из специального раздела(Епу1гопшеп1;) спецификации грамматики;
- использовать более простую структуру, чем вывод в КС -грамматике, а именно маршрут или путь в синтаксической граф-схеме, в терминах которого формулируются и проверяются ограничения на класс грамматик с эффективным анализом (линейной сложности разбора).
Определим множество слов (язык) — ЬО, порождаемых синтаксической граф-схемой ГО для КСР-грамматики О = N Т, Р, £}.
Пусть ГА — граф для нетерминала А из словаря N. Определим рекурсивно множество Н(Л) — начальных вершин графа ГА: Определение 4.1
1. Если а — вершина графа ГА и aеsucc(EA), то а — начальная вершина графа ГА для нетерминала А, аеН(А);
2. Если аеН(А) — нетерминальная вершина в ГО, ш(а)=В и в — начальная вершина графа Гв, то есть в еН(В), то в — начальная вершина графа ГА, т.е. в еН(А).
Аналогично определим множество конечных вершин К(А) графа Га : Определение 4.2
1. Если а — вершина графа Га и выходная вершина Га е succ(a), то а — конечная вершина графа Г а для нетерминала А, а е К (А);
2. Если а е К(А), а — нетерминальная вершина в Го , т(а) = В и вершина р е К (В), то вершина р е К (А).
Введем понятие пути (маршрута), соединяющего две вершины в синтаксической граф-схеме ГО и определим отношение достижимости на множестве терминальных вершин.
Определение 4.3
Между терминальными вершинами а^ и а2 в синтаксической граф-схеме Го , существует путь (маршрут), если выполняется одно из следующих условий:
1. Вершины а^, а2 — смежные, принадлежат одной и той же компоненте Г а для некоторого А е N, и а2 е з^^а^). Тогда путь Ра1а 2 от вершины а1 к вершине а2 имеет вид:
Ра1а2 = {а2 } .
2. Существует нетерминальная вершина р , смежная с вершиной а1, ре succ(a-[), такая, что т(р) = В, а терминальная вершина а2 — начальная вершина в графе для нетерминала В, а2 е Н(В).
В этом случае путь Ра,а2 от вершины а^ к вершине а2 имеет вид:
Ра1а2 = {Р} "Рр, где
a) если а2 принадлежит графу Г в, то есть а2 е $псс(Ев), то
РР =РЕв а2 = {®Я а2 ,} , где «н — специальный символ, обозначающий след прохождения через входную вершину графа для нетерминала;
b) если существует нетерминальная вершина уе Гв, т(у) = С, у е succ(Ев), и вершина а2 е Н(С), то
РР =РЕВ у"Ру = {«Н У}"Ру .
3. а1 — конечная вершина графа Г в, и а2 е .^^Р), где Р — нетерминальная вершина и т(Р) = в . Тогда путь от вершины а^ к вершине а2 имеет вид:
Ра1 а2 =Р(1р1 " {а2} ,где
a) если а1 — вершина графа Г в, т. е. Fв е succ(al), то путь
<={«к рЬ
где «к — специальный символ, обозначающий след прохождения через выходную вершину графа для соответствующего нетерминала;
b) если а1 — вершина графа Гс , т. е. Fc е succ(al) и существует нетерминальная вершина у, т(у) = С и у е К (в), то
< = {«к у}"Рр.
4. Вершина а1 — конечная в графе Гв, то есть а1 е К (в), а2 — начальная вершина графа ГС , т. е. а2 е Н(С) и существуют нетерминальные вершины Р и у в графе Га , такие что т(Р) = в, т(у) = С и у е , тогда путь между вершинами а^ и а2 имеет вид:
Ра1 а 2 =Р0!1 " {у} "Ру .
Определение 4.4
Терминальная вершина а2 достижима из терминальной вершины а1 в
синтаксической граф-схеме Г о , (обозначение а^ ®а2 или а^ ®а2,
О
если О подразумевается), если существует путь (маршрут) Ра1а2 из вершины а1 к вершине а2 .
Заданное таким образом отношение достижимости на множестве вершин в граф-схеме ГО позволяет рассматривать ГО как порождающую схему, в которой путь определяется множеством цепочек вершин, являющихся классом эквивалентности по отношению равенства @ .
4.1 Отношение эквивалентности
Рассмотрим множество всех вершин в синтаксической граф-схеме Го . Исключим из него все входные и выходные вершины компонент графов и добавим два новых элемента «н, и «к, где «н, заменяет все входные, а «К — выходные вершины. Полученное множество обозначим 3 .
Рассмотрим расширенный алфавит 3 и {О} . Определим отношение эквивалентности = на множестве слов в этом расширенном алфавите следующей системой равенств. Определение 4.5
Пусть а и р — любые нетерминальные вершины в множестве 3, х — цепочка терминальных вершин, X, У — произвольные цепочки в алфавите 3 и {О}. Тогда отношение эквивалентности = на множестве всех маршрутов синтаксической граф-схемы имеет вид:
Х«нХ«кУ = ХхУ
ГХхУ при а = р
Ха«Нх«Кру
[О при а^р ХОУ = О, X = X .
По определению для каждого класса эквивалентности существует свой представитель. Будем считать путь в синтаксической граф-схеме Го множеством цепочек вершин, являющихся классом эквивалентности по данному отношению эквивалентности =, а представлять его представителем данного класса. Тогда произведение путей Р^ и Р2 в синтаксической граф-схеме Го — это множество цепочек Р^ ■ Р2 , которое также является путем в граф-схеме Го .
Обозначим через рх — путь Ра0 а1 " Ра1 а2 " -••" Рап-1 ап , где
а,--1 ®а,, т(а,) = Х, "I е{1,2,..., к} и х = Х1Х2---Хп ■
О
Тогда Рх — путь, порождающий слово х — это множество цепочек, состоящих из нетерминальных, терминальных вершин и символов
«Н, «К .
Двум терминальным вершинам а и р, принадлежащим синтаксической граф-схеме Го , поставим в соответствие множество слов ¿Го (а, р),
определяемое следующим образом:
1. ее ¿Го (а, р), если а = р, в этом случае Рар = е ,
2. Если х еЬго (а, у), существует вершина р, такая что
у®р, т(р) = Х, и существует путь Рур, такой что Рх -Рур^О то
О
хХ е ¿го (а,р).
Обозначим Lgg (Ea ) = U (Ea , b). Если A = S , то Lp„ (Es)
G beK (A) G
будем обозначать Lyg .
Лемма 4.1. Слово x в алфавите терминалов T принадлежит множеству LyG (a,b) тогда и только тогда, когда существует последовательность
терминальных вершин ag, ai,---, a k и последовательность путей
Pj,P2,k,Pk в синтаксической граф-схеме Tg , такие что ag = a, ak = b,
m(a.) = Xi, a;-i ®a. R @P„. . a. , "1 e {1,2,...,k}, x = X1X2-Xk и G 1-1 1
px = p1 ■ P2 - Pk, причем Px Ф W .
Строгое доказательство леммы можно найти в [1] и в брошюре [19]. Следствие 2.4. Слово x в алфавите T принадлежит множеству Lg (Ea ) тогда и только тогда, когда существует последовательность терминальных вершин ag,aj,-,ak в Tg и последовательность путей
Pj, Р2, -, Pk в Tg , такие что ag = Ea , ak e K(A), a.®ak,
G
m(a1) = Xl, Р1 = pa.-1a1 , e {1,2,..., k}, x = XlX2 - Xk и
Px = Pj ■ Р2 - Pk, причем существуют нетерминальные вершины bl,b2,-b/, в Tg , "1 e {1,2,...,/}, что
px ■ wKb1 ■ wKb2 ■ - ■ wKb/ = a1a2 -ak
Множество Lg — это множество слов, порождаемых синтаксической граф-схемой Tg . Из вышесказанного можно заключить, что отношение достижимости на вершинах Tg отражает возможную последовательность букв в порождаемом слове.
Путь Px содержит последовательность вершин в Tg , первый и последний элементы которой являются входной и конечной вершинами в Ts и каждый элемент достижим из предыдущего (если таковой имеется), а соответствующая последовательность меток вершин представляет буквы
слова x .
5 Эквивалентное преобразование КСР-грамматик
При построении транслятора разработчики решают следующие задачи: упрощение грамматики; регуляризация грамматики; разрешение конфликтов, возникающих в процессе построения анализатора и связанных с языковой неоднозначностью (как синтаксической, так и семантической) и недетерминированностью магазинного автомата. Упрощение грамматики — это предварительная подготовка грамматики, проверка на правильность записи регулярных выражений, формирование приведённой грамматики (well-formed);
Регуляризация грамматики — это необходимая часть полного цикла разработки транслятора, которая заключается в пошаговом выполнении базисных преобразований исходной грамматики в новую КСР-грамматику, причем такую, что из нее исключаются леворекурсивные и несамовстав ленные нетерминалы. Определяющие правила для этих нетерминалов исключаются также. В этом случае грамматика преобразуется в грамматику с одним правилом, правая часть которого является сложным по композиции операций регулярным выражением над терминалами и контекстными символами (семантиками). Значением этого регулярного выражения является регулярный язык. Напомним, что вывод в КСР-грамматике заменяется вычислением значений соответст -вующих регулярных выражений. Алгоритмы исключения рассмотрены в работах [1; 2; 4]. При этом синтезированный МП-преобразователь может выродиться в конечно-автоматный. Далее дадим пример такого автоматического исключения несамовставленных нетерминалов для версии языка CIAO [23], выполненного в системе SynGT. Правила грамматики языка CIAO
P : N E [A] [R] U W [D] L .
N : '<p_num>' '<p_nm>' Sopen .
E : 'EVENT' ( '<e_nm>' Sel '(' ( $at1 ; '<tag>' ':' '<type>' Sat4 ) ')' )# .
A : 'ACTION' ( '<a_nm>' Sacl '(' ( Satl ; '<tag>' ':' '<type>' Sat4 ) ')' )# .
R : 'REQUEST' ( '<r_nm>' Srl '(' ( Satl ; '<tag>' ':' '<type>' Sat4 ) ')' ':' '<type>' Sr2 )# .
U : 'STATE' ('<u_nm>' Sstl '->' (( '<e_nm>' Sul '(' (Satl ; '<val>' Sat2) ')' ) ; ( 'after' '(' '<val>' 's' ')' Safter )) (Sac2 ; Action) '->' ('<u_nm>' ; '<d_nm>') Sst2)# Su2 .
W : 'WAGGLY' 'entry' '->' '->' '<u_nm>' Sentry .
D : 'DECISION' ( '<d_nm>' Sdl '->' '(' '[' '<r_nm>' Scl '(' (Satl ; '<val>' Sat2) ')' ']' (Sac2 ; Action) '->' ( '<u_nm>' ; '<d_nm>' Sst3 ) Sst2 '|' Selse (Sac2 ; Action) '->' ( '<u_nm>' ; '<d_nm>' Sst3 ) Sst2 ')' )# Sd2 .
L : 'LINK' ( '<f_num>' '<p_num>' '<e_nm>' Slnkl )#
( ; '<p_num>' '<t_num>' ( '<a_nm>' ; '<r_nm>' ) Slnk2 )# Sclose .
Action : '/' ( '<a_nm>' Sac3 '(' ( Satl ; '<val>' Sat2 ) ')' )#( ',' ) .
Грамматика CIAO (после эквивалентных преобразований) с одним правилом для нетерминала P
P : '<p_num>' , '<p_nm>' , Sopen , 'EVENT' ,
( '<e_nm>' , Sel , '(' , ( Satl ; '<tag>' , ':' , '<type>' , Sat4 ) , ')' )*@ ,
( @ ; 'ACTION' , ( '<a_nm>' , Sacl , '(' , ( Satl ; '<tag>' , ':' , '<type>' , Sat4 ) , ')' )*@ ) ,
( @ ; 'REQUEST' , ( '<r_nm>' , Srl , '(' , ( Satl ; '<tag>' , ':' , '<type>' , Sat4 )
i / i • i
'<type>' , Sr2 )*@ ) ,'STATE' , ( '<u_nm>' , Sstl , '->' , ( '<e_nm>' , Sul ,
'(' , ( Satl ; '<val>' , Sat2 ) , ')' ; 'after' , '(' , '<val>' , 's' , ')' , Safter ) ,
( Sac2 ; '/' , ( '<a_nm>' , Sac3 , '(' , ( Satl ; '<val>' , Sat2 ) , ')' )*',' ) ,
'->' , ( '<u_nm>' ; '<d_nm>' ) , $st2 )*@ , $u2 , 'WAGGLY' , 'entry' , '->' , '-
>' ,
'<u_nm>' , $entry , ( @ ; 'DECISION' , ( '<d_nm>' , $d1 , '->' , '(' , '[' , '<r_nm>' , $c1 , '(' , ( $at1 ; '<val>' , $at2 ) , ')' , ']' , ( $ac2 ; '/' , ( '<a_nm>' , $ac3 , '(' , ( $at1 ; '<val>' , $at2 ) , ')' )*',' ) , '->' , ( '<u_nm>' ; '<d_nm>' , $st3 ) , $st2 , '|' , $else , ( $ac2 ; '/' , ( '<a_nm>' , $ac3 , '(' , ( $at1 ; '<val>' , $at2 ) , ')' )*',' ) , '->' , ( '<u_nm>' ; '<d_nm>' , $st3 ) , $st2 , ')' )*@ , $d2 ) , 'LINK' , ( '<f_num>' , '<p_num>' , '<e_nm>' , $lnk1 )*@ ,
( @ ; ('<P_num>' , '<t_num>' , ( '<a_nm>' ; '<r_nm>' ) , $lnk2 )*@ ) , $close EOGram!
Заключение
В работе представлена схема автоматического построения анализаторов языков класса LL(1) с использованием синтаксических граф-схем. Обосновано понятие вывода в грамматиках в регулярной форме как класса эквивалентности на всех маршрутах в СГС. Подчёркнута важность эквивалентных преобразований, выполняемых автоматически. В качестве примера приведено эквивалентное преобразование с удалением несамо-вставленных нетерминалов в КСР-грамматике формального языка CIAO, выполненное в системе SynGT.
Литература
1. Fedorchenko L. Regularization of Context-Free Grammars. Saarbrucken: LAP LAMBERT Academic Publishing, 2011. 180 p.
2. Fedorchenko L., Baranov S. Equivalent Transformations and Regularization in Context-Free Grammars // Cybernetics and Information Technologies (CIT). Sofia, 2015. Vol. 14, No. 4. P. 11-28.
3. Ахо А. В., Сети Р., Ульман Д. Д. Компиляторы: принципы, технологии и инструменты. М.: Вильямс, 2001. 768 с.
4. Федорченко Л. Н. Регуляризация контекстно-свободных грамматик на основе эквивалентных преобразований синтаксических граф-схем // Труды СПИИРАН. 2010. Вып. 4(15). С. 213-230.
5. Early J. Ambiguity and precedence in syntax description // Acta Informatica. 1975. Vol. 4, Iss. 2. P. 183-192.
6. Федорченко Л. Н. Эквивалентность как отношение подобия в трансляции языков // Вестник Бурятского государственного университета. 2014. № 9-3. С. 49-53.
7. Mc Naughton R. The development of formal language theory since 1956 // Internat. J. Found. Comput. Sci. 1990. Vol. 1, No. 4. P. 355-368.
8. Paull M. C., Unger S. H. Structural equivalence of context-free grammars // Journal of Computer and System Sciences. 1968. Vol. 2, Iss. 4. P. 427-463.
9. Paull M. C., Unger S. H. Structural Equivalence of LL-k Grammars// IEEE Conference Record of Ninth Annual Symposium on Switching and Automata Theory. 1968. P. 160-175.
10. Prather R. E. Regular Expressions for Program Computations // American Mathematical Monthly. 1997. Vol. 104, No. 2. P. 120-130.
11. Kenichi T., Tadao K. A Result on the Equivalence Problem for Deterministic Pushdown Automata // J. Comput. Syst. Sci. 1976. Vol. 13, Iss. 1. P. 38-50.
12. Ginsburg S. A survey of grammar forms // Acta Cybernetica. 1977. Vol. 3, No. 4. P. 269-280.
13. Ginsburg S., Harrison M. A. Bracketed context free languages // J. Comput. Syst. Sci. 1967. Vol. 1, Iss. 1. P. 1-23.
14. Korenjak A. J., Hopcroft J. E. Simple deterministic languages // IEEE Conf. Record of 7th Annual Symposium on Switching and Automata Theory. 1966. P. 36-46.
15. Salomaa K., Yu S. Decidability of structural equivalence of E0L grammars // Theoretical Computer Science. 1991. Vol. 82, Iss. 1. P. 131-139.
16. Cremers A. B., Ginsburg S. Context-free grammar forms // J. Comput. Syst. Sci. 1975. Vol. 11, Iss. 1. P. 86-117.
17. Hotz G. Normal-form transformations of context-free grammars // Acta Cybernetica. 1978. Vol. 4, No. 1. P. 65-84.
18. Hunt III H. B., Rosenkrantz D. J. Complexity of grammatical similarity relations // Procs of a Conf. on Theoretical Computer Science. Waterloo, Canada, 1977. P. 139-145.
19. Федорченко Л. Н., Мартыненко Б. К. Эквивалентные преобразования КСР-грамматик в регулярной форме в практике построения языковых процессоров. Ч. 1. Определение и распознавание КСР-языков посредством синтаксических граф-схем. Л., 1983. 46 с.
20. Gray J. N., Harrison M. A. On the covering and. reduction problems for context free grammars // Journal of the Association for Computing Machinery. 1972. Vol. 19, Issue 4. P. 675-698.
21. Martynenko B. K. Regular Languages and CF Grammars // Computer Tools in Education. 2012. No. 1. P. 14-20.
22. Федорченко Л. Н. Алгоритмы построения состояний анализатора для КСР-языка // Вестник Бурятского государственного университета. Математика, информатика. 2016. № 4. С. 23-33.
23. Федорченко Л. Н., Афанасьева И. В. Метод описания систем со сложным поведением на принципах обобщённых автоматов // Вестник Бурятского государственного университета. Математика, информатика. 2018. № 4. С. 22-36. DOI: 10.18101/2304-5728-2018-4-22-36.
HOMOMORPHI SM OF EQUIVALENT TRANSFORMATIONS OF GRAMMARS IN PARSER GENERATION
Lyudmila N. Fedorchenko
Cand. Sci. (Engineering), A/Prof., Senior Researcher,
St. Petersburg Institute for Informatics and Automation RAS (SPIIRAS),
39 14th Line of V. O., St. Petersburg 199178, Russia
St. Petersburg State University
7/9 Universitetskaya Emb., St. Petersburg 199034, Russia E-mail: [email protected]
When constructing a translator, as a rule, it is necessary to apply the equivalent transformations of grammar of the implemented language, which convert the syntactic specification of the language into a form that allows for automatic or manual implementation of the source language, and solves the problem of constraint satisfaction of the chosen parsing technique. These problems arise both because of the variety of ways of defining the implemented languages, and because of the language ambiguity or nondeterminism of the recognizing automaton. Each transformation performed on translational CF-grammars can be defined as a likelihood ratio (homomorphism), determined on classes of grammars. Such relations preserve the semantic meaning of grammatical structures in equivalent syntax transformations, since the ultimate purpose of translation is to obtain a sequence of actions prescribed by the computing environment.
The article presents a brief overview of various types of likelihood ratio over grammars used in constructing translators since the 1970s.
A flow chart for LL parsing with use of syntactic graph scheme (SGS) is presented. We have given a formal notion of a route (path) in the SGS and an example of the automatic CFR-grammar transformation of CIAO formal language in SynGT (Syntax Graph Transformations) system of equivalent transformations. Keywords: equivalent transformations of grammars; likelihood ratio; cover homomorphism; CF-grammar in a regular form (CFR-grammar); syntactic graph scheme (flow-chart); grammar regularization.
References
1. Fedorchenko L. Regularization of Context-Free Grammars. Saarbrucken: LAP LAMBERT Academic Publishing, 2011.
2. Fedorchenko L., Baranov S. Equivalent Transformations and Regularization in Context-Free Grammars. Cybernetics and Information Technologies (CIT). V. 14. No. 4. Pp.11-28.
3. Aho A. V., Sethi R., Ullman J. D. Compilers, Principles, Techniques, and Tools. Addison-Wesley, 1986.
4. Fedorchenko L. N. Regulyarizatsiya kontekstno-svobodnykh grammatik na os-nove ekvivalentnykh preobrazovanii sintaksicheskikh graf-skhem [Regularization of Context-Free Grammars Based on Equivalent Transformations of Syntactic Graph-Schemes]. Trudy SPIIRAN. 2010. V. 4 (15). Pp. 213-230. ISSN 2078-9181.
5. Early J. Ambiguity and Precedence in Syntax Description. Acta Informatica. 1975. No. 4. Iss. 2. Pp. 183-192.
6. Fedorchenko L. N. Ekvivalentnost kak otnoshenie podobiya v translyacii yazykov [Equivalence as a Likelihood Ratio in Language Translation]. VestnikBuryat-skogo gosudarstvennogo universiteta. 2014. No. 9-3. Pp. 49-53.
7. Mc Naughton R. The Development of Formal Language Theory Since 1956. Int. J. Found. Comput. Sci. 1990. V. 1. No. 4. Pp. 355-368.
8. Paull M., Unger S. Structural Equivalence of Context-Free Grammars. Journal of Computer and System Sciences. 1968. Vol. 2. Pp. 427-463.
9. Paull M. C., Unger S. H. Structural Equivalence of LL-k Grammars. IEEE Conference Record of Ninth Annual Symposium on Switching and Automata Theory. 1968. Pp. 160-175.
10. Prather R. E. Regular Expressions for Program Computations. American Mathematical Monthly. 1997. V. 104. No. 2.
11. Kenichi Taniguchi, Tadao Kasami. A Result on the Equivalence Problem for Deterministic Pushdown Automata. J. Comput. Syst. Sci. 1976. V. 13. No. 1. Pp. 3850.
12. Ginsburg S. A Survey of Grammar Forms. Acta Cybernetica. 1977. V. 3. No. 4. Pp. 269-280.
13. Ginsburg S., Harrison M. A. Bracketed Context Free Languages. J. Comput. Syst. Sci. 1967. V. 1, Iss. 1. Pp. 1-23.
14. Korenjak A. J., Hopcroft J. E. Simple Deterministic Languages. IEEE Conf. Record of 7th Annual Symposium on Switching and Automata Theory. 1966. Pp. 36-46.
15. Salomaa K., Yu S. Decidability of Structural Equivalence of E0L Grammars. Theoretical Computer Science. 1991. V. 82. Iss. 1. Pp. 131-139.
16. Cremers A. B., Ginsburg S. Context-Free Grammar Forms. J. Comput Syst. Sci. 1975. Vol. 11, Iss.1. Pp. 86-117.
17. Hotz G. Normal-form Transformations of Context-Free Grammars. Acta Cybernetica. 1978. Vol. 4. No. 1. Pp. 65-84.
18. Hunt III H. B., Rosenkrantz D. J. Complexity of Grammatical Similarity Relations. Proc. Conf. on Theoretical Computer Science (Waterloo, Canada). 1977. Pp. 139-145.
19. Fedorchenko L. N., Martynenko B. K. Ekvivalentnye preobrazovaniya KSR grammatik v regulyarnoi forme v praktike postroeniya yazykovykh protsessorov. Chast pervaya. Opredelenie i raspoznavanie KSR-yazykov posredstvom sintaksicheskikh graf-skhem [Equivalent Transformations of CF-Grammars in a Regular Form in the Practice of Constructing Language Processors. Part one. Definition and Recognition of CFR-languages by Means of Syntactic Graph-Schemes]. Leningrad, 1983.
20. Gray J. N., Harrison M. A. On the Covering and Reduction Problems for Context Free Grammars. Journal of the ACM. 1972. V. 19. Iss. 4. Pp. 675-698.
21. Martynenko B. K. Regular Languages and CF-Grammars. Computer Tools in Education. 2012. No. 1. Pp. 14-20.
22. Fedorchenko L. N. Algoritmy postroeniya sostoyanii analizatora dlya KSR-yazyka [Algorithms for Construction of Analyzer States for CFR-Language]. Vestnik Buryatskogo gosudarstvennogo universiteta. Matematika, informatika. 2016. No. 4. Pp. 23-33.
23. Fedorchenko L. N., Afanasyeva I. V. Metod opisaniya sistem so slozhnym pov-edeniem na printsipakh obobshchennykh avtomatov [A Method for Describing Systems with Complex Behavior on the Principles of Generalized Automata]. Vestnik Buryat-skogo gosudarstvennogo universiteta. Matematika, informatika. 2018. No. 4. Pp. 2236.