Picproje Elektronik Sitesi

DERLEYİCİLER => Diğer Derleyiciler => Konuyu başlatan: erkan614 - 10 Mayıs 2018, 10:16:11

Başlık: Bir Derleyici Nasıl Yapılır
Gönderen: erkan614 - 10 Mayıs 2018, 10:16:11
İyi günler
Merak ettim Bir derleyici nasıl yapılır?
Mesela C ile çalışan bir derleyici?
Başlık: Ynt: Bir Derleyici Nasıl Yapılır
Gönderen: Firzen - 10 Mayıs 2018, 15:33:29
forumda araştır bende çok sordum. Sonra bir kitap satın almıştım sanırım burada da paylaştım.
Başlık: Ynt: Bir Derleyici Nasıl Yapılır
Gönderen: boreas - 10 Mayıs 2018, 15:39:15
Tam olarak ihtiyaç nedir ? Derleyici yapımındaki syntax işleme bile başlıbaşına programlama konusu
Başlık: Ynt: Bir Derleyici Nasıl Yapılır
Gönderen: kimlenbu - 10 Mayıs 2018, 15:56:51
Hangi ortam için derleme yapacaksın ? İlk önce bunu belirlemen gerekecek. "Basit" olsun diye 8051'i ele alalım.

Önce C-> Assembly dönüşümünü yaparsın, arkasından da assembly opcode dönüşümünü yaparsın. Bunları yapmak için hedef mimariyi yalayıp yutmuş olman gerekiyor. Bu oldukça yüzeysel bir anlatım oldu. Ara adımları yapmak için dünyanın emeğinin verilmesi gerekiyor.

Ayrıca optimizasyon özelliği, debug özelliği derken ekip çalışması olmadığı sürece işler içinden çıkılmaz hal alır.
Başlık: Ynt: Bir Derleyici Nasıl Yapılır
Gönderen: sayangku - 10 Mayıs 2018, 16:40:17
hocam programın windows ortamında çalışmasını istiyorsan eger anahtar kelimen bu mingw birde aşağıdaki linki oku birde  codeblock ve GNU GCC  bir araştır fikir versin sana.
https://kaanhas.wordpress.com/2014/09/09/windows-icin-mingw-kurulumu/
Başlık: Ynt: Bir Derleyici Nasıl Yapılır
Gönderen: sayangku - 10 Mayıs 2018, 16:56:44
https://emrecogalan.com/c-cpp-derlemek/
Başlık: Ynt: Bir Derleyici Nasıl Yapılır
Gönderen: boreas - 10 Mayıs 2018, 17:11:41
Anladığım kadarıyla c derlemek ya da derleyiciyi derlemek istemiyor. Derleyicinin kendini yapmak istiyor.
Başlık: Ynt: Bir Derleyici Nasıl Yapılır
Gönderen: MC_Skywalker - 10 Mayıs 2018, 18:06:41
Temel olarak C derleyicilerin nasıl çalıştığını yazarsak derleyicinin nasıl yapıldığını anlama konusunda ilk adımı atmış oluruz.

C komut dizimini yani *.c ve *.h dosyaları obje dosyasına çevrilir. daha sonraki aşamada tüm dosyalar birbirine bağlanır bu esnada daha önceden hazırla(nana)dığınız *.lib dosylarınız da bu bağlama işlemine dahil edilerek çalışacak kod elde edilir.

öncelikli olarak hangi işlemci mimarisi için derleyici yapılacaksa o mimarinin çok iyi bilmek gerekli.

şu adresten ARM M sersi mimarisi fikir vermesi açınsında inceleyerek başlaya bilirsiniz.  https://developer.arm.com/products/architecture/m-profile/docs/100688/latest/the-armv8-m-programmers-model
Başlık: Ynt: Bir Derleyici Nasıl Yapılır
Gönderen: brandice5 - 10 Mayıs 2018, 20:21:20
Bu derleyici denen şey tüm diller için aşağı yukarı aynı iş yaptığı için (lexical analiz, parser, ara kod oluştuma vs..) bunun bile bir kütüphanesini yapmışlar. Adı da LLVM.

https://llvm.org/

Bunu kullanarak kendi derleyicini çok derinlere inmeden yapabilirsin. Çünkü LLVM bir derleyicide olması gereken çoğu şeyi kendisi yapıyor. Nasıl ki yazılım yapılırken her zaman kullanılan işler için kütüphaneler varsa (lcd ye yazı yazmak, seri porttan veri göndermek) derleyici yazmak içinde artık bunu kullanıyorlar.
Başlık: Ynt: Bir Derleyici Nasıl Yapılır
Gönderen: OptimusPrime - 10 Mayıs 2018, 21:04:38
https://www.tutorialspoint.com/compiler_design/index.htm
Başlık: Ynt: Bir Derleyici Nasıl Yapılır
Gönderen: baran123 - 10 Mayıs 2018, 23:07:33
Şu kitabı duymuştum. (Dragon Book)
Hatta Marmara Üniversitesi'nin kütüphanesinde 2 adet görmüştüm.
(http://xahlee.info/parser/i/dragon_book_compiler_cover_52377.jpg)
Başlık: Ynt: Bir Derleyici Nasıl Yapılır
Gönderen: ogy - 11 Mayıs 2018, 09:11:28
http://www.informatik.uni-bremen.de/agbkb/lehre/ccfl/Material/ALSUdragonbook.pdf
Başlık: Ynt: Bir Derleyici Nasıl Yapılır
Gönderen: foseydon - 11 Mayıs 2018, 10:14:57
herkes kitap tavsiyesi vermiş, ben farklı birşey önereyim. compiler yazacağın dilin standardı yalayıp yutman lazım. C için mi yazmak istiyorsun? C standardını açıp güzelce öğrenmen lazım, bana göre birisi C hakkında birşey sorduğunda abi C standardına şöyle oluyor diyebiliyorsan iş tamamdır. ben diyemem misal.

bir diğer hususta şu, amerika'yı yeniden keşfetmeye gerek yok. Amaç derleyicinin nasıl çalışmak olduğunu öğrenmekse, açık kaynak kod bir derleyicisi varsa(misal c için gcc) onun kodunu açıp incelemek daha az zahmetli olur. Zaten kendinde yazmaya niyetliysen bunu yapman yine fayda sağlayacaktır. Belki, kendin yazmaya niyetliysen bile bu aşamadan sonra vazgeçebilirsin bile :)
Başlık: Ynt: Bir Derleyici Nasıl Yapılır
Gönderen: yas - 11 Mayıs 2018, 15:27:54
Bence İlk başlangıç aşamasında @boreas ın dediği gibi syntax algılamaları bile insanı yıldırabilir. Hazır bir IDE kullanılarak derleyici çalışır hale geldikten sonra istenilen yeteneklere sahip bir IDE nin ayrıca geliştirilmesi daha verimli olur diye düşünüyorum.
-Derleyici den kasıt mcu düzeyinde olacaksa hedef olarak seçilen mcu ailesini çok iyi tanımak gerekli
-Yukarıda da söylendiği gibi bilinen kabul görmüş bir programlama dili ile kod yazılacaksa o dilin standartları yalanıp yutulmalı.
-Farklı bir programlama dili yazılacaksa diğer dillerin avantajları ve dezavantajları karşılaştırılarak gidiş yolu belirlenmeli.
Nasıl yapılır sorusuna tam bir yanıt olmasa da yapılması istenen derleyicinin mcu hedefli olduğunu düşünerek;
-Bence direk hex üretmeden asm kodu üretilmeli ve elde edilen asm kod üreticinin asm derleyicisine gönderilmeli. Örneğin picbasic, protonun ve daha bir çok derleyicinin mpasm yi kullandığı gibi.
-Mcu hedefli bir derleyici olduğunu düşünerek kod içerisinde kullanılan "asm" kodu sorunsuz işlemeli.
-Kütüphane eklemek çok pratik olamalı. Oturmuş yapıdaki sorunsuz kütüphaneler ana kütüphane database inde olmalı ve kullanıcı burayı değiştirememeli. Ancak user kütüphaneye ekleme çıkartma yapılabilmeli ve ayrı bir database de tutulmalı.
-Mcu registerlarının adreslerinin tanımlandığı kütüphane dosyaları oluşturulmalı. Örneğin Bit name file dosyaları gibi.
-Hafıza optimizasyonun sağlanması için birbirinin aynı olup tekrar eden kodlar belirlenip ayrı bir alt rutinde çağıracak metotlar derleyicinin yetenekleri arasında olmalı, fakat bunu yaparken başka şeyleri bozmadan becermeli.
-İnterruptların yönetilmesi bence en önemli konulardan. Donanımı çok iyi kavramış olmak gerekli ve ilgili seri mcu ların bütün silicon hataları eratta yayınları takip edilmeli ve tavsiye önlemler kullanılmalı.
-Eğer hazır asm derleyici kullanılırsa yazılan kodda hata bulunması err dosyaları sayesinde daha pratik olacaktır. Yoksa kendi derleyicinize ayrıca error tesbiti yapacak yordamlar hazırlamak gerekecek.
-Değişken tipleride önemli uğraşması meşakatli fakat bence float tip mutlaka olmalı.
-İleri aşamalar için IDE ye entegre Bootloader ve DEBUG özelliği de büyük önem arz etmekte.

Başlık: Ynt: Bir Derleyici Nasıl Yapılır
Gönderen: Firzen - 11 Mayıs 2018, 23:00:26
Ben 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.
Başlık: Ynt: Bir Derleyici Nasıl Yapılır
Gönderen: ByTEK - 11 Mayıs 2018, 23:54:14
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.
Başlık: Ynt: Bir Derleyici Nasıl Yapılır
Gönderen: OG - 12 Mayıs 2018, 08:07:41
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.
Başlık: Ynt: Bir Derleyici Nasıl Yapılır
Gönderen: Firzen - 12 Mayıs 2018, 20:07:06
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.
Başlık: Ynt: Bir Derleyici Nasıl Yapılır
Gönderen: 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
Başlık: Ynt: Bir Derleyici Nasıl Yapılır
Gönderen: ByTEK - 13 Mayıs 2018, 00:33:15
İ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
Başlık: Ynt: Bir Derleyici Nasıl Yapılır
Gönderen: Firzen - 13 Mayıs 2018, 01:10:44
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 :)
Başlık: Ynt: Bir Derleyici Nasıl Yapılır
Gönderen: OG - 13 Mayıs 2018, 02:41:08
Microchip instruction set'leri opcode'ları veriyor,

örnek
http://ww1.microchip.com/downloads/en/DeviceDoc/31029a.pdf
Başlık: Ynt: Bir Derleyici Nasıl Yapılır
Gönderen: foseydon - 15 Mayıs 2018, 10:10:19
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.
Başlık: Ynt: Bir Derleyici Nasıl Yapılır
Gönderen: erkan614 - 23 Mayıs 2018, 04:43:06
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