Создание собственного интерпретатора, который может функционировать как компилятор - PullRequest
7 голосов
/ 14 апреля 2010

Можно ли мне создать свой собственный интерпретатор, который затем можно будет преобразовать в компилятор? Если да, как мне его построить?

Ответы [ 3 ]

11 голосов
/ 14 апреля 2010

Это называется Вторая проекция Футамуры. Впервые он был описан Проф. Ёсихико Футамура в своей статье 1971 года Частичная оценка вычислительного процесса & ndash; Подход к компилятору-компилятору (японский) , английская версия , которая была переиздана 28 лет спустя.

Используется Частичная оценка , путем частичной оценки самого частичного вычислителя по отношению к интерпретатору, в результате чего получается компилятор.

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

0 голосов
/ 05 июня 2017

Помимо проекций Футарумы, другой подход - это мета-трассировка джита. Jit мета-трассировки не напрямую или не отслеживает ваши программы, но косвенно, через интерпретатор. RPython - это классная структура мета-трассировки. Вы пишете интерпретатор в ограниченной версии python, а RPython превращает его в jit-компилятор на C.

0 голосов
/ 17 апреля 2010

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

...