Какой Лисп лучше при разборе? - PullRequest
20 голосов
/ 23 августа 2009

Я хотел бы реализовать интерпретатор Lisp на диалекте Lisp в основном в качестве учебного упражнения. Единственное, что меня отбросило, это то, сколько вариантов есть в этой области. Прежде всего, я немного больше интересуюсь изучением некоторых из Лиспов, которые были уже давно (например, Схема или Общий Лисп) Я не хочу использовать Clojure, чтобы сделать это из-за того факта, что я уже использовал это. : -)

Так один из ароматов лучше, чем другие при разборе? И как вы думаете, это хорошая идея, чтобы сказать реализовать Scheme в Common Lisp (или наоборот)? Или между ними будет достаточно различий, чтобы отбросить меня?

И если это что-то изменит, я бы хотел что-нибудь кроссплатформенное. У меня есть ПК с Windows, Mac и Linux, и я могу написать это на любом из них.

Ответы [ 2 ]

21 голосов
/ 23 августа 2009

Есть несколько книг об этом:

Все вышеперечисленные книги настоятельно рекомендуются, хотя «Анатомия Лиспа» старовата, труднодоступна и трудна для чтения.

Как Scheme, так и Common Lisp подходят для вашей задачи.

Реализация Common Lisp - более сложная задача, поскольку язык больше. Обычно один реализует Common Lisp лучше в Common Lisp, поскольку есть библиотеки Common Lisp, которые можно использовать для новых реализаций Common Lisp. ; -)

4 голосов
/ 11 ноября 2009

PLT Scheme - отличная платформа для экспериментов с языками программирования, особенно с языками Lispy. PLT имеет расширяемый синтаксический анализатор (обычно называемый читателем на схеме), который предоставляет макросы читателя для управления встроенным синтаксисом; или вы можете полностью заменить читатель своим. Если вы предпочитаете использовать традиционные синтаксические анализаторы и лексеры в стиле lex / yacc, PLT поставляется с модулем parser-tools, который также предоставляет их. В качестве бонуса, он имеет исчерпывающую документацию и репозиторий для сторонних пакетов (две вещи, которые отсутствуют в большинстве Схем).

Эталонная реализация Arc (arclanguage.org) довольно проста и удобочитаема. Пример построения языка, который компилируется в Scheme. В основном он использует ридер PLT с парой макросов ридера для изменения битов синтаксиса Scheme, которые отличаются от Arc. Также есть реализация JavaScript, доступная в репозитории пакетов PLT (planet.plt-scheme.org), если вы хотите узнать, как реализовать язык, не относящийся к Лиспу.

...