Struktura kompilatora: Zadania skanera

Transkrypt

Struktura kompilatora: Zadania skanera
1. co to jest kompilator ? Etapy kompilacji
Kompilator: program, który tłumaczy program źródłowy na równoważny program wynikowy.
Program źródłowy jest napisany w języku źródłowym, a program wynikowy należy do języka
wynikowego. Wykonanie programu kompilatora następuje w czasie tłumaczenia.
CECHA ZASADNICZA: program po przetłumaczeniu nie da się zmienić, jest statyczny.
Kompilator jako dane wejściowe otrzymuje „cały” program źródłowy i przekształca go na
postać wynikową.
Program
Źródłowy
We
Kompilator
Wy
Program
wynikowy
Struktura kompilatora:
KOMPILATOR
ANALIZA
kod zrodlowy
Analizator
leksykalny
Analizator
syntaktyczny
SKANER
PARSER
SYNTEZA
Analizator
semantyczny
Generator
kodu
pośredniego
Optymalizator
kodu
pośredniego
Generator
kodu
ostatecznego
kod wynikowy
Tablica symboli (zmiennych, stałych, etykiet, nazw podprogramów)
2. Co to jest analiza leksykalna ?
Zadania skanera:
-
wyodrębnianie tokenów
ignorowanie komentarzy
ignorowanie białych znaków (spacji, tabulacji, znaków nowej linii…)
korelowanie błędów zgłaszanych przez kompilator z numerami linii (skaner może liczyć \n)
tworzenie kopii zbioru wejściowego (źródłowego) łącznie z komunikatami o błędach
czasami realizacja funkcji preprocessingu, rozwijanie makrodefinicji
Zadaniem analizatora leksykalnego jest przetwarzanie danych pochodzących ze strumienia
wejściowego a także rozpoznawanie ciągów znaków zbudowanych zgodnie z pewnymi zasadami;
Analiza leksykalna jest pierwszą fazą kompilacji;
Analiza leksykalna służy wyróżnieniu pewnych obiektów ze strumienia znaków
wejściowych. Obiekty te będziemy nazywali tokenami lub leksemami. Do opisu tych obiektów
używamy wyrażeń regularnych lub automatów skończonych
Automaty skończone opisują te same klasy obiektów co wyrażenia regularne
Przykładem generatora analizy leksykalnej jest flex.
Głównym zadaniem analizy leksykalnej jest grupowanie znaków strumienia wejściowego w
symbole leksykalne inaczej zwane token-ami .
Tokeny to inaczej elementarne składniki języka źródłowego np.: liczby, słowa kluczowe,
operatory i identyfikatory, nawiasy okrągłe, itd..
3.. Co to jest analiza składniowa ?
Analiza składniowa stanowi kolejny, po analizie leksykalnej etap kompilacji;
Analiza składniowa jest przeprowadzana przez analizator składniowy;
Do analizatora składniowego dostarczane są dane w postaci symboli leksykalnych;
Analizator po zakończeniu pracy zwraca tzw. drzewo rozbioru lub jego uproszczoną wersję
(abstrakcyjne drzewo składniowe)
Analiza składniowa służy wyprowadzeniu odpowiedniego drzewa (ang. syntax tree). Podstawowym
środkiem definiowania języków akceptowalnych przez analizatory składniowe są gramatyki
bezkontekstowe (context free grammar)
Analiza składniowa jest zwana także analizą hierarchiczną lub synktatyczną . Zadanie m analizy
składniowej jest zbadanie, czy jednostki leksyklane tworzą poprawne konstrukcje danego języka
programowania (np. : czy zachowana jest odpowiednia kolejność leksemów) .
Zadania parsera:
-Ma za zadanie dokonać rozbioru syntaktycznego tekstu źródłowego analizowanego programu.
-Pracuje na podstawie gramatyki syntaktycznej, która na ogół jest gramatyka bezkontekstowa.
-Od parsera oczekujemy odtworzenia wywodu i jakiegoś zanotowania tego wywodu — najczęściej
stosowanym sposobem notowania wyprowadzenia jest podanie ciągu numerów produkcji.
- Niekiedy równolegle z analiza syntaktyczna parser wykonuje pewne akcje semantyczne jak np.
generowanie kodu pośredniego w postaci ONP, tetrad (n-tek), itd.
Metody analizy składniowej:
-Metoda zejść rekurencyjnych
- Metoda zstępująca
Analizator LL(1) – Przeglądamy wejście od lewej do prawej strony odtwarzanie wywodu
lewostronnego metodą top-down 1-symbol podglądany na wejściu aby jednoznacznie określić
numer produkcji którą trzeba zastosować
Analizator LR(1) – Przeglądamy wejście od lewej do prawej strony odtwarzanie wywodu
prawostronnego metodą bottom- up 1-symbol podglądany na wejściu aby jednoznacznie określić
numer produkcji którą trzeba zastosować
Przykładem generatora analizy leksykalnej jest LLGEN.
4.. Co to jest analiza semantyczna ?
Zadania analizatora semantycznego
- Kontrola typów (type checking) –– np. czy operatory nie są, zastosowane do nieodpowiednich
operandów;
- Kontrola przebiegu sterowania (flow-of-control-checking)–– kompilator musi sprawdzić , czy
sterowanie w programie jest przekazywane w odpowiednie miejsce (np. czy nie jest wykonywany
skok spoza pętli do jej wnętrza);
- Kontrola unikalności (uniqueness checking) –– kompilator powinien sprawdzić, czy pewne
obiekty są definiowane w programie tylko jeden raz;
- Kontrola powtarzalności nazw (name-related checking) –– kompilator powinien sprawdzić, czy
w pewnych konstrukcjach określona nazwa pojawia sie więcej niż jeden raz.
Analiza semantyczna ma następujące zadania :
Sprawdzanie programu (programu źródłowego) pod względem semantycznej zgodności z
definicją języka źródłowego, w jakim program jest napisany;
Zbieranie informacji do generacji kodu pośredniego ;
-Kontrola zgodności typów;
-Kontrola przepływu sterowania;
-Unikalność deklaracji - kontrola statyczna;
-Powtórzenia nazw - kontrola statyczna;

Podobne dokumenty