W końcu zacząłem rozumieć złożoność tworzenia interpretera i kompilatora. Zbudowałem kilka wersji TinyBasic, 1964 (Dartmouth) Basic, i moje własne rozszerzenia na te języki, zanim przejdę do tego punktu. Najnowszy projekt nazywam Open Source Basic ... ponieważ nie mogłem wymyślić żadnych innych cech języka, które zainteresowałyby ludzi. Aby móc otworzyć źródło języka i zrozumieć, jak wykonywane są niektóre skomplikowane rzeczy (w jaki sposób wykonuje się skanowanie, analizę, interpretację i kompilację)
Open Source Basic jest najpierw tłumaczony na język oparty na stosie. Ten język oparty na stosie jest następnie interpretowany i wykonywany natychmiast lub zamieniany w plik wykonywalny CLR.
Moje pytania sprowadzają się do tego:
- Jakie są podstawowe cechy / konstrukcje języka opartego na języku podstawowym? Mam już te podstawowe konstrukcje: Przydziały, Wyrażenia, Zmienne, niektóre funkcje (Losowe, ToUpper, ToLower), Pętle (dla i do-while / till), If (blok i jednowierszowe) Inne decyzje, dane wejściowe na konsoli (dane wejściowe ) i danych wyjściowych (Drukuj) oraz podprogramów (jeszcze bez parametrów).
- Kiedy „skończę” dodawanie podstawowych konstrukcji do mojego języka - jak mam się rozwijać? W jakich domenach? Innymi słowy, w jakim kierunku powinien podążać mój podstawowy język open source po uruchomieniu wszystkich ogólnych konstruktów?
Dziękuję za Twój czas,
Dominick
źródło
Odpowiedzi:
Moje doświadczenia z wczesnym BASICem na Commodore [Vic-20, C-64] dały mi wrażenie, że numery linii były podstawową „cechą” BASIC. Wygląda na to, że nie są już używane w nowoczesnych implementacjach, co jest dla mnie trochę szkodliwe, ponieważ moim podstawowym poglądem na BASIC jest język uczenia się, z którego można przejść do czegoś innego.
źródło
Zdecydowanie szlachetne przedsięwzięcie, ale myślę, że odwróciłeś swoje priorytety.
Pierwszą troską powinny być problemy z „domeną”, którymi powinien zająć się Twój język. Dlatego nazywa się go „językiem specyficznym dla domeny”. DSL jest tolerowany tylko wtedy, gdy jest mały, prosty i bardzo wąsko skoncentrowany, aby rozwiązać określony zestaw problemów, takich jak nóż przez masło.
Po zidentyfikowaniu domeny i sposobie działania języka w domenie możesz określić konkretne konstrukcje lub funkcje.
Wreszcie pomocne może być rozważenie, czy chcesz mieć DSL wewnętrzny czy zewnętrzny .
źródło
Opracowuję język skryptowy dla aplikacji CAE / FEA, a niektóre funkcje, które uznałem za przydatne dla użytkowników końcowych, to: Zmienne lokalne i globalne Matryce z dynamicznym przydzielaniem i rozszerzaniem Funkcje z argumentami i przekazywaniem referencji Struktury (typy zdefiniowane przez użytkownika) Wraz z funkcje, o których wspomniałeś, powinny na początek stanowić dość mocny język. Następnie będziesz rozwijać zgodnie z życzeniem użytkownika.
źródło
Istnieje kilka funkcji, które można dodać lub rozszerzyć, jeśli już istnieją, ale ...
... Podstawowe języki programowania są bardzo podobne do języków skryptowych, a funkcją, której wielu później brakowało lub które zawierało, była przestrzeń nazw lub moduły.
C, C ++, PHP, Visual Basic, uruchomiono bez modułów / przestrzeni nazw i gdzie dodano później.
Następne mogą być podprogramy (procedury lub funkcje, które nie zwracają wartości) oraz funkcje (podprogramy, które zwracają specjalną wartość).
źródło
Na stronie stosu przepełnienia stosu znajduje się ładne pytanie dotyczące zasobów pozwalających zrozumieć kompilatory. Możesz także zajrzeć na stronę mojej klasy Kompilatory .
Biorąc pod uwagę funkcje, które już zbudowałeś, sugeruję dodanie trzech typów danych: int, string, boolean. Musisz zrobić trzy rzeczy, każda nieco trudniejsza niż wcześniej:
Jeśli wszystko pójdzie dobrze, sugeruję pracę nad zasięgiem (lokalnie w podprogramach vs. globalnie). Daj mi znać, jeśli potrzebujesz porady na ten temat.
Powodzenia. I baw się dobrze!
źródło