7

Próbuję nauczyć się budować prosty kompilator jako hobby. Celuję w wirtualną maszynę Java.Konwertowanie drzewa składni abstrakcyjnej na kod bajtu

Napisałem prostą gramatykę za pomocą wtyczki ANTLR dla Eclipse.

Ktoś powiedział mi, że jest coś znanego jako węzeł metody w AST generowanym przez Antlr i to musi być wywołane. Mam zamiar użyć ASM do wygenerowania kodu bajtowego. Co to jest węzeł metody i jak mogę go nazwać z ASM i zrobić instrukcję metody wizyty?

Co z analizatorem semantycznym kompilatora. Czy należy to napisać ręcznie, czy są jakieś generatory?

Odpowiedz

3

Zadajesz tutaj wiele niepowiązanych pytań. W zależności od zdefiniowanego języka może istnieć węzeł metody w twoim języku lub nie będzie żadnego, powiedzmy, jeśli twój język będzie kompilował się bezwarunkowo z metodą main(String[]).

Istnieje wiele metod przekształcania AST w język docelowy. Zwykle nie generowałbyś kodu bezpośrednio, ale generowałbyś AST dla swojej docelowej platformy i miałeś ładną drukarkę generującą z niego kod, używając Treewalkera.

Analiza semantyczna to programowanie kompilatora. Odczyt i zrozumienie danych wejściowych na poziomie składniowym jest analizą. Będziesz musiał napisać analizator semantyczny samodzielnie lub nie napisałbyś w ogóle kompilatora. ;-)

Zakładam, że używasz Jasmin do kompilacji kodu zespołu? Bardzo dobrym początkiem byłoby pisanie gramatyk dla języka wejściowego i języka docelowego (Jasmin) i zastanowienie się, które struktury wejściowe renderowałyby wynik. Jak napisać pętlę for i := 1 to 10 w Jasmin? Rozwiązuj małe problemy i rozszerzaj swój kompilator w razie potrzeby, ale powoli, wcześnie i dokładnie testuj nowo wdrożone transformacje.

A bardzo dobre czytanie: Let's Build a Compiler, by Jack Crenshaw.

+1

Wielkie dzięki, otrzymałem prawie taką samą odpowiedź od [stephen brin] (http://steveonjava.com/) niedawno, Zbudujmy kompilator, przez Jacka Crenshawa wydaje się bardzo dobry, zacznę go czytać. – Gautam

Powiązane problemy