Научная статья на тему 'Анализ синтаксических диаграмм и синтез программ-распознавателей линейной сложности'

Анализ синтаксических диаграмм и синтез программ-распознавателей линейной сложности Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
325
51
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
ТРАНСЛЯТОР / ДЕТЕРМИНИРОВАННАЯ СИНТАКСИЧЕСКАЯ ДИАГРАММА / МНОЖЕСТВО ВЫБОРА / ПРОГРАММА-РАСПОЗНАВАТЕЛЬ

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Рязанов Ю. Д., Севальнева М. Н.

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

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «Анализ синтаксических диаграмм и синтез программ-распознавателей линейной сложности»

УДК 519.685.3

АНАЛИЗ СИНТАКСИЧЕСКИХ ДИАГРАММ И СИНТЕЗ ПРОГРАММ-РАСПОЗНАВАТЕЛЕЙ ЛИНЕЙНОЙ СЛОЖНОСТИ

Белгородский государственный технологический университет им. В.Г. Шухова

Ю.Д. РЯЗАНОВ М.Н. СЕВАЛЬНЕВД

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

e-mail:

Ryazanov.iurij@yandex.ru

Ключевые слова: транслятор, детерминированная синтаксиче ская диаграмма, множество выбора, программа-распознаватель.

Введение. Одним из удобных способов описания формальных языков является синтаксическая диаграмма (СД). Этот графический, оперирующий образами способ ориентирован на человека и в основном применялся в руководствах по языкам программирования [1]. Сейчас известны примеры использования СД при инженерном, ручном проектировании трансляторов [2—6]. В системах автоматизированного построения трансляторов [7—10] СД не применяются. Как правило, спецификация транслятора в этих системах представляется в нотации РБНФ, выполняется классическое проектирование транслятора [и] и его реализация с использованием алгоритмов линейной сложности, если это позволяет исходная РБНФ, либо с использованием универсальных алгоритмов более высокой сложности, таких как ОЬЫ, ИХ или алгоритмов с возвратами.

Здесь дается формальное определение СД, позволяющее использовать табличное представление СД, удобное для автоматической обработки, определяется класс детерминированных СД, которые можно преобразовать в программы линейной сложности, предлагаются алгоритмы анализа таблиц СД с целью определения принадлежности СД классу детерминированных СД и алгоритм преобразования таблиц детерминированных СД в программу-распознаватель линейной сложности.

Табличный способ представления СД и предложенные алгоритмы ориентированы на их использование в системах автоматизированного проектирования трансляторов.

Определение синтаксической диаграммы. Синтаксическую диаграмму будем задавать четверкой И = (Т, в, С), где Т — конечное множество терминалов; N — конечное множество нетерминалов; БеЫ — начальный нетерминал; С = (V, Е) — ориентированный граф, где

У = Уг и Улг и Уи и Увход ^ Увыход, ГДв

Увход — множество точек входа, | Увход\ = |ЛГ|;

Ут — множество терминальных вершин;

Улг — множество нетерминальных вершин;

Уи — конечное множество узлов;

Увыхо,) — множество точек выхода, | У<1Ыхп<)\ = |ЛГ|;

Е = Ег и Е2 и Е3 и Е4 и Е-„ где

Е, с{(а, Ь) | аеУвход, ЬеУи} — множество входных дуг;

Е2 с {(а, Ь) | аеУи, ЬеУвЫход} — множество выходных дуг;

Е3 с {(а, Ь) | аеУи, Ъе УгиУ\} — множество дуг, выходящих из узлов;

£4 с {(а, Ь) | ае УгиУм, ЬеУи} — множество дуг, входящих в узлы;

Е5 с {(а, Ъ) | ае Уи, ЬеУи} — множество е-дуг, соединяющих узлы.

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

Таблицы синтаксических диаграмм. Синтаксическую диаграмму И можно представить множеством таблиц Т, по одной для каждой компоненты.

Определим функцию Я : и —* {1, 2,..., |Уи|} разметки узлов, которая каждому узлу синтаксической диаграммы ставит во взаимнооднозначное соответствие элемент из множества {1, 2,..., | Уи|}.

Компоненту А синтаксической диаграммы будем представлять одноименной таблицей А, содержащей т строк и л столбцов, где п — количество узлов в компоненте А, пг = | Т'| + |ЛГ| +1. Столбцы таблицы соответствуют узлам и отмечаются метками в соответствии с функцией Я. Столбцы, соответствующие начальным узлам, отмечаются стрелочками. Столбцы, соответствующие заключительным узлам, отмечаются симво-

Серия История. Политология. Экономика. Информатика. 2013 №7 (150). Выпуск 26/1

лом 1. Строки отмечаются терминалами, нетерминалами и символом г. Каждый элемент таблицы содержит некоторое, возможно пустое, множество меток.

Пустая таблица А заполняется по следующим правилам. Если в диаграмме компоненты из узла с меткой I существует путь в узел с меткой7, проходящий только через одну терминальную вершину с терминалом аеТ, то в элемент таблицы Аа^ добавляем метку/ Если из узла с меткой i существует путь в узел с меткой / проходящий только через одну нетерминальную вершину с нетерминалом ВеЛг, то в элемент таблицы Ащ добавляем метку/ Если существует е-дуга из узла I в узел/ то в элемент таблицы Л-,; добавляем метку / Синтаксическая диаграмма (см. рис. 1) в табличной форме представлена в табл. 1.

Таблица 1

Табличное представление синтаксической диаграммы

В 1

9 ю 11

а

Ъ

с

с1 и

е 10

5

А

В 11

5 Ф 1

1 2 3 4

а 3

Ъ

с 4

с1

е

5

А 2

В 4 2

А Ф1 1

5 6 7 8

а 5

Ъ 6

с

с1 8

е

5

А

В 7 8

Вывод в синтаксической диаграмме. Пусть в компоненте А синтаксической диаграммы существует путь I от точки входа до точки выхода. Если начать движение по этому пути и, проходя через терминальную или нетерминальную вершину, переписывать символ из вершины в некоторую изначально пустую цепочку а, то по окончании движения, когда придем в точку выхода, будет сформирована цепочка а, соответствующая пути I. Если путь I от точки входа до точки выхода не проходит ни через одну терминальную или нетерминальную вершину, то цепочка а пустая.

Пусть Ьа — множество всех путей от точки входа до точки выхода в компоненте А. Определим функцию Р: Ьа —> си, которая каждому пути 1е Ь\ ставит в соответствие цепочку а по описанному выше правилу.

Выводимые в СД цепочки определим следующим образом:

1) цепочка 5 — выводимая, где 5 — начальный нетерминал;

2) если цепочка уАР выводимая, где у и (3 — цепочки, состоящие из терминалов и нетерминалов, возможно пустые, а А — нетерминал, и некоторая цепочка ае си, то цепочка усф выводимая. Цепочка усх(3 получается из цепочки уД(3 путем замены нетерминала А на цепочку ае си-

Будем говорить, что цепочка уа{3 непосредственно выводится из уДР и записывать уАР => уар. Выводимая в СД цепочка, содержащая хотя бы один нетерминал, называется промежуточной, а цепочка, не содержащая нетерминалов — терминальной.

Выводом в СД называется последовательность замен нетерминалов А в промежуточных цепочках на цепочки аеси. Вывод заканчивается получением терминальной цепочки. Терминальная цепочка принадлежит языку, заданному синтаксической диаграммой.

Если на каждом шаге вывода заменяется самый левый нетерминал в промежуточной цепочке, то вывод называется левым.

Псевдодетерминированные синтаксические диаграммы.СД назовем псевдодетерминированной, если все ее компоненты псевдодетерминированные.

Серия История. Политология. Экономика. Информатика. 2013. №7 (150). Выпуск 26/1

Компоненту СД назовем псевдодетерминированной, если:

1) содержит только один начальный узел;

2) не имеет £-дуг;

3) все ее узлы — псевдодетерминированные.

Узел и компоненты А синтаксической диаграммы назовем псевдодетерминиро-ванным, если любые две дуги, выходящие из узла и, входят в вершины, содержащие различные символы.

Отличительной особенностью таблицы А псевдодетерминированной компоненты является следующее:

1) имеет только один начальный узел;

2) все элементы в строке £ — пустые;

3) в остальных строках таблицы элементы либо пустые, либо одноэлементные множества.

Любую СД можно преобразовать в эквивалентную ей псевдодетерминирован-ную диаграмму [12].

Детерминированные синтаксические диаграммы.СД назовем детерминированной, если все ее компоненты — детерминированные.

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

Узел и назовем детерминированным, если множества выбора (определяется ниже) любых двух дуг, выходящих из узла и, не пересекаются. Отметим, что дуги, выходящие из заключительного узла псевдодетерминированной компоненты СД, могут идти в терминальную, нетерминальную вершину или в точку выхода.

Процесс левого вывода терминальной цепочки в СД можно представить как «движение» по дугам от точки входа начальной компоненты к ее точке выхода. При этом если дуга идет в терминальную вершину, то вписанный в нее символ добавляем в терминальную цепочку, если дуга идет в нетерминальную вершину, то переходим в соответствующую компоненту и движемся по ней аналогичным образом до точки выхода, после чего возвращаемся в предыдущую компоненту и продолжаем движение. После прохождения выходной дуги начальной компоненты в терминальную цепочку добавляем концевой маркер и вывод заканчивается.

Символ х, который может быть добавлен в терминальную цепочку непосредственно после прохождения дуги е, принадлежит множеству выбора дуги е (хеВЫБОР(е)).

Для нахождения множества выбора дуг СД определим множества первых и следующих для нетерминалов.

Множество первых для нетерминала X (ПЕРВ(Л')) содержит в себе все те терминалы, с которых начинаются терминальные цепочки, выводимые из нетерминала X. Если из нетерминала X выводится пустая цепочка, то символ 8 принадлежит множеству ПЕРВ(Х)-

Алгоритм формирования множеств ПЕРВ для каждого нетерминала СД.

Вход: множество таблиц СД.

Выход: ПЕРВ(Л') — множество первых для каждого нетерминала X СД.

1. Для всех нетерминалов X выполнить ПЕРВ(Х) := 0-

2. Для всех нетерминалов X выполнить процедуру ПервУзла(и), где и — начальный узел компоненты X.

3. Повторять п.2, пока множества ПЕРВ(Х) изменяются.

4. Конец алгоритма.

Алгоритм процедуры ПервУзла(и).

Вход: и — узел обрабатываемой компоненты X.

Глобальные параметры:

X— таблица обрабатываемой компоненты X;

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

ПЕРВ — массив множеств ПЕРВ каждого нетерминала.

1. Если и — заключительный узел, то ПЕРВ(Х) := ПЕРВ(Х)и{е}.

2. Для всех дуг (и, х), выходящих из узла и выполнить:

Серия История. Политология. Экономика. Информатика. 2013 №7 (150). Выпуск 26/1

2.1. Если х — терминал, то ПЕРВ(Х) := ПЕРВ(Х)^{л:}-

2.2. Если х — нетерминал, то ПЕРВ {X) := ПЕРВ(Х)^(ПЕРВ(х)\{8}) и если ееПЕРВ(х), то выполнить процедуру ПервУзла(Хх,к), т. е. процедуру ПервУзла для узла, в который идет дуга из вершины с нетерминалом х.

3. Конец алгоритма.

Множество следующих для нетерминала X (СЛЕД(Х)) включает в себя те терминалы, которые могут появиться в какой-либо промежуточной цепочке вывода непосредственно после нетерминала X. Так как любая цепочка заканчивается концевым маркером, а вывод начинается с цепочки, содержащей только начальный нетерминал, то множество следующих для начального нетерминала содержит концевой маркер (~|). Алгоритм формирования множеств СЛЕД для каждого нетерминала СД.

Вход: множество таблиц СД.

Выход: СЛЕД(Х) — множество следующих для каждого нетерминала X СД.

1. Для начального нетерминала 5 СЛЕДОМ): = {-| }, для всех остальных нетерминалов X выполнить СЛЕДСЮ := 0-

2. Для всех нетерминалов X выполнить:

для каждого узла и, в который идет дуга из вершины с нетерминалом X (определяется непустыми элементами в строке X таблиц СД), выполнить процедуру СледУ зла(и).

3. Повторять п.2, пока множества СЛЕД(Х) изменяются.

4. Конец алгоритма.

Алгоритм процедуры СледУзла(и).

Вход: и — обрабатываемый узел.

Глобальные параметры:

А — таблица компоненты А, которой принадлежит узел и;

X — нетерминал, для которого формируется множество СЛЕД;

СЛЕД — массив множеств СЛЕД каждого нетерминала.

1. Если и—заключительный узел компоненты А, то СЛЕД(Х):=СЛЕД(Х)иСЛЕД (А).

2. Для всех дуг (и, х), выходящих из узла и в вершину с символом х выполнить:

2.1. Если х — терминал, то С Л ЕДОЮ := СЛ ЕД(А0'_Чх}.

2.2. Если х — нетерминал, то СЛЕД (X) := СЛЕД(Х)^(ПЕРВ(х)\{8}) и если ееПЕРВ(х), то выполнить процедуру СледУзла(Лс,и), т. е. процедуру СледУзла для узла, в который идет дуга из вершины с нетерминалом х.

3. Конец алгоритма.

Применяя эти алгоритмы к СД, представленной на рис. 1, получим множества ПЕРВ и СЛЕД для каждой компоненты, представленные в табл. 2.

Таблица 2

Множества ПЕРВ и СЛЕД

ПЕРВ СЛЕД

5 {а, Ъ, с, ё, е} {- }

А {Ь, ё, е} {с}

В {ё,е} {а, с,ё,- }

Множество выбора для дуги (и, х) (ВЫБОР(и, х)) компоненты А определяется следующим образом:

1) если х — терминал, то ВЫБОР(и, х) := {х};

2) если х — нетерминал, то ВЫБОР(и, х) := ВЫБОР(и, х)и(ПЕРВ(х)\{є})и если єєПЕРВ (х), то выполнить процедуру ВыборУзла (Ас,и);

3) если и — заключительный узел и х = выход (дуга (и, х) —выходная), то ВЫБОР (и, х) := СЛЕД (А).

Алгоритм процедуры ВыборУзла(у).

Вход: у — обрабатываемый узел.

Глобальные параметры:

А — таблица компоненты А, которой принадлежит узел и;

ВЫБОР(и, х) — множество выбора для дуги (и, х).

1. Если у — заключительный узел компоненты А, то

ВЫБОР(и, х) := ВЫБОР(и, х)иСЛЕД(А).

2. Для всех дуг (у, г), выходящих из узла у в вершину с символом г выполнить:

2.1. Если г — терминал, то СЛЕД(Х) := СЛЕД(ХУи{г}.

2.2. Если г — нетерминал, то ВЫБОР(и, х) := ВЫБОР(и, х)и(ПЕРВ(г)\{е}) и если ге ПЕРВ(г), то выполнить процедуру ВыборУзла(Ах,у), т. е. процедуру ВыборУзла для узла, в который идет дуга из вершины с нетерминалом г.

3. Конец алгоритма.

Результат применения алгоритма нахождения множеств выбора для дуг компонент СД (см. рис. 1), представлен в табл. 3.

Для определения детерминированности узла необходимо просмотреть соответствующий столбец в таблице и убедиться, что множества, записанные в любой паре ячеек этого столбца, не пересекаются. Анализируя столбцы таблиц каждой компоненты, видим, что все узлы детерминированные. Таким образом, синтаксическая диаграмма, представленная на рис. 1, принадлежит классу детерминированных диаграмм.

Таблица 3

Множества выбора для дуг синтаксической диаграммы

в 1 1

9 ю 11

а

Ъ

с

с1 с1

е е

5

А

В с1,е

выход а,с,с1,-

в 1 1

1 2 3 4

а а

Ъ

с С

с1

е

5

А Ъ,сД,е

В й,е й,е

выход -

А 11 1

5 6 7 8

а а

Ъ Ъ

с

с1 с1

е

5

А

В с1,е с1,е

выход 3 3

Синтез программ-распознавателей по таблицам детерминированных синтаксических диаграмм. Не ориентируясь на конкретный язык программирования, будем представлять программу-распознаватель на псевдокоде. Дадим краткое неформальное описание элементов и команд псевдокода:

1) читатъ(х) — чтение очередного символа входной цепочки в переменную х;

2) Программа и Конец программы — начало и конец основной программы;

3) Подпрограмма А и Конец А — начало и конец подпрограммы, соответствующей компонентеА;

4) Вызов А — обращение к подпрограмме, соответствующей компоненте А;

5) выход — выход из подпрограммы;

6) 1, 2, з ... — метки, соответствующие узлам СД;

7) операции отношения: х=£ и хе{а, Ъ, с}, где х — переменная, хранящая обрабатываемый символ входной цепочки; £ — терминал или концевой маркер (-|); {а, Ъ, с} — множество терминалов;

8) если <отношение> то <Оператор1> иначе <Оператор2> — условный оператор, где <Оператор1> может представлять собой один из четырех вариантов:

— читатъ(х), переход на < метка >;

— Вызов А, переход на <метка>;

— выход;

— Допустить;

<Оператор2> — условный оператор или Отвергнуть, конец.

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

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

Текст основной программы-распознавателя для распознавания цепочек языка, заданного СД (см. рис. 1 и табл. 1) представлен ниже на псевдокоде:

Программа

читать (х);

Вызов 5;

если х = -| то Допустить иначе Отвергнуть

Конец программы.

Подпрограмма, соответствующая компоненте А СД, представляет собой последовательность фрагментов кода, описывающих узлы компоненты. Каждому узлу соответствует фрагмент кода, который отмечен одноименной меткой и представляет собой последовательность описаний дуг, выходящих из узла. Дуга описывается условным оператором, в котором определяется принадлежность обрабатываемого символа множеству выбора дуги. Если символ принадлежит множеству выбора и дуга идет в терминальную вершину, то читается следующий символ входной цепочки и выполняется переход на метку, соответствующую узлу, в который идет дуга из терминальной вершины. Если символ принадлежит множеству выбора и дуга идет в нетерминальную вершину, то вызывается подпрограмма, соответствующая нетерминалу, записанному в вершине, и, после выхода из нее, выполняется переход на метку, соответствующую узлу, в который идет дуга из нетерминальной вершины. Если символ не принадлежит множеству выбора и дуга не последняя, то описывается следующая дуга, выходящая из рассматриваемого узла, а если дуга последняя, то цепочка отвергается. Выходная дуга заключительного узла, идущая в точку выхода, описывается последней. Если символ принадлежит множеству выбора, то происходит выход из подпрограммы, иначе цепочка отвергается.

Текст подпрограмм, соответствующих компонентам СД (см. рис. 1, табл. 1 и з) представлен ниже на псевдокоде:

Подпрограмма Б

1: если х = а то читать (х), переход на з иначе если х е {Ь, с, с1, е} то Вызов А, переход на 2 иначе Отвергнуть, конец.

2: если х = с то читать (х), переход на 4 иначе Отвергнуть, конец.

3: если х е {с1, е} то Вызов В, переход на 4 иначе Отвергнуть, конец.

4: если х е {с1, е} то Вызов В, переход на 2 иначе если х е { -| } то выход иначе Отвергнуть, конец.

Конец Б

Подпрограмма А

5: если х = Ь то читать (х), переход на 6 иначе если х е {с1, е} то Вызов В, переход на 7 иначе если х е {с} то выход иначе Отвергнуть, конец.

6: если х е {с1, е} то Вызов В, переход на 8 иначе Отвергнуть, конец.

7: если х = (I то читать (х), переход на 8 иначе Отвергнуть, конец.

8: если х = а то читать (х), переход на 5 иначе если х е {с} то выход иначе Отвергнуть, конец.

Конец А

Подпрограмма В

9: если х = й то читать (х), переход на и иначе если х = е то читать (х), переход на ю иначе Отвергнуть, конец. ю: если х е {с1, е} то Вызов В, переход на и иначе Отвергнуть, конец. и: если х е {а, с,с1,-1} то выход иначе Отвергнуть, конец.

Конец В

Серия История. Политология. Экономика. Информатика. 2013. №7 (150). Выпуск 26/1

Текст основной программы-распознавателя не зависит от СД, поэтому алгоритм его формирования тривиален.

Алгоритм синтеза подпрограмм, соответствующих компонентам СД следующий: для всех компонент СД сформировать подпрограмму, используя процедуру Синтез-Подпрограммы.

Алгоритм процедуры СинтезПодпрограммы(А, MV).

Вход: А — таблица компоненты А;

MV — таблица, хранящая множества выбора дуг, выходящих из узлов компоненты А.

Выход: текст подпрограммы, соответствующий компоненте А.

1. Выдать «Подпрограмма А»

2. Для всех узлов и компоненты А (столбцов таблицы А) выполнить:

2.1. Выдать метку, соответствующую узлу и.

2.2. Для всех строк-терминалов t выполнить:

если At,и * 0, то выдать «если х = t то читать (х), переход на т иначе», где т = At,и.

2.3. Для всех строк-нетерминалов Yвыполнить:

если А)-и ф 0, то выдать «если х е MVy,u то Вызов Y, переход на т иначе», где т = АУ,и.

2.4. Если АВыход,и ф 0, то выдать «если х е MVBblxon,u то выход иначе».

2.5. Выдать «Отвергнуть, конец.».

3. Выдать «Конец А».

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

Литература

1. Иенсен К., Вирт Н. Паскаль. Руководство для пользователя и описание языка. — М: Финансы и статистика, 1982. — 151 с.

2. Легалов А. И. Основы разработки трансляторов. URL: http://www.softcraft.ru/translat/lect/content.shtml

3. Легалов А. П., Швец Д. А., Легалов И. А. Формальные языки и трансляторы. — Красноярск: Сибирский федеральный университет, 2007. — 213 с.

4. Свердлов С. 3. Введение в методы трансляции. — Вологда: Издательство «Русь», 1994. — 8о с.

5. Свердлов С. 3. Языки программирования и методы трансляции.— СПб.: Питер, 2007. — 638 с.

6. Карпов Ю. Г. Теория и технология программирования. Основы построения трансляторов. — СПб.: БХВ-Петербург, 2005. — 272 с.

7. ANTLR. URL: http://www.antlr.org/

8. ASF+SDF. URL: http://www.cwi.nl/projects/MetaEnv/

9. Bison. URL: http://www.gnu.org/software/bison/

10. Coco/R. URL: http://www.ssw.uni-linz.ac.at/Research/Proiects/Coco/

11. Axo А., Ульман Дж. Теория синтаксического анализа, перевода и компиляции. — М.: Мир, 1978. Т. 1, 612 с. — т. 2, 487 с.

12. Рязанов Ю. Д., Севальнева М. Н. Псевдодетерминированные синтаксические диаграммы // Прикладная математика, управление и информатика: сборник трудов Междунар. молодеж. конф., Белгород, 3 — 5 октября 2012 г.: в 2 т. — Белгород: ИД «Белгород», 2012. Т. 2.

С. 546 - 553-

THE ANALYSIS OF SYNTAX DIAGRAMS AND ADTOMATIC GENERATION OF LINEAR-TIME PROGRAMS-RECOGNIZER

Y.D. RYAZANOV M.N. SEVAI'NEVA

Belgorod Shukhov State Technology University

e-mail:

Ryazanov.iurij@yandex.ru

There are considered the problems of applying syntax diagrams to automatize the translators designing. There is determined the class of determined syntax diagrams, developed an algorithm analysis tabular representation syntax diagram to define its belongs to the class of deterministic diagrams and algorithm of automatic generation of linear-time program-recognizer.

Key words: translator, determined syntax diagrams, set of a choice, the program-recognizer.

i Надоели баннеры? Вы всегда можете отключить рекламу.