Stworzyłem kilka ręcznie napisanych kompilatorów dla bardzo prostych języków, ale teraz chcę spróbować swoich sił w tworzeniu dynamicznego języka, podobnego do uproszczonego Pythona lub Ruby. Łatwo mi było jednak owinąć głowę wokół działania kompilatorów. Prymitywne kompilatory po prostu tłumaczą. Ale nie mogę tego zrobić, jeśli język jest dynamiczny. Muszę napisać interpretera lub maszynę wirtualną, która śledzi informacje w czasie wykonywania i nakłada na mnie znacznie więcej pracy.
Krótko mówiąc, czy są jakieś zasoby, które powinienem sprawdzić, skoro wiem, jak działają kompilatory, ale chcę przeprowadzić migrację do tworzenia interpretera? Istnieje kilka maszyn wirtualnych dla języków dynamicznych, ale nie mam problemu z uruchomieniem własnych. To wszystko dla mojego osobistego doświadczenia.
Szukam informacji, jak przejść od kompilatora do tłumacza. Jeśli już stworzyłem kompilator dla języka X, ale teraz co napisać tłumacza, co należy zrobić i czy są jakieś zasoby, które przejdą przez ten proces?
Nie chcę szerokich ani abstrakcyjnych zasobów, które omawiają działanie kompilatorów lub maszyn wirtualnych. Mam mnóstwo podręczników na ten temat. Wszystkie zasoby, które znalazłem online, zakładają, że masz 0 doświadczenia, a więc zaczynasz od analizy leksykalnej lub składniowej lub są one wyjątkowo abstrakcyjne. Mam działający kompilator, ale teraz chcę go przekształcić w tłumacza i dodać dynamiczne funkcje do języka.
Nie mogłem znaleźć zasobów na ten proces, jego zakres może być zbyt ograniczony lub zasoby na „zapleczu” tłumacza, nie będąc zbyt teoretycznym, dlatego opublikowałem tutaj.