150 likes | 350 Views
WAM. Warren Abstract Machine. Maria Kowalska, Leonard Żuchowski. WSTĘP. Term -zmienne, stałe, struktury f(t 1 ,..,t n ) M=<D,I>- abstrakcyjna maszyna dla języka prolog.
E N D
WAM Warren Abstract Machine Maria Kowalska, Leonard Żuchowski
WSTĘP • Term-zmienne, stałe, struktury f(t1,..,tn) • M=<D,I>-abstrakcyjna maszyna dla języka prolog. • IDEA – dla zdefiniowanego termu p w programie oraz zapytania ?-q, wykonanie dla p nie unifikującego się z q zawodzi, wpp. Wykonanie kończy się powodzeniem.
WSTĘP WMA zakłada trzy zasady zwane też sztandarowym modelem wykonania. Leżą one u podstaw każdej implementacji Prologa • Prolog daje się łatwo przetłumaczyć na polecenia WMA • Implementacja WMA jest efektywna na prawdziwej maszynie • Optymalizacja łatwa jest do integracji
WMA-budowa • STORE -pamięć z indeksowanym dostępem • CODE-załadowany program • HEAP-reprezentacja termów • STACK- przechowalnia Environments (środowisko)i Choice Point(punkt wyboru) • TRAIL zaznaczenie wiązania zmiennych • PDL- Push Down List do unifikacji • Register- rejestry X1...Xn do przekazania argumentów i tymczasowego przechowania dla części podtermów
Kopiec • CEL-reprezentacja termów w WMA. • STRUKTURA –tablice komórek z danymi • BUDOWA KOMÓRKI-<etykieta,k> -etykieta np..:REF, STR -k –adres przechowania • Instrukcje WMA: put_structure, set_variable, set_value
Unifikacja • Unifikujemy regułę p(s1,..,sn) z zapytaniem g(t1,..,tm). Kiedy p=g a n=m , to wystarczy si z ti (1,..n) unifikować. • W WMA najpierw są podtermy zapytania umieszczane w kopcu • WMA instrukcje: get_structure, get_variable, get_value, unify_value, unify_variable • Nowe termy w czasie unifikacji kładziemy na szczyt kopca.
Top-down leftmost Rezolution /* Z góry na dół, od lewej do prawej */
Backtracking • Pewne ścieżki rezolucji zwracają FAIL • W takim przypadku zmiany w środowisku maszyny jakie zaszły podczas wykonania procedury muszą zostać odwrócone • Stan sprzed wykonania procedury wskazuje choice point • Choice Point: • Aktualne środowisko (rejestr E) • Ostatni choice point (rejestr B) • Rejestr H : szczyt kopca • Zawartość rejestrów • Rejestr TR: adres kopca TRAIL do którego mają być zresetowane zmienne przy powrocie do choice pointu • Rejestr CP: adres następnej instrukcji do wywołania po pomyślnym powrocie z wywołania instrukcji
Backtracking • Dla każdego wywołania instrukcji tworzone jest środowisko jej wykonania (stan przed wywołaniem) : environment frame • Ramki environment wraz z choice point’ami umieszczane są na stosie STACK • allocate : alokacja środowiska dla reguły • deallocate : usunięcie ramki
Backtracking • Wywołanie a i stworzenie dla niego środowiska • Wywołanie b + ramka dla b • Wywołanie e + ramka dla e + choice point dla e • Wywołanie f, przypisanie zmiennej X wartości 2 • Wywołanie c + FAIL • Cofnięcie z wywołania f • Wywołanie następnej reguły dla choice point e • Pomyślne wykonanie reguły c
Kompilacja do instrukcji WAM • get_variable: pobranie zmiennej z kopca • get_structure: pobranie struktury z kopca [podtermu postaci f(p1,…,pn)] • put_value: dodanie do kopca wcześniej napotkanej zmiennej • put_structure: dodanie struktury do kopca • proceed: wskaźnik końca sekwencji aktualnej instrukcji i rozp. nast.: • P := CP • try_me_else L: alokacja choice pointu na stosie i ustawienie rejestru „następna klauzula do wykonania” na adres L
Kompilacja do instrukcji WAM • retry_me_else L: po powrocie do choice pointu zresetowanie odpowiednich informacji i ustawienie pola „nast. kl. do. wyk.” na L • trust_me L: po powrocie do choice pointu zresetownie odpowiednich informacji w nim zawartych i ustawienie pola B na choice point poprzedni. • call p/n: ustawienie P na @(p/n), CP na adres następnej instrukcji do wykonania