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?
Odpowiedz
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ć.
heh Scheme i C++ są daleko od siebie – Earlz
Wow, to wygląda na naprawdę dobrą książkę. +1 dla linku –
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
Spójrz na parser LL "LOC" biblioteki boost.
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:
- 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.
- 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łujeExec()
na swoich elementach podrzędnych itp.). Zasadniczo jest to metoda, z której korzystam w przypadku mojego interpretowanego języka specyficznego dla domeny Phonix.
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.
- 1. Scala - proces tworzenia aplikacji oparty na konsolach
- 2. Jaki jest najlepszy sposób tworzenia wewnętrznych produktów?
- 3. Jaki jest najlepszy sposób tworzenia wdrożeń ClickOnce
- 4. Jaki jest najlepszy sposób tworzenia wyszukiwania whois?
- 5. Jaki jest koszt tworzenia aktorów w Akce?
- 6. Serwer SQL: ustawienie języka podczas tworzenia widoku
- 7. Jaki jest najlepszy sposób tworzenia interaktywnych prototypów aplikacji?
- 8. Stan tworzenia stron internetowych przy użyciu języka programowania funkcjonalnego
- 9. Jaki jest twój ulubiony proces wdrażania aplikacji WWW z SVN?
- 10. Jaki jest dokładny proces kompilacji aplikacji ios w XCode?
- 11. Jaki jest preferowany proces sprzedaży osobistego projektu/produktu?
- 12. ANTLR Jaki jest najprostszy sposób realizacji języka Pythona?
- 13. Jaki jest dominujący styl nawiązywania połączeń z funkcjami języka Ruby?
- 14. W przetwarzaniu języka naturalnego, jaki jest cel porcjowania?
- 15. Jaki jest najlepszy sposób uzyskania ostatniego wstawionego identyfikatora przy użyciu języka sqlite z języka Java?
- 16. Czy używanie języka Java jest odpowiednim językiem/platformą do tworzenia aplikacji księgowej opartej na interfejsie graficznym?
- 17. Jaki jest plan tworzenia kopii zapasowych/konserwacji serwera SQL?
- 18. Jaki jest algorytm tworzenia kolorów dla mapy termicznej?
- 19. Jaki jest najbardziej skuteczny sposób tworzenia dodatkowych wątków z wątku?
- 20. Jaki jest najskuteczniejszy sposób tworzenia słownika słupków Dfr.
- 21. Jaki jest najlepszy sposób tworzenia zmiennych globalnych w CakePHP?
- 22. Jaki jest najlepszy sposób tworzenia prostych funkcji filtru w javascript?
- 23. Jaki jest najlepszy sposób tworzenia i usuwania DbContext w MVC?
- 24. Jaki jest poprawny sposób tworzenia tablicy asocjacyjnej w VB.NET?
- 25. jaki jest najlepszy język programowania do tworzenia analizatorów i kompilatorów?
- 26. Jaki jest najlepszy sposób tworzenia aliasu do atrybutów w Ruby?
- 27. Jaki jest najlepszy sposób tworzenia struktur wiadomości w Javie?
- 28. Jaki jest najskuteczniejszy sposób tworzenia instancji BigInteger z wartości int?
- 29. Jaki jest stan tworzenia aplikacji na iOS w systemie Linux?
- 30. Jak przyspieszyć proces tworzenia Gradle w Android Studio
Ten jest nieco zbyt specyficzny dla LISP-a. –
@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. –
Powiązane: http://stackoverflow.com/questions/1669/learning-to-write-a-compiler –