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

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

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

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

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

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

Ответы [ 12 ]

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

Я думаю, что у Лиспа и Форта есть одни из самых простых наивных переводчиков.

Вы можете выбрать простой динамический язык, и самой сложной частью будет создание синтаксического анализатора. Например, подмножество JavaScript может работать. Интерпретатор в основном пересекает AST и выполняет операции каждого узла.

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

10 голосов
/ 15 октября 2010

Звучит как работа для Lua .

  • Это небольшой язык, разработанный для простоты реализации
  • Уже существует несколько реализаций в Java, и, по крайней мере, в процессе работы для Javascript.
  • Его синтаксис соответствует вашим требованиям (присваивания, инфиксные операторы).

Работа, которую вы бы оставили, - реализовать продолжения с разделителями, но вы уже знали об этом, когда исключили Lisp / Scheme.

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

Tcl. Синтаксис такой же простой, как Lisp, и он имеет expr proc для арифметики инфиксов. Он даже использует {} для блоков, поэтому, если вы щурились, вы можете сказать людям, что это язык, похожий на C.

У него нет инфиксного назначения a=b, но как только вы начинаете идти по пути общей записи инфиксов, языки становятся действительно очень сложными, поэтому я не уверен, насколько это совместимо с вашими другими требованиями.

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

Smalltalk и Io оба имеют удивительно простой, но выразительный синтаксис.

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

Логотип - это простой язык, похожий на Лисп, без скобок и нескольких сотен реализаций.

Информация о логотипе в Википедии .

См. Этот PDF для информации о реализациях: Дерево логотипа .

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

Brainfuck ?Я имею в виду, что у него всего 8 команд, каждая из которых отображается на один символ.

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

Я предполагаю, что это такое же упражнение для вашего назидания, как и желание получить полезный конечный продукт.

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

Lua - довольно популярный язык сценариев для такого рода вещей, который требует небольших, не особо производительных пользовательских сценариев.

Вы также можете подумать, соответствует ли сам javascript (или подмножество) вашим требованиям.

Также ознакомьтесь со списком здесь: http://en.wikipedia.org/wiki/Continuation#Programming_language_support

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

Сначала создайте интерпретатор LISP, это будет относительно просто.

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

1 голос
/ 16 октября 2010
1 голос
/ 14 октября 2010
...