Как написать переводчика?
Я решил написать небольшой интерпретатор в качестве своего следующего проекта в Ruby. Какие знания и навыки мне понадобится, чтобы быть успешными?
Я еще не решил на языке интерпретировать, но я ищу что-то, что не является игрушечным языком, но было бы относительно легко написать переводчика.
Заранее спасибо.
Ответы
Ответ 1
Вам нужно будет узнать хотя бы:
- лексический анализ (группировка символов в токены)
- синтаксический анализ (объединение маркеров вместе в структуру)
- абстрактные деревья синтаксиса (представляющие структуру программы в структуре данных)
- (если ваш язык будет иметь переменные)
- цикл оценки, который запускает вашу программу
Отличное введение в некоторые из этих тем можно найти во вводном тексте Структура и интерпретация компьютерных программ. Язык, используемый в этой книге, - это схема, которая является надежным, хорошо определенным языком, который идеально подходит для вашей первой реализации интерпретатора. Очень рекомендуется.
Ответ 2
Я еще не определил язык для интерпретации, но я ищу то, что не является игрушечным языком, но было бы относительно легко написать интерпретатор для. Спасибо заранее.
Попробуйте какой-нибудь диалект Lisp, например, Scheme или Clojure. (Теперь есть идея: Clojure -in-Ruby, которая интегрируется с Ruby, а также Clojure делает с Java.)
С Lisp нет необходимости беспокоиться об идиосинкразиях синтаксиса, поскольку синтаксис Lisp намного ближе к абстрактному синтаксическому дереву.
Ответ 3
В этой главе SICP показано, как написать интерпретатор Lisp в Lisp (метакрикулярный оценщик). По-моему, это лучшее место для начала. Затем вы можете перейти к Lisp в Small Pieces, чтобы узнать, как писать передовые интерпретаторы и компиляторы для Lisp. Преимущество реализации языка типа Lisp (в самом Lisp!) Заключается в том, что вы бесплатно получаете лексический анализатор, парсер, AST, представление данных/программ и REPL. Вы можете сосредоточиться на задаче заставить ваш отличный язык работать!
Ответ 4
Существует проект верхнего уровня дерева, который может быть вам полезен http://treetop.rubyforge.org/
Ответ 5
Вы можете проверить спецификацию Ruby Draft http://ruby-std.netlab.jp/
Ответ 6
У меня была аналогичная идея пару дней назад. LISP на сегодняшний день проще всего реализовать, потому что синтаксис настолько прост, и структуры данных, которыми манипулирует язык, являются теми же структурами, в которых написан код. Следовательно, вам нужна только минимальная реализация и может определять остальное в само по себе.
Однако, если вы пытаетесь узнать о разборе, вы можете захотеть сделать более сложный язык с абстрактными синтаксическими деревьями и т.д.
Если вы хотите проверить мою (буквально две дня) реализацию Java из lisp, зайдите mylisp.googlecode.com. Я все еще работаю над этим, но невероятно, как быстро прошло время, чтобы заставить существующие вещи работать.
Ответ 7
Это не так сложно. здесь LISP интерпретатор в ruby , и источник настолько мал, что вы должны его скопировать/вставить. но вы собираетесь узнать LISP сейчас? хе-хе.
Ответ 8
Если вы просто делаете это ради удовольствия, составите свой собственный, простой язык и просто попробуйте. Моя рекомендация будет похожа на действительно простой классический BASIC (без визуального базового или объектно-ориентированного). С номерами строк, GOTO, INPUT и PRINT и что это. Вы можете сделать основы, и вы лучше понимаете, как все работает.
Знания, которые вам понадобятся?
- Tokenizing (превращение этого огромного куска символов в нечто более эффективно читаемое, эффективное разделение его на слова)
- Анализ (переключение маркеров и построение структуры данных)
- Интерпретация (циклизация структуры данных и выполнение каждой команды)
И для этого последнего вам также понадобится способ сохранить переменные. Обычно вы просто реализуете "стек", один огромный блок данных, в котором вы можете отметить область в конце.
Ответ 9
Он не реализован в Lisp, но я нашел Write Yourself Scheme за 48 часов, чтобы быть очень полезным документом, когда я начинал с Haskell (хотя я не дошел до конца после 48 часов, YMMV). Это также дает вам много понимания устных переводчиков в целом.
Ответ 10
Я могу порекомендовать эту книгу. В нем обсуждаются шаблоны для написания парсеров и переводчиков и многое другое:
http://www.amazon.co.uk/s/ref=nb_sb_noss?url=search-alias%3Daps&field-keywords=language+implementation+patterns&x=0&y=0