2009-08-05 12 views

Odpowiedz

10

Metacircular Evaluator w SICP to ćwiczenie do pisania tłumacza Scheme na Schemacie. To powszechny pierwszy projekt CS roku.

+2

Dla tych, którzy nie wiedzą, SICP to książka (darmowa online) o nazwie Struktura i interpretacja programów komputerowych. –

5

na oryginalnej Wirtha Pascal jest dobrym kandydatem, a często wykorzystywane jako demo w generatorach parsera. Jego gramatyka to LL (1), a poza tym dość surowa, więc łatwo ją przeanalizować. Pod względem funkcji również jest dość ograniczona.

Być może warto jednak trochę nim manipulować - np. możesz zignorować wskaźniki, ale obsługuje łańcuchy pierwszej klasy.

3

Schemat lub dowolny wariant seplenienia.

+4

To jest trochę zwodnicze; podczas gdy składnia z pewnością nie jest trudna do przeanalizowania, funkcjonalność Schematu i innych wariantów LISP może być dość trudna do implementacji w tłumaczu. Lambda i rekursja ogona mają w szczególności wiele pułapek. – Imagist

0

Myślę, że język składni znaczników, Liran. Struktura składni ułatwia przetwarzanie, ponieważ bloki kodu są wyraźnie oznaczone między znacznikami początkowymi i końcowymi. Można teoretycznie łatwo zbudować interpreter poziomu 1, który analizuje i uruchamia kod bezpośrednio.

Powiedział, że nie ma tam żadnych języków znaczników, które robią znaczące rzeczy w kontekście, o którym wydaje mi się, że celujesz (możesz chcieć napisać własne). Następny najlepszy wybór zapewne byłby językiem o minimalnej funkcjonalności, a najlepiej nie wspierającym programowania proceduralnego. Język taki jak BASIC powinien być łatwy do zbudowania dla tłumacza poziomu 1.

Kolejną najlepszą rzeczą być może są wczesne języki skryptowe, które nie oferowały wielu elementów składniowych i były dość krótkie w złożoności. Nie myślę o żadnym.

Ale prawdopodobnie najlepszą opcją jest zaprojektowanie własnego języka. Tłumacz staje się łatwiejszy do zbudowania, ponieważ posiada głęboką znajomość składni języka i może rządzić własną strukturą języka i semantyką w tłumaczu.

...

Nacisk na poziomie 1 tłumacza to dlatego, że nie wspominając chcesz to łatwe.

+0

co oznacza poziom 1? –

1

W mojej klasie systemów operacyjnych dla szkół napisaliśmy interpreter dla Db (D-flat). To było bardzo proste i dobrze zdefiniowane.

+0

Czy możesz podać link do czegoś związanego z tym językiem, nie mogę tego znaleźć ... –

+0

Masz rację. Nie mogłem go znaleźć nigdzie w Internecie, oprócz strony internetowej dla tej klasy. Być może jest to wymyślony język dla naszej klasy. Tak czy inaczej, oto link do formalnej definicji języka: http://users.csc.calpoly.edu/~akeen/courses/csc430/handouts/assignments/hw3.pdf – bkritzer

+0

Być może jest to oparte na systemie opisanym w Dr. Dobbs Journal (ktoś w pobliżu, który wie o DDJ?). W tym artykule (http://www.drdobbs.com/184410754) Al Stevens ogłosił ideę D-Flat, aw kolejnych artykułach opisał jej rozwój. – Kwebble

4

Dalej. Okay, teraz piszę to tylko dlatego, że potrzebuję co najmniej 15 znaków w odpowiedzi, ale najmniejsze implementacje Forth to kilka KB. Trudno wymyślić jakikolwiek inny język, który mógłby mieć tak mały rdzeń. Może oryginalny McCarthy 1958 Lisp, w którym funkcje zostały ręcznie skompilowane.

5

Jest bardzo łatwo napisać interpreter dla języka programowania Forth (gdy wiesz, jak - ale to jest dobrze udokumentowane ). Od ponad 40 lat Forth jest używany w rzeczywistych problemach.

Być może jest to zbyt łatwe, ale wiele się nauczysz.

Wprowadzenie beztroskie (online) w numerze chapter 9 z książki Leo Brodie "Starting FORTH".

+1

Dzięki za link. –

Powiązane problemy