Какие языки программирования имеют наиболее легко реализуемые интерпретаторы?
Мне нужно реализовать интерпретатор для языка программирования как часть проекта, над которым я работаю. Я не думаю, что детали этого проекта слишком релевантны, за исключением того, что он требует, чтобы я реализовал интерпретатор с нуля, я не могу использовать существующий язык программирования (требования включают поддержку переносимых ограничительных продолжений и возможность писать интерпретатор для него в Javascript, а также в Java).
Очевидно, я бы предпочел не изобретать совершенно новый язык программирования, поэтому я надеюсь, что есть какой-то очень простой язык, который я мог бы скопировать или, по крайней мере, извлечь из него вдохновение.
Моя первая мысль была Forth или рудиментарным Lisp -подобным языком, однако я бы предпочел, чтобы язык имел синтаксис ближе к более популярным языкам программирования, таким как Java, Python или Ruby. В частности, это означает поддержку инфиксных операторов (a + b), а также a = b присваивание переменных.
Другими словами, мне хотелось бы, чтобы этот язык был достаточно хорошо знаком людям, которые сегодня программируют на PHP, и я не считаю, что Forth или Lisp соответствуют этим критериям.
Кто-нибудь может предложить какие-либо предложения для такого языка?
Ответы
Ответ 1
Это звучит как работа для Lua.
- Это небольшой язык, разработанный для простого внедрения
- В Java уже есть несколько implementations и, по крайней мере, выполняется Javascript.
- Его синтаксис соответствует вашим требованиям (назначения, операторы infix).
Работа, которую вы должны были оставить, - реализовать разграниченные продолжения, но вы знали, что уже когда вы исключили Lisp/Scheme.
Ответ 2
Я думаю, что Lisp и Forth имеют одни из самых простых наивных переводчиков.
Вы можете выбрать простой динамический язык, и самая сложная часть будет заключаться в создании парсера. Например, подмножество JavaScript может работать. Интерпретатор в основном пересекает AST и выполняет операции каждого node.
В любом случае, исследуйте существующие языки сценариев, которые могут быть встроены в вашу среду разработки, и не отказывайте себе во что бы то ни стало. Внедрение компиляторов (в широком смысле) очень забавно, но в долгосрочной перспективе это может быть дорогостоящим.
Ответ 3
Tcl. Синтаксис примерно так же прост, как Lisp, и он имеет expr
proc для арифметики infix. Он даже использует {}
для блоков, поэтому, если вы правильно прищурились, вы можете сказать людям, что это C-подобный язык.
У него нет привязки infix a=b
, но как только вы начинаете идти по пути общей нотации infix, языки становятся действительно сложными очень быстро, поэтому я не уверен, насколько это совместимо с вашими другими требованиями.
Ответ 4
Smalltalk и Io обе имеют удивительно простые, но выразительные синтаксисы.
Ответ 5
Логотип - это простой Lisp -поле язык без круглых скобок и несколько сотен реализаций.
Информация о логотипе в Википедии.
См. этот PDF файл для информации об реализациях: Дерево логотипов.
Ответ 6
Brainfuck? Я имею в виду, что у него всего 8 команд, каждая из которых соответствует одному символу.
Ответ 7
Сначала создайте интерпретатор LISP, это будет относительно просто.
Вы получите большой опыт в анализе языка, не мешая дополнительным требованиям к функциям.
Ответ 8
Я предполагаю, что это как упражнение для собственного назидания, так и желание полезного конечного продукта.
В этом случае я должен согласиться с другими, которые рекомендовали варианты на Lisp -подобных языках, по крайней мере для первого прохода, особенно если вы этого еще не сделали.
Lua - довольно популярный язык сценариев для такого рода вещей, который требует небольших, а не особенно исполняемых пользовательских скриптов.
Вы также можете рассмотреть, соответствует ли сам javascript (или подмножество) вашим требованиям.
Также см. список здесь:
http://en.wikipedia.org/wiki/Continuation#Programming_language_support
Ответ 9
PCF
Ответ 10
Загрузите простой компилятор из ничего
Ответ 11
Я рекомендую вам начать с подмножества lisp - в основном автомобиль, cdr, cons и quote. Убедитесь, что у вас есть базовый сканер, который обрабатывает недопустимые символы, а затем недопустимые типы (например, cons требует 2 аргумента, второй должен быть списком). Вы можете сделать это с учетом основных структур данных (только связанные списки могут сделать это, но двунаправленные или круговые намного лучше).
Ответ 12
Вы можете использовать подмножество Lisp и все еще иметь более естественную нотацию, если вы используете сладко-выраженные выражения или, по крайней мере, в виде вставки курсора:
-
Curly-infix добавляет infix, читая {a + b} как (+ a b) и поддерживает традиционную функциональную нотацию, такую как f (x). Подробнее см. В SRFI-105.
-
Сладкие выражения основываются на curly-infix и добавляют синтаксически-важный отступ. Подробнее см. Здесь в SRFI-110. Его URL-адрес http://srfi.schemers.org/srfi-110/ (для SRFI-105 просто замените "110" на "105" ).
Оба были реализованы с помощью Readable Lisp S-expressions Project:
http://readable.sourceforge.net/
Наслаждайтесь!