Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Теория языков программирования и методы трансляции..pdf
Скачиваний:
28
Добавлен:
05.02.2023
Размер:
3.41 Mб
Скачать

259

ЗАКЛЮЧЕНИЕ

В данном пособии были рассмотрены проблемы теоретического описа-

ния языков программирования и методов трансляции. Можно сделать вывод,

что все изученные методы синтаксического анализа (такие, как конечные ав-

томаты, регулярные выражения, распознаватели и грамматики) позволяют, в

принципе, решать одинаковый круг задач. Во-первых, они определяют фор-

мальный язык, т.е. показывают, как, используя символы алфавита языка, по-

строить правильные предложения на данном языке. Во-вторых, с их помо-

щью для любого формального языка можно построить множество допусти-

мых программ (в более общем случае – предложений или цепочек). Если это множество бесконечно, т.е. в языке присутствуют рекурсивные конструкции,

делающие возможными предложения неограниченной длины, то можно по-

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

вод о том, являются ли они верными с точки зрения языка.

Если программа прошла синтаксическую проверку и разбита на лексе-

мы, можно приступать к генерации объектного кода. Это уже задачи компи-

лятора – сгенерировать и оптимизировать код, организовать распределение памяти и т.д. Далее из промежуточного объектного кода при помощи про-

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

260

СПИСОК ЛИТЕРАТУРЫ

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

2.Хантер Р. Проектирование и конструирование компиляторов. – М.:

Финансы и статистика, 1984 – 230 с.

3.Райуорд-Смит В. Дж. Теория формальных языков. Вводный курс. –

М.: Радио и связь, 1988. – 128 с.

4.Льюис Ф., Розенкранц Д., Стирнз Р. Теоретические основы проекти-

рования компиляторов. – М.: Мир, 1979. – 656 с.

5.Вайнгартен Ф. Трансляция языков программирования. – М.: Мир,

1977. – 192 с.

6.Гросс М., Лантен А. Теория формальных грамматик. – М.: Мир,

1971. – 294 с.

261

ГЛОССАРИЙ

Автомат с магазинной памятью – конечный автомат, в котором запо-

минающее устройство организовано по магазинному принципу (стек).

Алгоритм – конечное число команд, каждая из которых может выпол-

няться механически за фиксированное время и с фиксированными затратами.

Алфавит – любое множество символов, не обязательно конечное и да-

же счетное.

Альтернативные порождающие правила – правила с одинаковой левой частью.

Вывод – процесс замены в цепочке подцепочки, являющейся левой ча-

стью порождающего правила, его правой частью.

Грамматика – порождающая система для описания языка.

Грамматика общего вида – грамматика без ограничений на правила.

Грамматика LL(k) – грамматика, в которой входная цепочка разбира-

ется слева направо, используются выводы из левых частей правил к правым,

а вариант порождающего правила выбирается при помощи предварительного просмотра k символов входной цепочки.

Грамматика LR(k) – грамматика, в которой входная цепочка разбира-

ется слева направо, свертка правил идет справа налево, а вариант порождаю-

щего правила выбирается при помощи предварительного просмотра k симво-

лов входной цепочки.

Дерево вывода – дерево цепочек, принадлежащих языку, выводимых из стартового символа КС-грамматики.

Диаграмма переходов конечного автомата – неупорядоченный поме-

ченный граф переходов между состояниями автомата.

Драйвер – модуль компилятора, занимающийся семантическим разбо-

ром.

262

Защита от дурака – принцип, согласно которому транслятор должен быть построен так, что никакая цепочка не может нарушить его работоспо-

собности, т.е. он должен реагировать на любые из них

Иерархия Хомского – классификация грамматик.

Конечные автоматы – один из методов задания языка программирова-

ния.

Контекстно-зависимая грамматика – грамматика, цепочка левой ча-

сти каждого правила которой не длиннее цепочки правой части данного пра-

вила.

Контекстно-свободная грамматика (КС-грамматика) – грамматика, в

левой части каждого правила которой имеется лишь один нетерминал.

Конфигурация автомата – композиция текущего состояния конечного автомата и цепочки непрочитанных символов во входной ленте.

Лексема – цепочка терминальных символов, с которой мы связываем некоторую лексическую структуру.

Лексическая ошибка – ситуация, когда лексический анализатор не в со-

стоянии сгруппировать последовательность символов в лексему.

Лексический анализатор – транслятор, входом которого служит цепоч-

ка символов, представляющая программу, а выходом – последовательность лексем.

Направляющий символ – символ, определяющий выбор одной из аль-

тернатив порождающего правила при выводе.

Нетерминальный символ – служебный символ для порождения слов языка.

Обратная польская запись – постфиксная нотация, в которой знак опе-

рации ставится после операндов.

Оптимизация кода – попытка сделать объектные программы более эф-

фективными, т.е. быстрее работающими или более компактными.

263

Перевод – процесс преобразования цепочек одного алфавита в цепочки другого алфавита.

Польская запись – префиксная нотация, в которой знак операции ста-

вится перед операндами.

Последующий символ – символ, появляющийся при выводе после данной подцепочки.

Правило – описание процесса порождения цепочек языка.

Праволинейная грамматика – КС-грамматика, правая часть каждого правила которой начинается с цепочки терминальных символов.

Предикат – утверждение, состоящее из нескольких переменных и при-

нимающее значение 0 или 1 («ложь» или «истина»).

Предупреждение – ситуация, когда синтаксическому анализатору встретилась допустимая, но маловероятная последовательность символов.

Предшествующий символ (символ-предшественник) – символ, появля-

ющийся в начале данной цепочки в процессе вывода.

Проблема – утверждение (предикат), истинное или ложное в зависимо-

сти от входящих в него неизвестных (переменных) определенного типа.

Проход – фаза процесса компиляции, требующая полного прочтения исходного текста программы.

Распознаватель – частичный алгоритм, определяющий язык.

Регулярное множество – множество цепочек, порождаемых регуляр-

ным выражением.

Регулярное выражение – один из методов задания языка программиро-

вания.

Семантическое отображение – отображение структурированного вхо-

да в выход, который обычно является программой на машинном языке.

Символ – элемент алфавита.

264

Синтаксическая ошибка – ошибка, обнаруживаемая контекстно-

свободным синтаксическим анализатором.

Синтаксический анализ – разбор, в котором исследуется цепочка лек-

сем и устанавливается, удовлетворяет ли она структурным условиям, явно сформулированным в синтаксисе языка.

Синтаксический управляемый перевод – метод построения промежу-

точного кода по синтаксическому дереву.

Синтаксическое отображение – связывание с каждым входом (про-

граммой на исходном языке) некоторой структуры, которая служит аргумен-

том семантического отображения.

Таблица разбора – составная часть модуля семантического разбора, по-

лучаемая из грамматики.

Терминальный символ – символ, входящий в слова (цепочки) определя-

емого языка.

Тройка – двухадресный промежуточный код.

Уравнения с регулярными коэффициентами – уравнения, коэффициен-

тами которых являются регулярные выражения.

Цепочка – последовательность символов алфавита.

Четверка – трехадресный промежуточный код.

Язык – множество цепочек в алфавите.