Два переводчика без переводчика
Мне трудно понять это.
Пусть I_L^M будет интерпретатором для языка L, работающего на машине M. Предположим, у вас есть доступ к программе I_K^L, написанной на языке L, которая является переводчиком для языка K. Теперь вы можете (без написания каких-либо дополнительных письменные и устные переводчики) для написания и запуска программ на языке K? Пожалуйста, объясни.
Я думал, что это невозможно, потому что интерпретаторы выводят байт-код или что-то в этом роде. Это очень трудно понять, и я думаю, что я обдумываю это. Любая помощь будет отличной!
1 ответ
Да, вы должны иметь возможность запускать программы на языке K
,
Это может помочь рассмотреть конкретный пример: пусть L
будь питоном и пусть K
будь Лисп. I_L^M
это интерпретатор Python, который вы можете получить для своей машины M
и использовать для запуска всех видов программ Python. Одна такая программа I_K^L
интерпретатор для Lisp, написанный на Python. Скажи, что это в lisp.py. Тогда вы бы призвали:
python lisp.py
Интерпретатор Python запустится, откроет lisp.py и выполнит найденный там код Python, который (скажем) запустит цикл чтения-чтения-оценки-Lisp. Или вы могли бы призвать
python lisp.py fibonacci.lisp
чтобы интерпретатор Lisp запустил код Lisp в fibonacci.lisp.
Поскольку вы упоминаете байт-код: вполне вероятно, что внутренне программа Python преобразует lisp.py в байт-код, а затем выполнит его. Тем не менее, это будет в основном невидимым для вас, за исключением возможного создания файла.pyc, чтобы сэкономить время на последующих запусках.