1 / 15

WAM

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.

illias
Download Presentation

WAM

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. WAM Warren Abstract Machine Maria Kowalska, Leonard Żuchowski

  2. 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.

  3. 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

  4. WMA-budowa

  5. 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

  6. 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

  7. Kopiec-budowa

  8. 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.

  9. Top-down leftmost Rezolution /* Z góry na dół, od lewej do prawej */

  10. 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

  11. 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

  12. 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

  13. Przykładowa kompilacja

  14. 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

  15. 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

More Related