Какие языки программирования имеют наиболее легко реализуемые интерпретаторы? - PullRequest
14 голосов
/ 14 октября 2010

Мне нужно реализовать интерпретатор для языка программирования как часть проекта, над которым я работаю.Я не думаю, что детали этого проекта слишком актуальны, за исключением того, что для этого требуется, чтобы я реализовал интерпретатор с нуля, я не могу использовать существующий язык программирования (требования включают поддержку переносимых продолжений с разделителями и возможность написанияинтерпретатор для него в Javascript, а также в Java).

Очевидно, что я действительно предпочел бы не изобретать совершенно новый язык программирования, поэтому я надеюсь, что есть какой-то очень простой язык, который я мог бы скопировать или хотя бы нарисоватьВдохновение от.

Моей первой мыслью была Forth или элементарный язык, похожий на Lisp, однако я бы действительно предпочел, чтобы этот язык имел синтаксис, более близкий к более популярным языкам программирования, таким как Java, Python или Ruby.В частности, это означает поддержку инфиксных операторов (a + b), а также присваивание переменных a = b.

Другими словами, я хотел бы, чтобы этот язык чувствовал себя достаточно знакомым для людей, которые программируют наPHP сегодня, и я не верю, что Forth или Lisp соответствуют этим критериям.

Может кто-нибудь предложить какие-либо предложения для такого языка?

Ответы [ 12 ]

0 голосов
/ 15 марта 2013

Вы можете использовать подмножество Lisp и по-прежнему иметь более естественные нотации, если используете сладкие выражения или, по крайней мере, вьющиеся-инфиксные нотации:

  • Curly-infix добавляет инфикс, читая {a + b} как (+ a b), и поддерживает традиционные функциональные обозначения, такие как f (x). Подробнее в SRFI-105.

  • Сладкие выражения основаны на curly-infix и добавляют синтаксически релевантные отступы. Подробнее здесь, в SRFI-110. Его URL-адрес http://srfi.schemers.org/srfi-110/ (для SRFI-105 просто замените «110» на «105»).

Оба были реализованы Проектом S-выражений Readable Lisp: http://readable.sourceforge.net/

Наслаждайтесь!

0 голосов
/ 14 октября 2010

Я рекомендую вам начать с подмножества lisp - в основном, car, cdr, cons и quote. Убедитесь, что у вас есть базовый сканер, который обрабатывает недопустимые символы, а затем недопустимые типы (например, cons требует 2 аргумента, 2nd должен быть списком). Вы можете сделать это, зная об основных структурах данных (только связанные списки могут это сделать, но двусвязные или циклические намного лучше).

...