ANALIZA
Cel projektu
Celem projektu jest zaimplementowanie prostego interpretera języka programowania, który umożliwiałby uruchamianie nieskomplikowanych programów, napisanych zgodnie ze składnią tego języka.
Jako jezyk interpretowany wybrany został jeżyk PASCAL.
Natomiast do implmentacji interpretera użyte zostanie środowisko BORLAND - DELPHI 6.
Czym jest interpeter?
Interpreter to rodzaj programu komputerowego (translatora), który analizuje kod źródłowy a przeanalizowane fragmenty (zazwyczaj jedna instrukcja) są wykonywane. Wykonanie powtórnie tego samego fragmentu wymaga powtórnej analizy. Jest to działanie przeciwne do kompilatora, który nie wykonuje wejściowego programu (kodu źródłowego) lecz tłumaczy go do wykonywalnego kodu maszynowego, który jest zapisywany do pliku w celu późniejszego wykonania. W większości przypadków jest możliwe wykonanie tego samego kodu źródłowego zarówno bezpośrednio przez interpreter jak i przez kompilację i wykonanie wygenerowanego kodu źródłowego.
Wykonanie programu za pomocą interpretera zajmuje więcej czasu niż wykonanie skompilowanego kodu, lecz może zająć mniej czasu niż kompilacja i uruchomienie. Jest to zwłaszcza ważne przy tworzeniu i testowaniu kodu kiedy cykl edycja-interpretacja-debugowanie może często być znacznie krótszy niż cykl edycja-kompilacja-uruchomienie-debugowanie.
Interpretacja kodu jest wolniejsza niż uruchamianie skompilowanego kodu ponieważ interpreter musi analizować każde wyrażenie i następnie wykonać akcję, a kod kompilowany jedynie wykonuje akcję. Ta analiza w momencie uruchomienia jest znana jako "koszt interpretacji". Dostęp do zmiennych jest także wolniejszy w interpreterze gdyż odwzorowanie identyfikatorów na miejsca pamięci musi zostać dokonane podczas uruchomienia a nie podczas kompilacji. Dlatego niektóre interpretery tworzą dodatkowe dane (np. adresy zmiennych) przyspieszające wykonanie programu.
Bliższe spojrzenie
Na całość interpretera zazwyczaj składają się 4 moduły:
analizator leksykalny - podstawowymi celami analizatora leksykalnego są :
- odsprawdzenie czy tekst napisany w języku komputerowym nie zawiera niedozwolonych znaków (i ich ewentualne usunięcie). W większości języków komputerowych dozwolone jest użycie wszystkich znaków ASCII.
- pogrupowanie znaków w jednostki leksykalne - tokeny ; przez token rozumie się przeważnie grupę znaków odseparowaną od pozostałych białymi znakami (spacja, tabulator, cr),
- rozpoznanie tokenów, wyróżnienie słów kluczowych, operatorów, łańcuchów znakowych,
- stworzenie tablicy tokenów, przechowującej tokeny i informacje o nich.
Analizator przekazuje rozpoznawane tokeny do parsera, który wykorzystuje również tablicę tokenów do późniejszego modyfikowania ich wartości.
analizator składniowy (parser) - analizuje tekst napisany w języku i dokonuje jego rozbioru gramatycznego. Równocześnie sprawdzana jest poprawność gramatyczna. Aby to było możliwe, parser przechowuje definicję gramatyki języka. W trakcie rozbioru gramatycznego tworzone są dodatkowe tablice, które umożliwiają dalszą obróbkę tekstu programu przez generator kodu.
Po sprawdzeniu poprawności tekstu, wykryciu i ewentualnej korekcji błędów, następuje generacja kodu wynikowego. Tym zajmuje się generator kodu.
linker
executor - inteligentne struktury do wykonywania programu.
Wymagania funkcjonalne interpretara
W projekcie zostaną zrealizowane nastepujące podstawowe elementy jezyka PASCAL:
1. deklaracja stałych i zmiennych globalnych
2. proste typy danych: integer, real, boolean
3. operacje wejścia – wyjścia: read, write, readln, writeln (wczytywanie z klawiatury i wypisywanie na ekran)
4. proste operacje arytmetyczne: +,/,*,-
5. operacja przypisania: :=
6. operacje porównania: <, >, =, <>,<=,>=
6. operacje logiczne: and, or
8. separator: ; .
9. początek/ koniec bloku: begin, end
10. komentarz: {, }
10. operacja warunkowa: if then
11. pętla: while do
11. pętla: for