2011-09-23 16 views
7

Przeczytam książkę Structure and Interpretation of Computer Programs i chciałbym kodować interpreter schematu stopniowo.Chcę zaimplementować interpreter schematu do nauki SICP

Czy wiesz, że wdrożenie programu jest najłatwiejsze do odczytania (i krótkie)? uczynię JavaScript w C.

+1

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

+2

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

Odpowiedz

4

Książka Christiana Queinneca Lisp In Small Pieces jest znakomita. Bardziej nowoczesny niż EoPL. Obejmuje Lisp i Scheme, a także szczegółowo omawia krwawe elementy niskiego poziomu, których większość książek omija.

+0

Nie nadaje się również dla początkujących. – leppie

1

Polecam lekturę dysertacji Kenta Dybviga "Three Implementation Models for Scheme". Nie cała rozprawa, ale pierwsza część (do trzeciego rozdziału), w której omawia Model oparty na sterty, jest bardzo odpowiednia do naiwnej realizacji Planu.

Kolejny wielki zasób (jeśli dobrze go zrozumiałem i chcesz go zaimplementować w C) to Nils Holm's "Scheme 9 from Empty Space". Ten link jest do strony Nilsa, a na dole znajduje się link do starej, publicznej domeny, wydania książki i do nowszej, łatwiejszej do przeczytania, dostępnej w sprzedaży wersji. Czytajcie i kochajcie ich.

0

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

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

0

Byłem na podobnej misji, ale kilka lat później, zalecenia: Schemat

Wciąż szukam dobrych blogów na temat tworzenia maszyny wirtualnej Lpp/programu, która mogłaby być połączona z JIT (ważne dla każdej konkurencyjnej implementacji JS :).