Kompilator - Jak to zrobić

0

Witam !!!

Już od dłuższego czasu zajmuję się tym zagadnieniem Kompilator - Jak to zrobić. Wiem co to Parser, Linker itp. Chodzi o to że chcĘ napisać własny język programowania. Tak naprawde mam już prawie cały zrobiony ale brakuje kompilatora. Jak zrobic żeby tworzył plik wykonawczy? itp. ???

0

fopen(), fwirte(), fclose().

Masz jakis konkretny problem? Format pliku PE znajdziesz na google, format opcodow do x86 w manualach Intela, format syscalli Windowsa pewnie na MSDNie. Powodzenia <bardzo ironiczny="ironiczny" glos="glos">.

0

Dzięki ale nie moge tego znaleźdź możesz mnie bardziej naprowadzić
:-)

ort!

Chodzi o 32 bitowy

0

http://www.google.pl/search?q=pe+file+specification o_O

Co wlasciwie masz zrobione skoro brakuje ci kompilatora? :D

0
Wolverine napisał(a)

fopen(), fwirte(), fclose().

Masz jakis konkretny problem? Format pliku PE znajdziesz na google, format opcodow do x86 w manualach Intela, format syscalli Windowsa pewnie na MSDNie. Powodzenia <bardzo ironiczny="ironiczny" glos="glos">.

LesioGames napisał(a)

Chodzi o 32 bitowy

[rotfl]

LesioGames napisał(a)

Wiem co to Parser, Linker itp. Chodzi o to że chcę napisać własny język programowania. Tak naprawde mam już prawie cały zrobiony ale brakuje kompilatora. Jak zrobic żeby tworzył plik wykonawczy? itp. ???
lol, 'prawie' cały :D. Nie wiem czy wiesz ale kompilator to 'prawie cały' język. Opracowanie gramatyki nie jest problemem, napisanie kompilatora /w szczególności języka kontekstowego/ już tak. Kompilator z założenia nie tworzy 'plików wykonawczych'. Proponuję zapoznanie się z formatami COFF/MS COFF i użycie standardowego linkera masm'a /ogólnie VS - link/ lub gcc\MinGW /ld/. Te dwie wersje formatu różnią się głównie formatem relokacji. Inna sprawa, że języka programowania się nie pisze - gramatykę się opracowuje i implementuje w narzędziach. Z pisaniem kompilatora to może poczekaj jeszcze kilka lat, sam sobie odpowiedz czy jesteś chociaż w stanie napisać algo budowy drzewa wyrażeń dla chociażby najprostszego języka.
Opisów formatu COFF jest w teletubisia i troche... Z manuali Intel'a to tak - 2A i 2B to dokładny opis instrukcji + mapy opkodów, z 1 i 3 przynajmniej należy przerobić tryb chroniony, wyjątki, debugging... no, informacje dla twórców systemów operacyjnych i kompilatorów oczywiście też. Jak już kompilator będzie w stanie wygenerować chociaż działający kod to następną lekturą będzie ostatni z manuali - nt. optymalizacji.
A poważnie to dowiedz się co to Flex i Bison, poczytaj legendarną 'knigę ze smokiem' /jeżeli faktycznie wiesz coś o pisaniu kompilatorów to doskonale wiesz o jaką książkę chodzi, jest tylko jedna taka :>... omg, pdf mi się stracił przy ostatnim padnięciu HDD :/ /. Poprzeglądaj kompilatory open-source, zrób najpierw własną zabawkę w oparciu o gcc jeżeli chcesz iść na łątwiznę.

@Wolverine, syscall'e na Win są zależnie od wesji - z każdym SP zmianiają się numery funkcji więc użycie native api w ten sposób będzie przypominało bindowanie. Hm... ale to taki zły pomysł nie jest :> Problemem pozostaje ustalenie numerów funkcji, patch kodu to przecież nie problem... tylko czy jest sens?

@LesioGames, powodzenia w pisaniu kompilatora... jeżeli faktycznie tego chcesz i jesteśw stanie podołać :-)

p.s. ech Wolverine mnie uprzedził nieco :-)

0

Brakuje mi Linkera. Mam reszte

0

Jeżeli chcesz stworzyć kompiltor języka który będzie 'tłumaczył' na kod maszynowy danego języka to czeka cie wiele pracy(dokumentacja różnych procesorów AMD znajdziesz tu http://developer.amd.com/). Możesz jednak pójść w inną strone i kompilować do pseudo kodu np, Java Byte Code lub CLI z .Net'a - jeżeli tak to polecam zapoznać się z http://www.gnu.org/software/dotgnu/.

Jeżeli chodzi o pliki PE to (dotgnu chyba ma jakiś kod) proponuje zacząć od tego http://en.wikipedia.org/wiki/Portable_Executable

STDCALL - http://www.programmersheaven.com/2/Calling-conventions#stdcall

więcej informacja na google

Pozdrawiam

0
LesioGames napisał(a)

Tak naprawde mam już prawie cały zrobiony ale brakuje kompilatora.

LesioGames napisał(a)

Brakuje mi Linkera. Mam reszte

[rotfl] LOOL!?

0

A ja proponuje wirtualną maszyne napeno prostrze niż pisanie togo co chcesz a nieumiesz ;-P
ale pokręciłem ;]

0

Kurde, moze zacznij od dzialajacego interpretera?

0

Jeżeli komuś to pomoże:

http://www.turbopascal.friko.pl/page1.html

Jest to kurs pisania kompilatorów w TP.

0

Nie trzeba czytać dokumentacji formatu PE ani opcode'ów procesora.
Co trzeba umieć to asemblera: generować plik .asm, po czym uruchomić asemblera (nasm, gas, whatever...) i linkera (na przykład ld).

Albo jeszcze ciekawiej, generować kod MSIL i kompilować go do .exe załączonym do .Net Frameworka programem ilasm.exe.
W tym ostatnim przypadku możemy mieć z własnego języka dostęp do wszystkiego co daje .Net.

Skoro chcesz napisać kompilator, to pisz sam kompilator, a nie od razu asemblera i linkera, bo to za dużo wiedzy na raz.

1 użytkowników online, w tym zalogowanych: 0, gości: 1