Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Полный файл лекции Иванченко.DOC
Скачиваний:
27
Добавлен:
21.09.2019
Размер:
2.42 Mб
Скачать

2.7. Соответствия между способами описания языков

Между рассмотренными в этой главе способами описания формальных языков имеют место взаимные соответствия. Для каждого класса грамматик из классификации Хомского существует класс распознавателей, определяющий тот же самый класс языков. Это соответствие можно представить табл.2.3.

Таблица 2.3.

Язык, определяемый грамматиками

Язык, определяемый распознавателем

Праволинейный язык

Язык, определяемый конечным автоматом

КС язык

Язык, определяемый автоматом с магазинной памятью (МП- автомат)

КС язык

Язык, определяемый линейно-

ограниченным автоматом

Язык общего вида, рекурсивно

перечисляемый язык

Язык, определяемый машиной Тьюринга

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

1) между регулярными грамматиками и КА;

2) между регулярными выражениями (множествами) и синтаксическими диаграммами;

3) между синтаксическими диаграммами и

регулярными грамматиками.

Использование этих соответствий оказывается полезным в тех случаях, когда необходимо перейти от одного способа описания языка к другому. Методы соответствующих преобразований мы будем рассматривать при решении конкретных задач.

Глава 3 основы теории перевода

3.1. Определение перевода

Определение. Перевод (или трансляция) - это некоторое отношение между цепочками, или, другими словами, это некоторое множество пар цепочек. ¨

Компилятор определяет перевод, образованный парами вида (исходная программа, объектная программа). Если компилятор состоит из трех фаз - лексического анализа, синтаксического анализа и генерации кода, то каждая из них сама является переводом. Как отмечалось в главе 1, лексический анализ можно рассматривать как перевод, при котором цепочки, представляющие исходную программу, отображаются в цепочки лексем. Синтаксический анализатор отображает цепочки лексем в цепочки, представляющие деревья. Затем генератор кода переводит эти цепочки в машинный язык или язык ассемблера.

Определение. Пусть S - входной алфавит и D- выходной алфавит. Переводом с языка L1 на язык L2 назовем отношение T из S в D, для которого L1 - область определения, а L2 - множество значений.¨

Если (x,y) T, то цепочка у называется выходом для цепочки х. Заметим, что в общем случае в переводе Т для данной входной цепочки может быть более одной выходной цепочки. Однако перевод, предназначенный для языка программирования, должен быть функцией, т.е. для каждого входа должно быть не более одного выхода.

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

Определение. Пусть q - множество знаков бинарных операций, а S - множество операндов a , тогда:

1. Если инфиксное выражение E=a, a Î S (т.е. Е состоит из одного операнда), то префиксная и постфиксная записи этого выражения совпадают и равны а, т.е. = =a..

2. Если E1qE2 - инфиксное выражение, в котором q - знак операции, а E1,E2 - операнды (инфиксные), то:

а) q 1 2- префиксная польская запись, где 1, 2 - префиксные записи выражений E1 и E2 соответственно;

б) 1 2q - постфиксная польская запись, где 1 и 2- постфиксные записи выражений E1 и E2 соответственно.

3. Если (Е) - инфиксное выражение, то :

а) префиксная запись - это префиксная запись выражения Е;

б) постфиксная запись - это постфиксная запись выражения Е.

Пример 3.1. Перевод арифметических выражений в префиксную и постфиксную форму записи:

Цепочка х: Цепочка у:

(a+b)*(a+b) ab+ab+* — постфиксная форма;

(a+b)*(a+b) *+ab+ab — префиксная форма.

Проблема задания бесконечного перевода конечными средствами аналогична проблеме задания бесконечного языка. Известно несколько подходов к определению перевода.

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

Второй подход основан на модели распознавателя с двумя входными лентами для цепочек xÎS * и yÎD*. Этот распознаватель будет распознавать пары (х,у) принадлежащие переводу Т.

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

В дальнейшем мы будем использовать именно эти модели применительно к сканерам и анализаторам.