Каковы основные проблемы при разработке интерпретатора для функционального языка?
Предположим, что я хочу реализовать интерпретатор для функционального языка. Я хотел бы понять проблемы, связанные с этим, и подходящую литературу, которая доступна. Это новый язык, который находится на ранних этапах разработки, поэтому вопрос имеет широкий масштаб.
В целях этого обсуждения мы можем предположить, что цель языка не важна и что его функциональные возможности могут быть изменены (даже резко), если это существенно повлияет на простоту написания интерпретатора.
На веб-сайте MIT есть онлайн-копия Структура и интерпретация компьютерных программ, а также видео из лекций MIT 6.001 с использованием Схемы, записанных в HP в 1986 году. Это отличное введение в языковой дизайн.
Ответы
Ответ 1
Я бы рекомендовал "Структура и интерпретация компьютерных программ" (SICP) в качестве отправной точки. В этой книге будет представлено представление о том, что значит писать интерпретатор (и компилятор) и, как правило, обязательно читать для любого, кто разрабатывает языки.
Внедрение интерпретатора для функционального языка вряд ли будет сильно отличаться от реализации интерпретатора для любого другого языка общего назначения. Там лексический анализ, разбор, построение АСТ, семантический анализ, плюс выполнение (для чистого интерпретатора) или генерация кода и оптимизация (для компилятора, даже компиляция для байт-кода, такого как Java/Perl/Python). SICP представит разницу между оценкой "аппликативный порядок" и "нормальный порядок", которая может быть важна для вас в чисто функциональном контексте.
Ответ 2
См. http://www.cs.cornell.edu/courses/cs312/2005sp/lectures/lec17.asp
Ответ 3
Для любого переводчика языка или компилятора основные проблемы одинаковы, я думаю.
Вам нужно решить некоторые основные характеристики языка (семантика, а не синтаксис), и основная часть дизайна вещи вытекает из этого.
-
Например, имеет ли ваш язык
система типа? Если да, то какие
типы у него есть? Это будет
статически типизированный, динамически типизированный,
утка типизированных?
-
Какие выражения вы используете?
Планирование поддержки? Нужно ли вам
определить порядок операций? Будет
у вас даже есть операторы?
-
Что вы будете использовать в качестве времени выполнения
представление программы? Будет
вы преобразовываете текст в байтовый код
представления или AST, или
символизированная форма исходного текста?
Существуют доступные инструменты, помогающие взять некоторые из скуки из фактического разбора текста (ANTLR и Bison, чтобы назвать два), но я не знаю ничего, что помогает с фактической интерпретационной частью задачи. Я уверен, что кто-то что-то предложит.
Ответ 4
Основная проблема заключается в наличии семантики для языка, который вы реализуете, - с этим реализация становится простой. В противном случае этот вопрос невероятно широк и трудно ответить.
Ответ 5
Я бы рекомендовал Essentials of Programming Languages в качестве хорошего дополнения к SICP, особенно если вас интересуют переводчики: официальный сайт EOPL. Вы можете проверить третье издание - сайт пока не обновлен.
Изменить: предотвращение спама делает выбор между ссылками, поэтому официальная страница теперь не нагревается. Это легко Google, хотя.