Drzewo programu / kompilator

Obiektowy język definiowania dokumentów hipertekstowych i jego implementacja.

ObjectHTML : Opis implementacji : Drzewo programu / kompilator

Poprzednia strona: Przykłady użycia
Nastepna strona: Opis najważniejszych klas

Obecna wersja kompilatora została stworzona pod system Linux. Wszystkie testy i kompilacje były wykonywane pod dystrybucją Linuxa firmy RedHat (http://www.redhat.com/) w wersji 7.

Do skompilowania programu będą potrzebne standardowe narzędzia i biblioteki dostępne pod systemem Linux. Są to:

flex - generator analizatora leksykalnego

bison - generator analizatora składniowego

gcc - kompilator języka C++

g++ lib - implementacja biblioteki STL (http://www.sgi.com/Technology/STL/)

Dokumentacja to tych narzędzi jest dostępna w postaci stron "man" pod systemem Linux. Dodatkowe informacje można znaleźć na stronie: http://www.gnu.org/.

Kompilator może współpracować z dwiema relacyjnymi bazami danych: mySQL (http://www.mysql.org/), postgres (http://www.postgresql.org/). W systemie muszą być zainstalowane pliki nagłówkowe wymienionych baz danych aby skompilować program z ich obsługą.

  1. Drzewo programu

  2. Najważniejszą strukturą danych kompilatora jest drzewo programu [1]. W tej implementacji jest ono automatycznie tworzone przez analizator składniowy, plik z gramatyką i instrukcjami tworzenia węzłów to: ohtml.y. Analizator składniowy na wejściu pobiera gotowe leksemy, np.: napis, identyfikator, słowo kluczowe. Są one rozpoznawane przez analizator leksykalny. Plik z definicjami leksemów to ohtml.l.

    W ten sposób po dwóch etapach kompilacji: analizie leksykalnej i składniowej [2], zbudowane jest drzewo programu OHTML. Kolejnymi etapami kompilacji są: analiza semantyczna i generowanie kodu [2], w przypadku kompilatora OHTML tworzenie plików zawierających kod HTML.

    Ze względu na specyfikę języka OHTML ostatnie dwa etapy kompilacji są połączone. W języku tym występują konstrukcje pozwalające sparametryzować dostęp do atrybutów i metod, innymi słowy nazwy atrybutów i wywoływanych metod mogą być dostępne dopiero w trakcie wykonywania instrukcji OHTML. Dodatkowo język pozwala na użycie obiektu lub klasy przed jej definicją. Jest to duże ułatwienie dla użytkownika, ale komplikuje analizę semantyczną i generowanie kodu.

  3. Kompilator

  4. Kod źródłowy programu sterującego głównymi etapami kompilacji to: compiler.cc. Etapy kompilacji są następujące:
    • Wywołanie funkcji yyparse budującej drzewo programu (analiza leksykalna i składniowa). Jest to funkcja tworzona automatycznie przez analizator składniowy.
    • Zbudowanie tablic asocjacyjnych dla klas i grup. Dzięki tym tablicom możliwy jest szybki dostęp do dowolnego, globalnego obiektu.
    • Zbudowanie połączeń między klasą a jej składowymi.
    • Dziedziczenie atrybutów i metod.
    • Przygotowanie obiektów typu file. Proszę zauważyć, że klasy są już w pełni zainicjowane. Dzięki temu można utworzyć nazwy plików i URL'e. W ten sposób rozwiązany został problem wcześniejszego użycia obiektu, klasy przed ich definicją.
    • Stworzenie powiązań między grupami i podgrupami.
    • Zainicjowanie grup.
    • Generowanie plików. Dla wszystkich obiektów file wywoływana jest metoda compile.

Listopad 2000