Metody realizacji języków programowania/MRJP Wykład 1: Różnice pomiędzy wersjami
Linia 18: | Linia 18: | ||
W podręcznikach poświęconych kompilacji temat ten przedstawiany jest dośyć pobieżnie. Kompilacja programów napisanych w Javie wymaga jednak dobrego zrozumienia zasad wiązania wystąpień aplikacyjnych identyfikatorów z odpowiednimi wystąpieniami deklacji definiujących znaczenie danego identyfikatora w kontekście jego wystąpienia aplikacyjnego. | W podręcznikach poświęconych kompilacji temat ten przedstawiany jest dośyć pobieżnie. Kompilacja programów napisanych w Javie wymaga jednak dobrego zrozumienia zasad wiązania wystąpień aplikacyjnych identyfikatorów z odpowiednimi wystąpieniami deklacji definiujących znaczenie danego identyfikatora w kontekście jego wystąpienia aplikacyjnego. | ||
Kolejny wykład poświęcony jest zagadnieniu staycznej analizy semantycznej.... | Kolejny wykład poświęcony jest zagadnieniu staycznej analizy semantycznej. Niewiele osób zdaje sobie sprawę z tego, że prawdziwą gramatyką języka programowania wcale nie jest gramatyka bezkontekstowa zapisywan zwykle w notacji BNF lub w postaci diagramów. Gramatyki języków programowania są gramatykami kontekstowymi. Trochę szkoda, że nie są one publikowane. Ale nie jest to wcale potrzebne. Właśnie moduł kontroli typów sprawdza czy kod źródłowy jest poprawny i sygnalizuje występowanie ewentualnego błędu kontekstowego. | ||
Jeżeli żadnego błędu nie wykryto można przejść do generowania kodu wynikowego. | |||
Musimy jednak wiedzieć na jaką maszynę będziemy generować kod. Bardzo popularnym rozwiązaniem jest generowanie kodu na pewną maszyne wirtualną. Potem można dokonywą kompilacji na pewną sprzętową platformę np. Intela czy PowerPC. | |||
A więc najpierw musimy poznać maszynę wirtualną. W jaki sposób wygląda kod tej maszyny. Jak powstaja i są przechowywane rekordy aktywacji metod (procedur) i obiekty klas. Tej tematyce są poswięcone kolejne dwa wykłady. | |||
== Praca czytelnika/studenta == | == Praca czytelnika/studenta == |
Wersja z 19:15, 28 wrz 2006
Wstep
Wykład ten stanowi uzupełnienie wykładu Techniki Kompilacji.
Nasz czytelnik mógł się zorientować, że w poprzednim wykładzie nacisk jest położony na analizę leksykalną i analizę składniową wykonywane podczas kompilacji. Te zadania analizy wystepują nie tylko podczas kompilacji ale także w wielu innych programach. Niektóre aplikacje tworzone przez Ciebie czytelniku będą być może zawierały moduły analizy składniowej.
Cele
Obecny wykład ma dwa cele
- przedstawić generowanie kodu i wykorzystywane podczas generacji kodu struktury danych,
- przedstawić niektóre zagadnienia pojawiajace sie podczas kompilacji programów pisanych w rzadziej używanych językach programowania.
Struktura wykładu
Rozpoczynamy od prezentacji Tablicy Symboli. Ta struktura danych nabiera coraz większego znaczenia w dobie upowszechniania się środowisk wspomagających pracę programistów takich jak Exlipse, JBuilder, etc. W podręcznikach poświęconych kompilacji temat ten przedstawiany jest dośyć pobieżnie. Kompilacja programów napisanych w Javie wymaga jednak dobrego zrozumienia zasad wiązania wystąpień aplikacyjnych identyfikatorów z odpowiednimi wystąpieniami deklacji definiujących znaczenie danego identyfikatora w kontekście jego wystąpienia aplikacyjnego.
Kolejny wykład poświęcony jest zagadnieniu staycznej analizy semantycznej. Niewiele osób zdaje sobie sprawę z tego, że prawdziwą gramatyką języka programowania wcale nie jest gramatyka bezkontekstowa zapisywan zwykle w notacji BNF lub w postaci diagramów. Gramatyki języków programowania są gramatykami kontekstowymi. Trochę szkoda, że nie są one publikowane. Ale nie jest to wcale potrzebne. Właśnie moduł kontroli typów sprawdza czy kod źródłowy jest poprawny i sygnalizuje występowanie ewentualnego błędu kontekstowego.
Jeżeli żadnego błędu nie wykryto można przejść do generowania kodu wynikowego.
Musimy jednak wiedzieć na jaką maszynę będziemy generować kod. Bardzo popularnym rozwiązaniem jest generowanie kodu na pewną maszyne wirtualną. Potem można dokonywą kompilacji na pewną sprzętową platformę np. Intela czy PowerPC.
A więc najpierw musimy poznać maszynę wirtualną. W jaki sposób wygląda kod tej maszyny. Jak powstaja i są przechowywane rekordy aktywacji metod (procedur) i obiekty klas. Tej tematyce są poswięcone kolejne dwa wykłady.
Praca czytelnika/studenta
Dla dobrego opanowania przedstawionego tu materiału nie wystarczy przeczytać moduły składające sie na ten wykład. Wymagane jest aktywne wspóldziałanie. Czytelnik powinien opanować pojęcia jakie wprowadzamy, zrozumieć je i umieć się nimi posługiwać. Należy dobrze zrozumieć algorytmy tu przedstawiane i umieć wybrać właściwy spośród nich kierując sie kryteriami jego przydatności i kosztu jego zastosowania.
Laboratorium
Osobny moduł zawiera materiały niezbędne do przygotowania semestralnego zadania laboratoryjnego. Oczekuje się, że uczestnik tych zajęć samodzielnie przygotuje i uruchomi kompilator dla niedużego jezyka programowania kotek. Kotek jest językiem nieco prostszym niż język Tiger przedstawiony w książce Appela.