2010-05-27 12 views
5

Chcę stworzyć bardzo prosty eksperymentalny język programowania. Jakie zasoby mogę sprawdzić, aby uzyskać przegląd procesu tworzenia języka interpretowanego. Będę używał C++ do budowania i kompilowania interpretera.Jaki jest proces tworzenia języka interpretowanego?

+1

Ten jest nieco zbyt specyficzny dla LISP-a. –

+1

@Neil: podczas gdy podobny, to tak naprawdę nie jest duplikatem - pyta o interpreter Lispa, a odpowiedzi są w większości wyłączne również dla Lispa. Podczas gdy język OP * może * być wystarczający jak Lisp dla tych, którzy mają zastosowanie, nie ma pewności. –

+0

Powiązane: http://stackoverflow.com/questions/1669/learning-to-write-a-compiler –

Odpowiedz

4

Musisz zaimplementować zarówno analizator składni, jak i tłumacza.

Istnieje świetna bezpłatna książka o nazwie "Języki programowania: zastosowanie i interpretacja", która używa schematu do budowania coraz bardziej złożonych tłumaczy. Służy także jako doskonałe wprowadzenie do funkcji języka programowania.

Sprawdź to tutaj: http://www.cs.brown.edu/~sk/Publications/Books/ProgLangs/

Jeśli schemat nie jest twój filiżanka herbaty może warto przeanalizować.

+2

heh Scheme i C++ są daleko od siebie – Earlz

+0

Wow, to wygląda na naprawdę dobrą książkę. +1 dla linku –

+0

Zrozumieć C++ i schemat są daleko od siebie w spektrum języków, ale podejście, które ta książka bierze ze Schematem, może sprawić, że osoba pytająca dowie się więcej o podstawowych zasadach projektowania języka. – Ben

0

Spójrz na parser LL "LOC" biblioteki boost.

2

kilku krokach:

pierwsze, budują lexer i analizatora składni. Jest to naprawdę łatwe do zrobienia przy użyciu popularnych narzędzi, takich jak lex i yacc, lub przy użyciu bardziej nowoczesnego środowiska, takiego jak Antlr (co jest polecane). Narzędzia te wygenerują kod źródłowy dla języka docelowego, który następnie można skompilować i dołączyć do projektu.

Lexer i analizator składni zbudują wewnętrzną reprezentację pliku źródłowego. Istnieje kilka różnych sposobów podejścia do tej:

  1. W modelu kodu bajtowego, plik źródłowy jest kompilowany do języka wewnętrznego niskiego poziomu, na którym można napisać interpreter kodu bajtowego które bezpośrednio wykonuje operacje . W ten sposób działają na przykład języki Perl i .NET.
  2. W modelu obiektowym plik źródłowy jest kompilowany do drzewa obiektów, w którym każdy obiekt wie, jak wykonać samodzielnie. Po zakończeniu przetwarzania wystarczy wywołać Exec() na obiekcie głównym (który z kolei wywołuje Exec() na swoich elementach podrzędnych itp.). Zasadniczo jest to metoda, z której korzystam w przypadku mojego interpretowanego języka specyficznego dla domeny Phonix.
0

Aby utworzyć interpretowany język, trzeba utworzyć dwie rzeczy:

  • Formalna definicja gramatyki języku za
  • parsera które można odczytać i zinterpretować język

Po zdefiniowaniu samego języka dostępnych jest kilka narzędzi pomocnych w tworzeniu parsera językowego. Klasyczne narzędzia to: lex i yacc oraz ich wersje open-source: flex i bison.

Powiązane problemy