Strona główna

Interpreter

Notacja BNF

 


Na całość interpretera zazwyczaj składają się 4 moduły:

 

  • analizator leksykalny - podstawowymi celami analizatora leksykalnego są : 

    • sprawdzenie 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.

 


Opis interpretera

PASCAL-PRETTER

Pascal-Pretter został napisany w Delphi 6.0. Interpretuje on podstawowe instrukcje języka Turbo Pascal v7.0.

 

Opis działania

Pascal-Pretter działa na zasadzie interpretacji kodu który ma wykonać.

Aby takowa interpretacja była możliwa konieczne jest poczynienie pewnych działań na tekście kodu, tzn. sprawdzenie jego poprawności leksykalnej, sprawdzenie poprawności składniowej instrukcji, analizie kodu i w końcu wykonaniu go.

Stworzony interpreter - aby  wykonać kod - wykonuje następujące działania, zmierzające do sprawdzenia poprawności kodu:

  • Przygotowanie tekstu

  • Dzielenie tekstu na tokeny,

  • Sprawdzenie poprawności struktury kodu,

  • Sprawdzenie poprawności deklaracji w sekcji CONST, jeśli takowa znajduje się w kodzie,

  • Wczytanie stałych jeśli blok takowych znajduje się w kodzie

  • Sprawdzenie poprawności deklaracji w sekcji VAR, jeśli takowa znajduje się w kodzie,

  • Wczytanie zmiennych jeśli blok takowych znajduje się w kodzie

  • Sprawdzenie kodu pod względem poprawności występowania np. słów kluczowych, operatorów, itp.,

  • Sprawdzenie poprawności w sekcji BEGIN..END.

    • Występowanie bloków instrukcji,

    • Występowanie pętli FOR..TO..DO,

    • Sprawdzanie występowania i poprawności instrukcji prostych,

    • Sprawdzanie występowania i poprawności instrukcji złożonych,

    • Sprawdzanie poprawności instrukcji WE/WY tj. Read, Readln, Write, Wtiteln,

Po wstępnej analizie kodu następuje przejście do fazy interpretacji kodu tzn. rozpoznanie występujących instrukcji i budowa z nich listy instrukcji do wykonania rozumianych i interpretowanych przez Pascal-Pretter.

Ostatnim krokiem jest wykonanie kodu.

W czasie wszystkich kroków sprawdzana jest poprawność składniowa jak i zgodność znaczeniowa wykonywanych instrukcji, tzn, zgodność typów, readeklaracja zmiennych, itp.

Pascal-Pretter posiada konstrukcję modułową w celu ułatwienia dalszej rozbudowy.

Moduł UBLAD - Moduł przechowywania i wyświetlania błędów kompilacji, wykonania, itp.

Moduł UANALIZA - Moduł zawierający mechanizmy sprawdzania poprawności interpretowanego kodu,

Moduł UINTERPRETACJA - Interpretacja kodu i budowa listy instrukcji do wykonania.

Moduł UKOMPILACJA - Wykonanie listy stworzonych wcześniej instrukcji.

Dodatkowo aby zwizualizować wykonanie programu i sam program posłużono się środowiskiem graficznym i użyto następujących form:

FGLOWNY - Forma główna programu.

FUSTAWIENIA - Forma ustawień programu.

FWYNIK - Wyświetlenie wyników działania programu.