Witam chciałbym napisać kompilator do własnego procesora zbudowanego w jednej grze. Czy zna ktoś jakiś poradnik jak coś takiego napisać? Może być w dowolnym języku:)
Cześć, Twoje pytanie jest zbyt szerokie aby na nie odpowiedzieć na nie w 1 zdaniu W zależności od złożoności procesora, jego wydajności, języka jaki chcesz kompilować, i docelowej wydajności kodu maszynowego, temat może się okazać bardzo prosty (ctrl+c/v) lub bardzo skomplikowany (miesiące jak nie lata pracy)
Proponuję zacząć od zrozumienia ogólnej zasady jak działają / i co dokładnie robią kompilatory (poczynając od głupiej wiki https://pl.wikipedia.org/wiki/Kompilator#Przebieg_kompilacji), kolejnym etapem było by zrozumieć co się dzieje w poszczególnych krokach kompilacyjnych, wtedy przy odrobinie czasu będziesz mógł namalować coś na kolanie, na wiki jest trywialny przykład :}
W takim razie polecam zrobić tak:
Gdzieś na boku - np w zeszycie (poważnie) wymyśl najprostszą składnie "języka" jaki będziesz kompilować, lub weź jakiś stary turbo prosty język np basic
Następnie napisz kilka instrukcji w języku np:
Code: vbnet
Log in, to see the code
Code: vbnet
Log in, to see the code
Mając podstawowe instrukcje zastanów się jak powinien wyglądać odpowiadający im kod maszynowy (instrukcje procesora)
Wtedy będziesz miał "wejście" jako Twój przykładowy kod i "wyjście" jako Twój kod maszynowy.
Napisz w dowolnym języku programowania testy jednostkowe sprawdzające twoją "funkcje kompilującą" (tak nie mając jej jeszcze) czy podając "wejście" otrzymasz "wyjście" - nic trudnego dowolny tutek jak pisać testy jednostkowe w języku XYZ, wejście i wyjście możesz traktować jako głupie stringi na początku
Na tym etapie wkraczasz powoli na podwórko elit programistów bo właśnie zaczynasz pisać własny kompilator wykorzystując techniki TDD (test driven development)
Teraz mając kilka testów zacznij pisać "funkcję kompilującą" chociażby miała mieć 1000 lini i 500 if'ów dopóki wszystkie testy zapalą się na zielono - będzie ok
Jak będziesz chciał dodawać nowe funkcje kompilatora w postaci nowej składni - po prostu najpierw napisz dodatkowy test, zawsze upewniaj się po zmianach że wszystkie testy są zielone
Jak będzie wszystko działać, a przynajmniej "cokolwiek", i będziesz "czuć" że funkcja kompilująca staje się skomplikowana, będziesz mógł się zastanowić na wyczyszczeniem kodu (refaktoryzacją), optymalizacją i innymi drobnostkami
Ciężko powiedzieć jeśli to ma być proof of concept to od kilku h do kilku dni, nie liczę czasu "straconego" na naukę programowania :}
Miej tylko na uwadze że złożoność funkcji "kompilującej" może szybko rosnąć - w zależności od wspieranej składni języka do operacji procesora.
Jeśli myślisz o pełnym kompilatorze z sensownego języka do sensownego procesora z optymalizacją kodu .. to już never ending story
wieki, a bardziej konkretnie, to nie skończysz tego.
Brałem się za "naiwne" napisanie kompilatora, całkiem sprawny w programowaniu student, jak nie miałem podstaw teoretycznych (i za mało znałem języków, btw użyłem najmniej przydatnego do tego Fortana) , po pół roku prób i błędów jedno wielkie nic.
Rok później , jak liznąłem pierwsze zajęcia z translatorów (semestr ciągle trwał) napisałem z sukcesem w 2 tygodnie, potem rozbudowałem o platformę wizualną, bajery, debugger itd.
jest to rodzaj projektu, który jest uwarunkowany podstawami teoretycznymi, przynajmniej bazowymi.
Są książki o translatorach itd (nie licz na "filmiki na YT") - jak się chcesz w to angażować, nie ominiesz edukacji
PS. a minecraft to nie ma języka Lua ?
O grach nie wiem nic, mogą dla mnie nie istnieć, ale Lua to fajny język w swojej klasie. Może tam się zaangażuj?
Chodzi tu o to że ja w Minecraftcie zbudowałem processor, ma on tylko kilka instrukcji więc nie zajmie myślę mi to zbyt długo. A Minecraft jest napisany w Javie.