WAM Warren Abstract Machine Maria Kowalska Leonard uchowski
WAM Warren Abstract Machine Maria Kowalska, Leonard Żuchowski
WSTĘP • Term-zmienne, stałe, struktury f(t 1, . . , 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
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 X 1. . . 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
Kopiec-budowa
Unifikacja • Unifikujemy regułę p(s 1, . . , sn) z zapytaniem g(t 1, . . , 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_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
Przykładowa kompilacja
Kompilacja do instrukcji WAM • • • get_variable: pobranie zmiennej z kopca get_structure: pobranie struktury z kopca [podtermu postaci f(p 1, …, 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
- Slides: 15