Witam, od jakiegoś czasu interesuje mnie pisanie parserów języków. Właśnie kończę ten poradnik: http://informatyka.wroc.pl/node/391
Mam plany na wiele projektów... chcę się za niedługo wziąć za pisanie własnego interpretera Brainfuck'a, a w niedalekiej przyszłości również języka opisowego dla moich programów w SFML oraz zrobić coś w stylu języka edukacyjnego Logo. Jest tego sporo ale przynajmniej już wiem "z czym się do je" i jak za takie projekty w ogóle się zabrać.
Będą to oczywiście języki interpretowane i wykonywane przez gotowy program napisany np. w C++. Tzn. że nie będą w nich powstawać niezależne programy tylko bardziej coś w formie skryptów.
Wszyscy mówią że do zrobienia kompilatora trzeba znać mega dobrze assembler, architekturę procesora itd... Mam jednak taki abstrakcyjny i czysto teoretyczny pomysł jak zrobić w przyszłości kompilator dla programów w moim języku bez znajomości ASM'a.
No więc tak...
Parser generuje na podstawie składni konkretnej składnie abstrakcyjną, czyli tworzy formę zwaną drzewem programu. Drzewo może zrobić parser ale możemy je też napisać sami:
Program* p = new Composition(
new Assign("i", new Constant(0)),
new Whaile(
new Binary_operator('-', new Constant(10), new Variable("i")),
new Composition(
new Write("i"),
new Assign("i",
new Binary_operator('+', new Variable("i"), new Constant(1)))
)
)
);
Memory m;
p->eval(m);
Gdyby tak zamiast zrobić klasyczny parser który dynamicznie w chwili działania programu tworzy drzewo, stworzyć program który w osobnym pliku np. *.cpp napisze taką strukturę co widzicie powyżej w postaci tekstu... Potem trzeba tylko skompilować powstały plik *.cpp wykorzystując już istniejący kompilator języka C++. ( oczywiście wszystkie kroki będą przebiegały automatycznie wykonując się w jakimś skrypcie ).
Najprościej mówiąc chodzi mi o to żeby zamiast kompilować bezpośrednio kod w naszym języku, można by było go przetłumaczyć na kod innego języka który już posiada kompilator.
Wiem oczywiście że to nie jest wydajne rozwiązanie, jednak jest ono w zasięgu mojej wiedzy. Jedynym ograniczeniem jest tylko mój intelekt przy konstruowaniu parsera ;)
Co o czymś taki sądzicie? Przypuszczam że ameryki nie odkryłem... jak się więc takie rozwiązanie profesjonalnie nazywa? Czy są technologie które działają w ten sposób? Oczywiście przypominam że tylko sobie tak gdybam bo na razie wystarczy mi zrobić zwykły interpreter.
Z góry dziękuję za informacje i opinie oraz pozdrawiam serdecznie :)