mogę dać przegląd, w jaki sposób działa mój tłumacza, może to daje wyobrażenie o ogólnym rzeczy. Mimo że odpowiedź jest dość późna, mam nadzieję, że pomoże to komuś innemu, kto przyszedł do tego wątku i chce mieć ogólny pomysł.
- Dla każdej linii wprowadzonego schematu tworzony jest obiekt Command. Jeśli polecenie jest częściowe, to jego poziom zagnieżdżenia jest przechowywany (liczba pozostałych prawych nawiasów do wypełnienia wyrażenia). Jeśli polecenie jest kompletne, tworzony jest obiekt ekspresji, a ewaluatorzy są wywoływani na tym obiekcie.
- 4 typy klas oceniającego zdefiniowane, co uzyskane z oceniającego klasy bazowej
a) Define_Evaluator: dla określenia sprawozdań
b) Funcall_Evaluator: przetwarzania inne funkcje zdefiniowane przez użytkownika
c) Read_Evaluator: do odczytu wyrażenia i zamiany go na obiekt schematu
d) Print_Evaluator: drukuje obiekt w zależności od typu obiektu.
e) Eval_Evaluator: czy faktyczne przetwarzanie wyrażenia.
3 .-> Najpierw każde wyrażenie jest odczytywane za pomocą Read Evaluator, które utworzy obiekt schematu poza wyrażeniem. Zagnieżdżone wyrażenia są obliczane rekurencyjnie do momentu zakończenia wyrażenia.
-> Następnie wywoływany jest Eval_Evaluator, który przetwarza Obiekt Wyrażania Schematu utworzony w pierwszym kroku. tak dzieje się jako
a) jeśli wyrażeniem podlegającym ocenie jest symbol. Zwróć jego wartość. W związku z tym zmienna blk zwróci obiekt dla tego bloku.
b) jeśli wyrażeniem podlegającym ocenie jest lista. Wydrukuj listę.
c) jeśli wyrażeniem podlegającym ocenie jest funkcja. Poszukaj definicji funkcji, która zwróci ocenę za pomocą funkcji Funcall_Evaluator.
-> Na koniec, ewaluator druku zostaje zwolniony, aby wydrukować wynik, ten wydruk będzie zależał od typu wyraŜenia wyjściowego.
Zastrzeżenie: To jest jak moja interpreter działa, robi muszą być w ten sposób.
Po przeczytaniu SICP, wydaje mi się, że lepiej wykorzystasz pisanie swojego interpretera w Scheme (lub innym dialekcie Lispa - lubię Clojure) i wykonasz niektóre ćwiczenia, niż poza pisaniem interpretera in C. – mwd
Jak daleko jesteś w SICP? W trakcie czytania rozdziałów 4 i 5 napiszesz interpreter Scheme (właściwie więcej niż jeden) i kompilator. Jeśli skończysz książkę, znajdziesz to, czego szukasz: interpreter metakryli (Scheme in Scheme) jest pięknie krótki. – spacemanaki