Я решил записать маленький интерпретатор как свой следующий проект в Ruby. Какое знание/навыки мне придется быть успешным?
Я не выбрал язык для интерпретации все же, но я ищу что-то, что не является игрушечным языком, но было бы относительно легко записать интерпретатор для. Заранее спасибо.
Вы должны будете изучить как минимум:
Прекрасное введение в некоторые из этих тем можно найти во вводном тексте Структура и интерпретация компьютерных программ . В этой книге используется язык Scheme, который представляет собой надежный, хорошо определенный язык, который идеально подходит для вашей первой реализации интерпретатора. Настоятельно рекомендуется.
Существует проект Tree top, который может быть вам полезен http://treetop.rubyforge.org/
В этой главе SICP показано, как написать интерпретатор Лиспа на Лиспе (метациркулярный вычислитель). На мой взгляд, это лучшее место для начала. Затем вы можете перейти к Lisp in Small Pieces , чтобы узнать, как писать сложные интерпретаторы и компиляторы для Lisp. Преимущество реализации такого языка, как Lisp (в самом Лиспе!), Состоит в том, что вы бесплатно получаете лексический анализатор, парсер, AST, представление данных / программы и REPL. Вы можете сконцентрироваться на задаче заставить ваш отличный язык работать!
Вы можете проверить Ruby Draft Specification http://ruby-std.netlab.jp/
Я еще не определился с языком для перевода, но ищу что-то, что не является игрушечным языком, но было бы относительно легко написать переводчик для. Заранее спасибо.
Попробуйте какой-нибудь диалект Lisp, например Scheme или Clojure. (Теперь есть идея: Clojure-in-Ruby, который интегрируется с Ruby так же, как Clojure интегрируется с Java.)
В Lisp нет необходимости беспокоиться об особенностях синтаксиса, поскольку синтаксис Lisp намного ближе к синтаксису. абстрактное синтаксическое дерево.
Пару дней назад у меня возникла похожая идея. LISP, безусловно, проще всего реализовать, потому что синтаксис очень прост, а структуры данных, которыми манипулирует язык, являются теми же структурами, в которых написан код. Следовательно, вам нужна только минимальная реализация, а остальное можно определить в терминах
Однако, если вы пытаетесь изучить синтаксический анализ, вам может потребоваться создать более сложный язык с абстрактными деревьями синтаксиса и т. д.
Если вы хотите проверить мою (буквально двухдневную) реализацию Java Lisp, посетите mylisp.googlecode.com . Я'
Это не ооочень сложно. вот интерпретатор LISP в ruby , а исходный код настолько мал, что вы должны скопировать / вставить его. но ты собираешься изучать LISP сейчас? хе-хе.