что такое составные инструкции? - PullRequest
0 голосов
/ 10 октября 2009

Я делаю дизайн компилятора класса в главе промежуточного кода. Проведя некоторые исследования в Интернете, я наткнулся на это предложение:

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

Я не могу найти составную инструкцию в Google.

Ответы [ 4 ]

2 голосов
/ 10 октября 2009

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

Но, мне кажется, качество этого материала кажется сомнительным.

1 голос
/ 10 октября 2009

То, что глава несколько странно.

Переводчик:

Программа на одном языке, которая выполняет программы на другом языке.

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

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

Нет, это был бы как раз вовремя компилятор ; Методы JIT могут использоваться интерпретаторами, но также используются для уменьшения размера скомпилированного исполняемого файла. Истинные интерпретаторы не являются JIT-компиляторами.

Интерпретация медленнее, чем выполнение скомпилированного машинного кода.

Обычно, хотя иногда интерпретатор с полным исходным кодом может сделать лучшую оптимизацию, чем компилятор JIT.

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

Это также возможно, если это не так, если только они не используют «итеративную интерпретацию» для обозначения «читать исходный код по одной строке за раз и обрабатывать его», но позже они «[Итеративный] интерпретатор [...] повторяет последовательность выборки, анализа и выполнения. [...] повторяется в итеративном цикле.», Так что нет - вы можете сделать это довольно хорошо с любым вводом, как только вы проанализировал его и сделал некоторую обработку.

Интерпретатор для командного языка может быть итеративным.

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

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

Вы можете отобразить любую рекурсивную процедуру на итеративную процедуру с явным стеком, поэтому рекурсивная реализация никогда строго не нужна .

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

Если у вас есть переводчик, который видит:

z = a + 5

затем для выражения a + 5 он может найти значение a и знает постоянную 5, затем он может вычислить a + 5 и сохранить результат в z.

Если вместо этого есть выражение:

z = a + ( b * c )

тогда он может посмотреть, каково значение a, но для вычисления b * c он должен либо рекурсивно вызывать себя, либо помещать z = a + pop() в стек и вычислять push(b*c).

Для интерпретации выражений составных терминов с использованием итеративного интерпретатора вы можете преобразовать источник в линейную форму, используя временные значения, поэтому:

z = a + ( b * c )

становится:

temp = b * c
z = a + d

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

Переводчик языка высокого уровня должен быть рекурсивным.

Неверно, см. Выше.

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

False, см. Выше.

Рекурсивная интерпретация медленнее, чем итеративная интерпретация.

В целом верно, но я уверен, что будут некоторые исключения, если вы их найдете.

1 голос
/ 10 октября 2009

С Примечания к главе 1 - Введение в компиляторы

# High level languages support the use of complex expressions.
# Example:

x + y * z / (w + 1)

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

0 голосов
/ 10 октября 2009

Вот вам ссылка:

Составные инструкции

...