2010-05-27 4 views
5

Я хочу создать очень простой экспериментальный язык программирования. Какие ресурсы я могу проверить, чтобы получить обзор процесса создания интерпретируемого языка. Я буду использовать C++ для создания и компиляции интерпретатора.Каков процесс создания интерпретируемого языка?

+1

Это немного слишком LISP. –

+1

@Neil: в то время как похоже, это не дубликат - он спрашивает об интерпретаторе Lisp, и ответы в основном эксклюзивные для Lisp. Хотя язык OP * может * быть достаточно, как Lisp для тех, кто применим, нет никакой определенности. –

+0

Связанный: http://stackoverflow.com/questions/1669/learning-to-write-a-compiler –

ответ

4

Вы должны реализовать как синтаксический анализатор и интерпретатор.

Существует большой свободный текст книги под названием «Языки программирования: Применение и интерпретация», которая использует схему для создания все более сложных переводчиков. Он также служит отличным введением в функции языка программирования.

Проверьте это здесь: http://www.cs.brown.edu/~sk/Publications/Books/ProgLangs/

Если схема не ваша чашка чая может быть стоит посмотреть в.

+2

heh Схема и C++ - это далеко друг от друга. – Earlz

+0

Ничего себе, это выглядит действительно хорошая книга. +1 для ссылки. –

+0

I понять, что C++ и схема нигде не близки друг к другу по спектру языков, но подход, который эта книга берет с помощью Схемы, может привести к тому, что искатель узнает больше о базовых принципах языкового дизайна. – Ben

0

Посмотрите на библиотеку подталкивание «духа» LL анализатор.

2

Несколько шагов:

Во-первых, построить лексический анализатор и анализатор. Это очень легко сделать с обычными инструментами, такими как lex и yacc, или с использованием более современных фреймворков, таких как Antlr (это то, что я рекомендую). Эти инструменты будут генерировать исходный код для вашего целевого языка, который вы затем сможете скомпилировать и включить в свой проект.

Лексер и анализатор будет создавать внутреннее представление исходного файла. Есть несколько различных способов приближения к этому:

  1. В модели байткода, исходный файл компилируется в внутреннем язык низкого уровня, для которого вы пишете байткода переводчика с, который непосредственно выполняет операцию , Например, работают языки Perl и .NET.
  2. В объекта дерево модели, исходный файл компилируется в дереве объектов, где каждый объект знает, как выполнить сам. После завершения разбора вы просто вызываете Exec() на корневой объект (который, в свою очередь, вызывает Exec() на своих дочерних элементах и ​​т. Д.). Это в основном метод, который я использую для моего интерпретированного языка для домена Phonix.
0

Чтобы создать интерпретируемый язык, вам нужно создать две вещи:

  • Формальное определение грамматики языка
  • синтаксический анализатор, который может читать и интерпретировать язык

После того, как вы определили сам язык, есть несколько инструментов, которые могут помочь в создании парсера языка. Классическими инструментами являются lex и yacc, а их версии с открытым исходным кодом flex и bison.

Смежные вопросы