Как записать интерпретатор?

Я решил записать маленький интерпретатор как свой следующий проект в Ruby. Какое знание/навыки мне придется быть успешным?
Я не выбрал язык для интерпретации все же, но я ищу что-то, что не является игрушечным языком, но было бы относительно легко записать интерпретатор для. Заранее спасибо.

15
задан ecounysis 18 December 2009 в 07:37
поделиться

7 ответов

Вы должны будете изучить как минимум:

  • лексический анализ (группирование символов в токены)
  • синтаксический анализ (объединение токенов в структуру)
  • абстрактные синтаксические деревья (представляющие структуру программы в структуре данных)
  • представление данных (при условии, что в вашем языке есть переменные)
  • цикл оценки, который «запускает» вашу программу

Прекрасное введение в некоторые из этих тем можно найти во вводном тексте Структура и интерпретация компьютерных программ . В этой книге используется язык Scheme, который представляет собой надежный, хорошо определенный язык, который идеально подходит для вашей первой реализации интерпретатора. Настоятельно рекомендуется.

30
ответ дан 1 December 2019 в 00:33
поделиться

Существует проект Tree top, который может быть вам полезен http://treetop.rubyforge.org/

2
ответ дан 1 December 2019 в 00:33
поделиться

В этой главе SICP показано, как написать интерпретатор Лиспа на Лиспе (метациркулярный вычислитель). На мой взгляд, это лучшее место для начала. Затем вы можете перейти к Lisp in Small Pieces , чтобы узнать, как писать сложные интерпретаторы и компиляторы для Lisp. Преимущество реализации такого языка, как Lisp (в самом Лиспе!), Состоит в том, что вы бесплатно получаете лексический анализатор, парсер, AST, представление данных / программы и REPL. Вы можете сконцентрироваться на задаче заставить ваш отличный язык работать!

2
ответ дан 1 December 2019 в 00:33
поделиться

Вы можете проверить Ruby Draft Specification http://ruby-std.netlab.jp/

2
ответ дан 1 December 2019 в 00:33
поделиться

Я еще не определился с языком для перевода, но ищу что-то, что не является игрушечным языком, но было бы относительно легко написать переводчик для. Заранее спасибо.

Попробуйте какой-нибудь диалект Lisp, например Scheme или Clojure. (Теперь есть идея: Clojure-in-Ruby, который интегрируется с Ruby так же, как Clojure интегрируется с Java.)

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

5
ответ дан 1 December 2019 в 00:33
поделиться

Пару дней назад у меня возникла похожая идея. LISP, безусловно, проще всего реализовать, потому что синтаксис очень прост, а структуры данных, которыми манипулирует язык, являются теми же структурами, в которых написан код. Следовательно, вам нужна только минимальная реализация, а остальное можно определить в терминах

Однако, если вы пытаетесь изучить синтаксический анализ, вам может потребоваться создать более сложный язык с абстрактными деревьями синтаксиса и т. д.

Если вы хотите проверить мою (буквально двухдневную) реализацию Java Lisp, посетите mylisp.googlecode.com . Я'

2
ответ дан 1 December 2019 в 00:33
поделиться

Это не ооочень сложно. вот интерпретатор LISP в ruby ​​, а исходный код настолько мал, что вы должны скопировать / вставить его. но ты собираешься изучать LISP сейчас? хе-хе.

1
ответ дан 1 December 2019 в 00:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: