Если интерпретатор, разово, быстро, без оптимизаций и с боль-мень простым синтаксисом -- ПРОСТО НАПИШИ! (на коленке). С Перлом ты знаком, вроде, вполне подойдет для написания интерпретатора.
Ты ж физик, соображалки хватит, там все не сложнее системы линейных ур-й. Ты ж не будешь читать книжку по линейке, если тебе надо простую систему линейных ур-й решить? И что такое детерминант знать не обязательно -- просто решаешь, и все... Ну, если совсем ничего не знаешь, погугли про обратную польскую запись, тетрады и триады (Reverse Polish notation, quadruples, triples по-английски) -- про синтаксические деревья общего вида (Abstract Syntax Tree) уже лишнее.
Но тоже просто -- транслируешь ("интерпретеруешь")в тетрады и заюзываешь одну из многочисленных библиотек для JIT. Или лопатишь в Це (Перл, Питон, Шелл -- подставить по вкусу) и вызываешь его компилятор. Только не совсем понимаю надобности такого -- все ж, наверное, топикстартер хотел именно интерпретатор.
> ...то "тетрады и триады" необязательно. Можно генерить код на C/C++.
Все равно де-факто изобретешь некую разновидность синтаксического дерева.
Простейший вариант -- стековая машина и Польская строка (есть исчерпываюший пример -- в русскоязычной даже -- Википедии, http://ru.wikipedia.org/wiki/Обратная_польская_запись ), тетрады чуть менее тупы и до них додуматься проще ИМХО...
> Если интерпретатор, разово, быстро, без оптимизаций и с боль-мень простым синтаксисом -- ПРОСТО НАПИШИ! (на коленке).
Очень паршивый подход. Так можно родить только кривое и убогое тормозилово. Это всё ж таки наука, в которой есть некоторое количество теории. И это теорию надо бы знать, благо, её совсем не много. Ну а зная теорию - можно тривиально и компилятор написать, это ничуть не сложнее (а для многих языков и намного проще) чем интерпретатор.
Меня очень долго мучает вопрос: Вот допустим тут вильфред собрался язык свой придумать (назовем его A )и компилятор для него, но ведь компилятор то будет работать не в интерпретаторе языка A, выходит что для исполнения произвольного кода на произвольном новом языке нужен другой язык B ранее существовавщий.
Как же тогда появился первый ЯП, ведь не всегда же были процессоры для выполнения кода.
Ziggurat is a framework for writing extensible programming languages, and for defining static semantics for those languages. In other words, it is a language designer's toolkit.
>Ziggurat is a framework for writing extensible programming languages, and for defining static semantics for those languages. In other words, it is a language designer's toolkit.
>> Если интерпретатор, разово, быстро, без оптимизаций и с боль-мень простым синтаксисом -- ПРОСТО НАПИШИ! (на коленке).
>Очень паршивый подход. Так можно родить только кривое и убогое тормозилово.
Очень часто этого достаточно. "Вам шашечки, или ехать?" Многие физики так поступают, не зная даже слова "интерпретатор". Для физиков с математикам (в отличие от ИТшников) разработка простейшей "ad hoc" теории -- состояние вполне привычное.
> Это всё ж таки наука, в которой есть некоторое количество теории.
См. пример выше. Линейка -- вполне себе наука, однако школьники решают линейные системы, ничего об этой науке не зная. Нам в каком-то типа 5 классе на дом математичка задавала (факультатив то был, есснно) -- придумать, как решить систему линейных ур-ий. Почти все "неравнодушные" к математике сами без труда разобрались.
-- пример раскрутки интерпретатора лиспа из Руби. Первая ссылка любопытна замерами производительности разных бекендов. Про компиляторы языков на питоне тоже что-то было, гуглить надо (re2c+..) -- но в целом это в качестве анекдота (хотя C появился из интерпретатора B который обрезанный BCPL, так что дерзайте =)