Drzewo programu / kompilator

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

ObjectHTML

Wstęp - geneza, zastosowania
Opis podstawowych pojęć
    Internet
    IP
    TCP
    HTTP
    WWW
    HTML
    URL
    Pozostałe usługi
Definicje
Inne rozwiazania
    Wprowadzenie
    ASP
    JSP
    PHP
    Homesite
    Microsoft FrontPage
Projekt języka
    Struktura leksykalna
    Komentarze
    Typy atrybutów i zmiennych
    Podstawowe składowe programu
    Deklaracje
    Klasy
    Metody
    Atrybuty
    Grupy
        Wprowadzenie
        Definicja
    Instrukcje
        $
        [ ]
        call
        set
        append
        incr
        if
        while
        for
        currenttime
        encode
        import
        export
        grmembers
        grname
        grparent
        lastwordin
        firstwordin
        beforeword
        afterword
        query
    Wyrażenia i operatory
    file
    image
    include
    Gramatyka
Wywołanie kompilatora
Program narzędziowy makedefs
    Geneza i ogólny opis
    Uruchamianie
    Przykłady użycia
Opis implementacji
    Drzewo programu / kompilator ->
    Opis najważniejszych klas
Przykładowa aplikacja
Podsumowanie
Literatura

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