10
времени обработки программы, интерпретатору приходится тем или
иным способом анализировать, прежде чем выполнять.
Интерпретатор может иметь структуру, аналогичную структуре 3-
или 2-проходного компилятора. Это означает, что программа может
быть представлена в некоторую форму внутреннего представления,
которое затем участвует в процессе выполнения. Это либо
постфиксная запись, получаемая при использовании синтаксического
анализатора, язык
низкого уровня, ориентированный на реальную
ЭВМ или гипотетическую машину, которую имитирует
интерпретатор, или какая-либо другая форма записи программы.
Применение интерпретатора вместо компилятора имеет
следующие преимущества:
1. Передавать сообщения об ошибках пользователю часто бывает
легче в терминах оригинальной программы.
2. Версия программы на компилируемом языке нередко
оказывается компактнее, чем машинный код,
выданный
компилятором.
3. Изменение части программы не требует перекомпиляции всей
программы. Диалоговые языки, такие, как Бейсик часто реализуются
посредством интерпретатора. Промежуточным языком обычно
служит некая форма обратной польской записи (ОПЗ). Основной
недостаток интерпретатора в малой скорости, так как операторы
промежуточного кода должны транслироваться всякий раз, когда они
выполняются. Временные задержки зависят
от конструкции
промежуточного языка и не так уж велики.
Применяется метод смешанного кода, в котором наиболее часто
выполняемая часть интерпретируется. При этом экономится память,
поскольку часть программы, которая должна интерпретироваться,
будет по всей вероятности, намного компактнее, чем
скомпилированный код.
Методы трансляции, используемые в компиляторах можно
разделить на две группы: прямые и
синтаксические.
Прямые методы трансляции ориентированы, на конкретные
входные языки. Это преимущественно эвристические методы, в
которых на основе некоторой общей идеи для каждой конструкции
входного языка подбирается индивидуальный алгоритм трансляции.
Этапы синтаксического и семантического анализов здесь обычно
четко не разделены.