компилятор против интерпретатора (на основе конструкции и дизайна)

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

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

Мои основные сомнения:

1) Компилятор состоит из лексического анализатора, парсера, генератора промежуточного кода и генератора кода, но каковы части интерпретатора?

2) Кто предоставляет поддержку во время выполнения к интерпретируемым языкам я имею в виду, кто управляет кучей и стеками для рекурсивных функций?

3) Это характерно для языка Python:
Python включает этап компилятора, а также этап интерпретатора { Компилятор {1}} создает некоторый байт-код, а затем этот байт-код интерпретируется его виртуальной машиной.
, если бы я спроектировал только компилятор для Python (Python -> байт-код)

а) мне пришлось бы для этого управлять памятью {писать код для управления стеком и кучей}?

б) чем этот компилятор будет отличаться от традиционного компилятора или, скажем, интерпретатора?

Я знаю, что здесь много вопросов, но я действительно хочу понять эти мельчайшие детали.

Я имею в виду книгу по компиляторам Альфреда В. Ахо


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

Компилятор не должен производить только машинный код в качестве своего вывода

Но меня все еще беспокоит один вопрос Допустим, я хочу разработать компилятор (Python-> байт-код), и тогда байт-код будет интерпретироваться виртуальной машиной ... (поправьте меня, если я ошибаюсь).
Затем мне придется написать лексический анализатор для Python, а затем синтаксический анализатор, который будет генерировать какое-то абстрактное синтаксическое дерево ... после этого мне нужно сгенерировать некоторый промежуточный код (3-адресный код как упомянутые в книге драконов) или прямые инструкции байт-кода (которые, я полагаю, будут даны в документации виртуальной машины)?

Придется ли мне писать код для обработки стека, чтобы обеспечить поддержку рекурсии и области видимости?

6
задан S.L. Barth - Reinstate Monica 14 August 2012 в 12:16
поделиться