Я привязался к проекту, чтобы интегрировать интерпретатор в существующее приложение. Язык, который следует интерпретировать, является производным от Lisp, с встроенными приложениями. Индивидуальные "программы" будут запускаться в приложении в пакетном стиле.
Я удивлен, что за эти годы я написал несколько компиляторов и несколько переводчиков/парсеров на языке данных, но я никогда раньше не писал переводчика. Прототип довольно далеко, реализованный в качестве синтаксического дерева walker, в С++. Возможно, я могу повлиять на архитектуру за пределами прототипа, но не на язык реализации (С++). Итак, ограничения:
- реализация будет в С++
- синтаксический анализ, вероятно, будет обрабатываться грамматикой yacc/bison (теперь)
- предложения по полным экологиям VM/Interpreter, такие как NekoVM и LLVM, вероятно, не подходят для этого проекта. Самостоятельный лучше, даже если это звучит как NIH.
То, что я действительно ищу, - это чтение материалов по основам внедрения переводчиков. Я просмотрел SO, и еще один сайт, известный как Lambda the Ultimate, хотя они более ориентированы на теорию языка программирования.
Некоторые из лакомых кусочков, которые я собрал до сих пор:
-
Lisp в малой части, Кристиан Квиннек. Человек, рекомендующий это, сказал, что "переходит от тривиального переводчика к более продвинутым методам и заканчивает представление компиляторов байт-кода и" Схемы для С ".
-
NekoVM. Как я уже упоминал выше, я сомневаюсь, что нам будет разрешено включать всю инфраструктуру VM для поддержки этого проекта.
-
Структура и интерпретация компьютерных программ. Первоначально я предположил, что это может быть излишним, но, проработав здоровый кусок, я согласен с @JBF. Очень информативный и расширяющий сознание.
-
В Lisp от Paul Graham. Я прочитал это, и хотя это информативное введение в принципы Lisp, недостаточно, чтобы начать создание интерпретатора.
-
Parrot Implementation. Это кажется забавным. Не уверен, что это предоставит мне основы.
-
Схема из Scratch. Peter Michaux атакует различные реализации Схемы, от быстрого и грязного интерпретатора Схемы, написанного на C (для использования в качестве начальной загрузки в более поздних проектах) для скомпилированного кода схемы. Очень интересно до сих пор.
-
Шаблоны языковой реализации: создайте свои собственные доменные и общие языки программирования, рекомендованные в потоке комментариев для Книги о создании интерпретируемых языков. Книга содержит две главы, посвященные практике создания интерпретаторов, поэтому я добавляю их в свою очередь чтения.
- Новый (и еще старый, т.е. 1979): Написание интерактивных компиляторов и интерпретаторов П. Дж. Брауна. Это давно выходит из печати, но интересно представить схему различных задач, связанных с реализацией базового интерпретатора. Я видел смешанные обзоры для этого, но, поскольку он дешевый (у меня он по заказу, который используется около $3,50), я дам ему вращение.
Итак, как насчет этого? Есть ли хорошая книга, которая берет неофита за руку и показывает, как построить интерпретатор в C/С++ для Lisp -подобного языка? Есть ли у вас предпочтения для синтаксических пешеходов или интерпретаторов байт-кода?
Чтобы ответить @JBF:
-
текущий прототип является интерпретатором, и это имеет смысл для меня, поскольку мы принимаем путь к произвольному файлу кода и выполняем его в нашей прикладной среде. Встроенные функции влияют на наше представление данных в памяти.
-
он не должен быть ужасно медленным. Текущий ходок по дереву кажется приемлемым.
-
Язык основан на Lisp, но не Lisp, поэтому не требуется соблюдение стандартов.
- Как упоминалось выше, маловероятно, что нам разрешат добавить полный внешний проект VM/интерпретатора для решения этой проблемы.
На другие плакаты, я также проверю ваши цитаты. Спасибо, все!