Формальные языки, грамматики и основы построения трансляторов. Кревский И.Г - 11 стр.

UptoLike

11
2. Неоптимальность создаваемой объектной программы. Например, если
встречается текст:
А = (В + С);
Р = (В + С) + (Е + М);
компилятор мог бы построить более эффективный объектный код,
трансформировав программу следующим образом:
А = (В + С);
Р = А + (Е + М);
Однако однопроходный компилятор может утратить часть нужной
информации к тому времени, когда в тексте встретится
формула (Е + М).
3. Поскольку однопроходный компилятор должен полностью
размещаться в памяти, его реализация сопровождается повышенными
требованиями к ресурсу памяти, которые не всегда можно удовлетворить,
имея систему с ограниченным объемом памяти.
Для повышения эффективности выполнения объектной программы в
процесс компилирования может включаться фаза оптимизации. Блок
оптимизации легко встраивается в трехпроходный
компилятор, где
размещается, обычно, между синтаксическим анализатором и генератором
кода. На этой фазе постфиксный файл используется в качестве входных
данных и создается новый файл, содержащий постфиксную запись
эквивалентной программы с улучшенными характеристиками. Поскольку
блок оптимизации записывает свои выходные данные в формате
постфиксного файла, генератор кода не нуждается в изменении. На практике
возможность оптимизации предусматривается по желанию пользователя:
если необходимо, чтобы время компилирования было небольшим, блок
оптимизации игнорируется; если же требуется получить программу с
высокой скоростью выполнения, то после работы синтаксического
анализатора вызывается блок оптимизации.
Возможны и другие способы структурной организации компилятора. На
рис.1.3 показана структура двухпроходного компилятора, занимающая
                                                                                    11

2. Неоптимальность создаваемой объектной программы. Например, если
встречается текст:
       А = (В + С);
       Р = (В + С) + (Е + М);
компилятор мог бы построить более эффективный объектный код,
трансформировав программу следующим образом:
       А = (В + С);
       Р = А + (Е + М);
Однако        однопроходный    компилятор        может    утратить    часть    нужной
информации к тому времени, когда в тексте встретится формула (Е + М).
       3.     Поскольку    однопроходный         компилятор    должен        полностью
размещаться в памяти, его реализация сопровождается повышенными
требованиями к ресурсу памяти, которые не всегда можно удовлетворить,
имея систему с ограниченным объемом памяти.
       Для повышения эффективности выполнения объектной программы в
процесс компилирования может включаться фаза оптимизации. Блок
оптимизации       легко    встраивается    в     трехпроходный     компилятор,     где
размещается, обычно, между синтаксическим анализатором и генератором
кода. На этой фазе постфиксный файл используется в качестве входных
данных и создается новый файл, содержащий постфиксную запись
эквивалентной программы с улучшенными характеристиками. Поскольку
блок        оптимизации    записывает     свои    выходные    данные     в     формате
постфиксного файла, генератор кода не нуждается в изменении. На практике
возможность оптимизации предусматривается по желанию пользователя:
если необходимо, чтобы время компилирования было небольшим, блок
оптимизации игнорируется; если же требуется получить программу с
высокой        скоростью   выполнения,      то    после   работы     синтаксического
анализатора вызывается блок оптимизации.
       Возможны и другие способы структурной организации компилятора. На
рис.1.3 показана структура двухпроходного компилятора, занимающая