Skompiluj sam język programowania


10

Jestem studentem informatyki. Chcę stworzyć własny język programowania (podstawowy język z kilkoma instrukcjami).

Wiem, jak zrobić analizator składniowy, już to zrobiłem w Perlu. W artykule przeczytałem coś o kompilatorze, kompilator jest zrobiony sam w sobie.

Na przykład kompilator C jest napisany w C. Jak to możliwe? Mogę stworzyć własny język, ale nie wiem, jak go wykonać? Dowolny pomysł?

To naprawdę dobre pytanie i mogę napisać blog projektu.


Ludzie wyjaśnili, jak rozpocząć ładowanie, ale dlaczego musisz? Nie ma powodu, dla którego nie możesz skompilować swojego języka za pomocą kompilatora napisanego w C, Perl lub cokolwiek innego. Pewnie, byłoby miło mieć kompilator dla twojego języka napisany sam w sobie, ale byłoby to dużo pracy - musiałbyś napisać co najmniej dwa kompilatory, aby to uzyskać (jeden w C / Perl / cokolwiek, jeden w Twój język).
David Richerby

Hmm .. Myślę, że napiszę mój pierwszy kompilator w C i napiszę seconde w moim języku. Naprawdę interesujące jest stworzenie małego języka programowania, możemy nauczyć się dużo informatyki
BaptisteL,

Odpowiedzi:


13

Sztuką jest ładowanie . Najpierw piszesz kompilator dla swojego języka (lub jego podzestawu) w innym języku. Następnie piszesz kompilator dla swojego języka (lub dużego podzbioru tego, który już możesz obsługiwać) w swoim języku. Używasz poprzedniego kompilatora do kompilacji nowego kompilatora, a następnie nowy kompilator może się skompilować.


Więc mogę utworzyć mój pierwszy kompilator za pomocą C, a następnym razem skompiluję mój kompilator v2 z v1? Ale jest problem, skąd mam wiedzieć, że kompilator nie ma problemu? Czy muszę przekonwertować kod źródłowy na asembler? Czy w innej sprawie?
BaptisteL,

2
Skąd mam wiedzieć, że kompilator nie ma żadnych problemów? Mówiąc bardziej ogólnie, napisałeś program; skąd wiesz, że nie ma błędów? Ty nie. Piszecie testy i mam nadzieję na najlepsze. Czy muszę przekonwertować kod źródłowy na zestaw? Absolutnie nie. Możesz zaufać kompilatorowi C. Robisz to samo, ale z zestawem zamienionym na C (lub innym wybranym przez Ciebie językiem).
Yuval Filmus,

Okej, muszę ufać swoim umiejętnościom ^^ Chciałem zapytać proces kompilatora. Naprawdę nie rozumiem, co robi kompilator, analizator składniowy i leksykalny w porządku, ale następny?
BaptisteL,

Następnie generujesz kod. Jeśli nie chcesz wchodzić w szczegóły generowania kodu maszynowego, zawsze możesz wygenerować kod w innym języku, powiedzmy kod C, i użyć zewnętrznego kompilatora, aby skompilować go do kodu maszynowego. (Lub możesz użyć tłumaczonego języka i uruchomić tłumacza.)
Yuval Filmus

Hummm Nie Wolę robić to w ten sposób: Mój język w enter -> Kod maszynowy. Nie chcę konwertować swojego języka na inny (taki sam przy pierwszej kompilacji) Czy to możliwe?
BaptisteL

2

Kompilator, który może kompilować własne źródła, nazywa się kompilatorem samonośnym . Wczesne kompilatory zostały napisane w innym języku. Na przykład pierwszy kompilator C został prawdopodobnie napisany w asemblerze. Cała sztuczka związana z używaniem wcześniejszego kompilatora niższego poziomu nazywa się ładowaniem początkowym.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.