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

100

Два этих метода можно сравнивать в отношении размеров таблиц разбора и времени разбора. Использование по одному слову на элемент в LL – таблице разбора позволяет свести размер типичной таблицы к минимуму, в то время как LR – разбор этой возможности не предоставляет.

Коэн и Рот сравнивали максимальное и среднее время разбора с помощью LL – и LR – анализаторов. Из данных для машин серии DEC результаты разбора LL – методом оказались быстрее на 50%.

Оба метода разбора позволяют включать в синтаксис действия для выполнения некоторых аспектов компиляции. Для LR – анализаторов такие действия обычно связаны с приведениями.

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

Контрольные вопросы

1.Технология разбора снизу вверх.

2.Построение LR – таблицы разбора.

3.Метод определения количества состояний грамматики.

4.Разрешение конфликта сдвиг/приведение.

5.Сравнение LL - и LR – методов разбора.

6.Оптимизация кода

Одной из трудных и неопределенных проблем, возникающих при построение компиляторов, является генерация хорошего объектного кода. Качество программы определяется по времени её выполнения и размерам. К сожалению, для данной конкретной программы невозможно установить время выполнения самой быстрой эквивалентной программы или длину самой короткой эквивалентной программы.

Большинство алгоритмов улучшения кода можно рассматривать, как приложение различных преобразований к некоторому промежуточному представлению исходной программы с целью привести её к форме из которой можно получить наиболее эффективный объектный код. Эти преобразования могут применяться в любой точке процесса компиляции. Однако, наиболее часто эти преобразования применяются к программе на промежуточном языке.