Bir Derleyici Nasıl Yapılır

Başlatan erkan614, 10 Mayıs 2018, 10:16:11

ByTEK

Ben derleyici yazmadım ama script olarak yazılan kodlari parse edip istenilen bir işlemi yaptirdim. Kuralları ben koyduğum icin parseyi ona göre sekillendirmistim. Bu bile beni çok yormuştu. String parse işlemini kendiniz yapacaksanız çok zahmetli. Satır satır analiz etmeniz gerekiyor.

OG

Alıntı yapılan: Firzen - 11 Mayıs 2018, 23:00:26Ben hala kod nasıl C dilinden HEX formata dönüştürülür oradayım :) Yoksa CLANG veya LLVM ile diğer kısımlar rahat bir şekilde çözülüyor. Hatta Tutorial'da Kaleidoskop diye bir örnek program üzerinden gidiyorlar.
C'den direk hex'e dönüştürmeyi değil, C'den asm ye dönüştürmeyi düşünmelisiniz.
asm'yi hex'e çevirmek microchip'e ait MpasmWin.exe ile yapılıyor.
Proton böyle çalışıyor, belki bütün derleyiciler böyledir.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

Firzen

Alıntı yapılan: OG - 12 Mayıs 2018, 08:07:41C'den direk hex'e dönüştürmeyi değil, C'den asm ye dönüştürmeyi düşünmelisiniz.
asm'yi hex'e çevirmek microchip'e ait MpasmWin.exe ile yapılıyor.
Proton böyle çalışıyor, belki bütün derleyiciler böyledir.

Anladım da hocam. MikroC CCSC ve daha bilmediğim bir çok derleyici MPASMWin.exe kullanmadan kendi içinde yapıyor. Evet belki dediğiniz gibi C->ASM->HEX,ELF şeklinde gidiyor olabilir ama orada hala kara kutu olan kısım bence HEX.
Kararsız...

kimlenbu

@Firzen, HEX'e çevirmek aslında yapılacak işler arasında en kolay olanı. asm'ye çevirdikten sonrası sadece ilgili işlemcinin "instruction set" ve "opcode" tablosuna bakarak bunları uygun sırada arka arkaya dizmeye bakıyor.

Bize okulda programı assembly'de yazdırıp elle hex'e çevirtmişlerdi, (kitabın ilgili tablosunun bulunduğu bölümün fotokopilerini vermişlerdi)

Mantığını bildikten sonra yapabilirsin. Hatta derleyici "lst" dosyalarını senin için oluşturur, orada hem assembly kodunu hem de karşılık gelen opcode'u görebilirsin. lst ve hex dosyasına bakarsan geçişin aslında kolay olduğunu görürsün

ByTEK

İsinize yararım bilmiyorum ama jalv2 derleyicisi açık kaynak ve c ile yazılmış. Direkt hex yapabiliyor. Hedefiniz bilgi sahibi olmak ise incelenebilir.

https://www.casadeyork.com/jalv2/archive/jalv24q5src.zip

Firzen

Alıntı yapılan: kimlenbu - 12 Mayıs 2018, 20:53:01@Firzen, HEX'e çevirmek aslında yapılacak işler arasında en kolay olanı. asm'ye çevirdikten sonrası sadece ilgili işlemcinin "instruction set" ve "opcode" tablosuna bakarak bunları uygun sırada arka arkaya dizmeye bakıyor.

Bize okulda programı assembly'de yazdırıp elle hex'e çevirtmişlerdi, (kitabın ilgili tablosunun bulunduğu bölümün fotokopilerini vermişlerdi)

Mantığını bildikten sonra yapabilirsin. Hatta derleyici "lst" dosyalarını senin için oluşturur, orada hem assembly kodunu hem de karşılık gelen opcode'u görebilirsin. lst ve hex dosyasına bakarsan geçişin aslında kolay olduğunu görürsün

Biz okulda hiç ASM görmedik. Valla sağlam bilgi vermişler bizimle paylaşabilir misin acaba o kısmı?
Tam olarak nasıl işliyor bilmiyorum. Ben C yazarım gerisini hep derleyici yapar. ASM bilenler o yüzden genelde benim gibilere laf eder haklı olarak.

Bu konu daha önce açılmıştı bende satın aldığım kitabın PDFsini paylaşayımda en azından konu toparlansın burada :)
Kararsız...

OG

FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

foseydon

Alıntı yapılan: Firzen - 11 Mayıs 2018, 23:00:26Ben hala kod nasıl C dilinden HEX formata dönüştürülür oradayım :) Yoksa CLANG veya LLVM ile diğer kısımlar rahat bir şekilde çözülüyor. Hatta Tutorial'da Kaleidoskop diye bir örnek program üzerinden gidiyorlar.

en altta donanım var, mcu, dsp, cpu vs.her donanımım kendine ait bir komut seti var. bu komutlar donanımın kapasitesine göre çeşitleniyor, misal toplama işlemi bir komut ile hallediliyor, dsp'lerde çarparak "multiply and accumulate" denilen ve çok yapılan bir işlem var bunun için ayrı bir komut var gibi gibi. bu komutlar donanımın içerisinde binary olarak duruyor ve yine donanım içerisinde her komutun üzerinde işlem yaptığı bellek alanları var. hangi komutlar olduğu, bunun nasıl işlem yaptığı işlemcinin ilgili dökümanında yazılı olarak dağıtılır. Misal, OG microchip için vermiş. Ayrıca HEX dosyalasının formatı da ayrıca verilir, yine "microchip hex file format" diye aratırsan microchip'in formatını bulabilirsin. Ben bakmıştım, aklımda çok az şey kaldı, hex dosyasının son 4-5 satırı fuse ayarları için ayrılmıştı misal. yani eline programlamak istediğin donanımın dökümanlarını alsan, oturup binary olarak programlama yapabilirsin bu noktada. ama bu çok kasış bir iş olduğu için önce assembly dilini ve bunun derleyicisini geliştirmişler. assembly'de aslında işlemci komutlarıın yazılı hali gibi düşünebilirsin. misal yukarda toplama işlemi binary olarak tutuluyor demiştik, assembly'de yazan okuyan anlasın diye bunu "add" olarak adlandırmışlar ve yine üzerinde işlem yağtığı elemanları var. misal, add 1,2 yazdığın zaman 1. ve 2. elemanı toplatacak işlem yapmak istediğini söylüyorsun. Makine tabi bundan anlamadığı için çeviri yapılması gerekiyor, assembler dediğimiz derleyici bunu makine diline çeviriyor. zaman içerisinde assembly ile büyük program yazmakta zorlamaya başladığı için C diline geçilmiş. Bu insanlar tarafından daha anlaşılır, zaten dili biliyorsun. Burda da yine assembly'ye benzer şekilde C derleyicisi C kodunu assembly koduna çevirir, daha sonra assembler bu kodu makine diline çevirir. gcc derleyicisi kullanıyorsan, bir argümanı var bütün intermediary dosyaları yazdırır. yani, kodu derlediğin zaman aradaki assembly çevirisinin vs. dosyalarını görebilirsin süreci anlamakta bunun faydası olabilir.

erkan614

Verdiğiniz bilgiler için çok teşekkürler
Hemen hemen anladım sayılır tabiki benim tekbaşıma yapabileceğim hatta yöneteceğim bir iş değil zor zanaat hele 10 senedir tek satır kod yazmadığımı xxüşünürsek
Zaten yapısını anlamak için sormuştum
Tamamen stratejik olmasından doşayı
Aklıma takıldı forumda yazılım ile alakalı bilgili birçok arkadaş varken neden bir grup oluşup derleyici yapmadı
Belki yaptı benim haberim yok
Belkide zaten bedava dağıtılan veya küreklenmiş bazı derleyicilerin varoluşundan dolayı
Ama bir foruma ait bir derleyicinin olması güzel olurdu
Saygılar