Kompilator Kotka - dokumentacja

Kompilator powstał jako projekt laboratoryjny na przedmiocie Metody Realizacji Języków Programowania.
Autor: Tomasz Czajka

Opis języka

Zgrubna definicja języka.

Moje rozszerzenia i założenia:

Instalacja i uruchamianie

Potrzebny jest: Należy rozpakować plik kotek.zip i skompilować kompilator poleceniem make. Następnie kompilację programu abc.kotek przeprowadzamy w następujący sposób:
kotek abc.kotek   -- to generuje plik w asemblerze abc.S
as -o abc.o abc.S -- asembler
ld -o abc.o libkotek.o -- łączymy z biblioteką czasu wykonania (libkotek.o)
Skrypt compile wywołuje te właśnie trzy komendy.

Moduły

Utils
Różne pomocnicze funkcje.
Error
Funkcje obsługi błędów.
Syntax
Definicja typu drzewa składni programu.
Lexer
Lekser symboli kotka, generowany przez ocamllex.
Parser
Parser kotka, generowany przez ocamlyacc.
Sem
Definicja typu drzewa semantycznego programu (udekorowane drzewo składni) oraz funkcji pomocniczych.
Semantic_an
Analizator semantyczny. Przekształca drzewo składni na drzewo semantyczne. Wykrywa wszystkie błędy semantyczne. Deklaracje rozwikływane są metodą przeszukiwania wgłąb (wykrywane są cykle).

Tablica symboli używana jest tylko na tym etapie przetwarzania. Trzymana jest ona na niezmienialnym (immutable) zrównoważonym drzewie, dzięki czemu nie trzeba martwić się usuwaniem ani przesłanianiem symboli (mimo że język zabrania przesłaniania nazw, niektóre symbole i tak są przesłaniane, np. result).

Generator
Generuje kod w asemblerze na podstawie drzewa semantycznego.
Main
Łączy program w całość.
libkotek
Biblioteka czasu wykonywania dla kotka, napisana w asemblerze. Zawiera różne użyteczne funkcje, w tym przydzielanie pamięci (malloc). Nie zostało zaimplementowane odśmiecanie pamięci - pamięć przydzielana jest po kolei bez zwalniania.