Переводчик от источника к источнику или пользовательский интерпретатор?

#compiler-construction #lua #code-translation

#построение компилятора #lua #код-перевод

Вопрос:

Итак, мне интересно, были ли у кого-нибудь какие-либо мысли (надеюсь, основанные на опыте) о преимуществах создания переводчика из исходного кода в исходный по сравнению с созданием пользовательского интерпретатора. Я работаю над проектом, который интерпретирует математические функции, и до сих пор я полагался на использование Lua для выполнения своей грязной работы. Сейчас я нахожусь на том этапе, когда мне нужно либо изменить строку ввода, предоставленную пользователем, либо создать интерпретатор для моего DSL (например, я хочу добавить пользовательскую функциональность, чтобы вы могли нарезать массивы типа x [1: 2], что невозможно в Lua — поэтому я бы изменил это на что-то вроде range (x, 1, 2) [просто в качестве примера]).

Я также обеспокоен будущей расширяемостью. Я хотел бы позволить людям определять свои собственные функции в Lua, поэтому я не уверен, как бы я включил это, если бы я создал пользовательский интерпретатор. Итак, если у кого-нибудь есть какие-либо полезные материалы для чтения о переводчиках из исходного кода в исходный и / или о создании пользовательской виртуальной машины / интерпретатора, которая имеет возможность вызывать функции Lua, я был бы очень признателен!

Комментарии:

1. Несколько человек в списке рассылки Lua активно разрабатывают математические материалы с Lua. Подумайте о том, чтобы добавить строку для получения некоторой информации.

Ответ №1:

Взгляните на Metalua.

Ответ №2:

Если вы хотите использовать Lua, вы также можете сгенерировать байт-код Lua вместо исходного кода Lua. Недостатком является то, что байт-код не переносим.