Picproje Elektronik Sitesi

DERLEYİCİLER => Diğer Derleyiciler => Konuyu başlatan: Firzen - 23 Eylül 2015, 00:22:52

Başlık: Derleyici Nasıl Yazılır?
Gönderen: Firzen - 23 Eylül 2015, 00:22:52
Merhabalar;

Beya uzun zamandır kafama takılan ve gerçekten merak ettiğim bir soruyu size de sormak istedim.

Soru : Bilgisayarlarımızda kullandığımız PIC,STM32,TI hatta FPGA gibi çipleri kodlamak için VIVADO, ISE DESIGN,MikroC,XC8, CCS C gibi bir sürü derleyici kullanıyoruz. Fakat bu derleyiciler nerede yazılıyor biz hiç derleyici yazamaz mıyız? Örneğin ben mikroC gibi bir derleyiciyi Linux işletim sistemi için yazmak istiyorum neler kullanmam gerek ? Yani Linux işletim sisteminde bir derleyici oluşturacak kodumu doğru compile ettikten sonra da HEX kodu verecek?
Başlık: Ynt: Derleyici Nasıl Yazılır?
Gönderen: Gökhan BEKEN - 23 Eylül 2015, 00:47:04
Önce bir dil belirleyeceksiniz, ya daha önceden standartları olan bir dil, (c,c++,basic,pascal gibi) olacak ya da yeni bir dil oluşturacaksınız. Siz zaten c dilini seçmişsiniz.
C dilinde yazılmış kodları parse edeceksiniz.
mesela
a=5;
while ( --a ){
}

yazıldığında a değişkenin 5 kere eksiltilmesi gerektiğini anlayıp, buna göre assemly kodu üreteceksiniz.

Assembly kodunu ne kadar kısa üretirseniz o kadar iyi.
Ben Türkçe pic programlama dili geliştirmeye çalışmıştım bir aralar, basit komutlarım vardı.
döngü(5){
port_a(5,1);
}

gibi komutlarım vardı.

IDE ve compiler aynı programdı, aslında ayrı olması lazım.
Neyse sonra aynı işlemleri PHP ile web üzerinden de yaptım, sonra askerlik felan derken, ekmek derdine düştük, bıraktım.

mesaj birleştirme:: 23 Eylül 2015, 00:49:53

Bu arada c# ile yapmıştım projeyi. Şimdi yapacak olsam, c# ile arayüzünü yazarım, c ile derleyiciyi yazarım.
Yapamadığım şey ise, arayüzün adam gibi özelliği yoktu, c#'daki hazır gelen komponentler bu iş için yeterli değil. Mesela satır numaralarını gösterememiştim.
Otomatik tamamlama yapamamıştım. Renklendirme olayı mümkündü ama hiç girmemiştim o konuya.
Başlık: Ynt: Derleyici Nasıl Yazılır?
Gönderen: Karamel - 23 Eylül 2015, 00:50:21
Hocam ben forumda boyle bir konu okumustum ama telefondan baglandigimdan. Arayip bulamadim. Sanirim elektroemre hocamiz boyle bir calisma yapmis daha onceden. Birde legend bir isim var ki gerbay hocamiz ::) keske kendiside suan burada olsa.....  :-\
Başlık: Ynt: Derleyici Nasıl Yazılır?
Gönderen: Firzen - 23 Eylül 2015, 00:54:40
Alıntı yapılan: Gökhan BEKEN - 23 Eylül 2015, 00:47:04
Önce bir dil belirleyeceksiniz, ya daha önceden standartları olan bir dil, (c,c++,basic,pascal gibi) olacak ya da yeni bir dil oluşturacaksınız. Siz zaten c dilini seçmişsiniz.
C dilinde yazılmış kodları parse edeceksiniz.
mesela
a=5;
while ( --a ){
}

yazıldığında a değişkenin 5 kere eksiltilmesi gerektiğini anlayıp, buna göre assemly kodu üreteceksiniz.

Assembly kodunu ne kadar kısa üretirseniz o kadar iyi.
Ben Türkçe pic programlama dili geliştirmeye çalışmıştım bir aralar, basit komutlarım vardı.
döngü(5){
port_a(5,1);
}

gibi komutlarım vardı.

IDE ve compiler aynı programdı, aslında ayrı olması lazım.
Neyse sonra aynı işlemleri PHP ile web üzerinden de yaptım, sonra askerlik felan derken, ekmek derdine düştük, bıraktım.

mesaj birleştirme:: 24 Eylül 2015, 00:49:53

Bu arada c# ile yapmıştım projeyi. Şimdi yapacak olsam, c# ile arayüzünü yazarım, c ile derleyiciyi yazarım.
Yapamadığım şey ise, arayüzün adam gibi özelliği yoktu, c#'daki hazır gelen komponentler bu iş için yeterli değil. Mesela satır numaralarını gösterememiştim.
Otomatik tamamlama yapamamıştım. Renklendirme olayı mümkündü ama hiç girmemiştim o konuya.

Hocam görsellik için ayrı bir program dediniz anladım da şu C dili ile nasıl döngü falan yaptınız portlar için ve nasıl ASM koduna dönüştürdünüz?
Başlık: Ynt: Derleyici Nasıl Yazılır?
Gönderen: Gökhan BEKEN - 23 Eylül 2015, 01:05:38
Benim yaptığım çok basit bir şeydi. Sadece 16f84 için kod üretiyordu ve sadece belli başlı komutları çalıştırıyordu.
sadece 8bitlik değişken tanımlama komutu
if görevi gören bir komut
döngü için bir komut
tris'leri ayarlayabileceğiniz bir komut
portlara çıkış verebileceğiniz bir komut
ve son olarak delay görevi görecek bir komut vardı
başka da hiç bir özelliği yoktu.
c#'ın indexof komutu ile bir çok işi halletmiştim, yani kullanıcının yazdığı komutları anlamak için string komutları ile parantezleri felan anlamanız ve içindeki değerleri öğrenmeniz gerekiyor. Çok zor değil.
Zor olan işlemci ailesi geniş, bütün asm komutlarını tanıyan, optimize kod üreten ve hatasız kod üreten bir derleyici yapmak.
Başlık: Ynt: Derleyici Nasıl Yazılır?
Gönderen: Burak B - 23 Eylül 2015, 01:06:09
Bakınız LLVM Project (http://llvm.org/)
Başlık: Ynt: Derleyici Nasıl Yazılır?
Gönderen: t600 - 23 Eylül 2015, 08:39:02
Bende böyle birşey düşünmüştüm .
Bu işi için en önemli şey ilgili mikrodenetliyicinin iç mimarisini çok iyi bilmek  gerekir , Bunun için 8051 i ele alabiliriz , haluk gümüşkaya bu çipin mimarisini çok iyi anlatmış . Bütün regesterları ve asm komutlarını inceledikten sonra bu çipe hakim olunabiliyor . Dil olarak basic in türkçesi seçilmeli . Yani Basic Türkçe .
İf ten else  , goto , loop gibi şeyleri türkçe yapmalıyız ,  eğer , değilse , döngü gibi , saund yerine ses  vbb.
Bu derleyiciyi wisual basic te yazabiliriz .
Bunun yapılabileceğini hayal edebiliyorum .Bence bu işe başlanırsa çok basit olduğu görülür.
Başlık: Ynt: Derleyici Nasıl Yazılır?
Gönderen: Firzen - 23 Eylül 2015, 11:50:35
Alıntı yapılan: t600 - 23 Eylül 2015, 08:39:02
Bende böyle birşey düşünmüştüm .
Bu işi için en önemli şey ilgili mikrodenetliyicinin iç mimarisini çok iyi bilmek  gerekir , Bunun için 8051 i ele alabiliriz , haluk gümüşkaya bu çipin mimarisini çok iyi anlatmış . Bütün regesterları ve asm komutlarını inceledikten sonra bu çipe hakim olunabiliyor . Dil olarak basic in türkçesi seçilmeli . Yani Basic Türkçe .
İf ten else  , goto , loop gibi şeyleri türkçe yapmalıyız ,  eğer , değilse , döngü gibi , saund yerine ses  vbb.
Bu derleyiciyi wisual basic te yazabiliriz .
Bunun yapılabileceğini hayal edebiliyorum .Bence bu işe başlanırsa çok basit olduğu görülür.
Hocam bir basit çalışanı yapılsa hem türkçe hem ingilizcesi yapılır.

@Gökhan BEKEN hocam MAC veya Linux bir bilgisayarda mutlaka deneme yapıp sizlerle irtibat halinde olmak isterim çok merak ettim valla şimdi.

Çünkü c kodunu hem ASM ye ardından da HEX koduna dönüştürecek sistem beya ilginç geldi.

Neyse öncelik olarak şu elimdeki denge robotu , VHDL ve LabVIEW işini bitireyim. :) Ardından bir VirtualBox ile işletim sistemi yükleyip denemeye başlayayım :)
Başlık: Ynt: Derleyici Nasıl Yazılır?
Gönderen: ByTEK - 23 Eylül 2015, 12:46:18
Pascal,Basic,C,C#,Delphi...vs Bütün yüksek seviyeli dillerde ki alt seviye diller dahil derleyici yazılabilir. Derleyicide önemli olan en sade ve sorunsuz şekilde çıktıyı ASM ye çevirmektir. HEX kısmı ASM ye dönüşüm yapılınca ASM derleyicisi ile çözülebilir.

Bir dönem delphi ile kasarak birşeyler yapmıştım. Fakat ASM yi yiyip bitirmek gerekli diye düşünüyorum. yoksa stabil derleyici yazılamaz. Bence C diline çevirip C ile derlemek daha mantıklı. ama bu sefer derleyici değil araya çevirici yazmış olunur.

işiniz sürekli string parse ile olduğundan ötürü bol bol amacınıza göre string parse amaçlı fonksiyonlar yada prosedurler yazmanız gerek.
Başlık: Ynt: Derleyici Nasıl Yazılır?
Gönderen: engerex - 23 Eylül 2015, 13:28:13
Bu işin bir kaç yolu var.
Eğer MikroElektronika gibi herşeyi kendin yapacaksan C/C++/Pascal/Basic/... gibi dillerden kendi geliştirdiğin ortak bir dile çeviri yaparsın. Bu dili kullanıcının bilmesine ve görmesine gerek yok. Ara dilden sonra işlemciye uygun ASM kodlarını üretirsin. ASM'den sonra direk makina dili. Bu yöntemin avantajı istersen ileride farklı dillerede destek verebilirsin. Kullanıcı fortran/ada/java/C# gibi dillerde bile yazmış olsa sen bunu kendi aradiline çevirdiğin müddetçe problem yok. Ara dili nasıl olsa ASM'ye çevirebiliyordun. Tabi gömülü sisteme uygun programlama olacak.

İşin kolay:
Yada not defterinde de yazdığın bir uygulamayı hazır compiler yardımı ile derleyebiliyorsun. GNU GCC ne için var?
Başlık: Ynt: Derleyici Nasıl Yazılır?
Gönderen: Firzen - 23 Eylül 2015, 20:09:23
Alıntı yapılan: engerex - 23 Eylül 2015, 13:28:13
Bu işin bir kaç yolu var.
Eğer MikroElektronika gibi herşeyi kendin yapacaksan C/C++/Pascal/Basic/... gibi dillerden kendi geliştirdiğin ortak bir dile çeviri yaparsın. Bu dili kullanıcının bilmesine ve görmesine gerek yok. Ara dilden sonra işlemciye uygun ASM kodlarını üretirsin. ASM'den sonra direk makina dili. Bu yöntemin avantajı istersen ileride farklı dillerede destek verebilirsin. Kullanıcı fortran/ada/java/C# gibi dillerde bile yazmış olsa sen bunu kendi aradiline çevirdiğin müddetçe problem yok. Ara dili nasıl olsa ASM'ye çevirebiliyordun. Tabi gömülü sisteme uygun programlama olacak.

İşin kolay:
Yada not defterinde de yazdığın bir uygulamayı hazır compiler yardımı ile derleyebiliyorsun. GNU GCC ne için var?

Peki GNU/GCC çalışma mantığı nedir hocam?
Mesela Bu durum MAC bilgisayarlarda nasıl ayarlanabilir (MAC içinde GNU GCC var biliyorum) XCode'un kendi özelliği var mı? Yazılması gerekli mi?
Başlık: Ynt: Derleyici Nasıl Yazılır?
Gönderen: Icarus - 23 Eylül 2015, 22:03:19
Derleyici yazmaktaki problem Asm'e çevirmek değil. Problem Ör: C'deki kodu anlamlandırabilen bir program yazmak. Bunun için pek çok teknik var. Konu hakkında artık bible haline gelmiş kitaplar var.
Hepsini web'de bulabilirsiniz.
Tabii Google'da bulduğunuz bilgiler 1970-80 civarını temsil edecektir ama olsun size bir başlangıç yaptırır. Geçtiğimiz 30 yılıda eğer birgün bu işi meslek olarak yapmaya karar verirseniz öğrenirsiniz.
Başlık: Ynt: Derleyici Nasıl Yazılır?
Gönderen: Firzen - 23 Eylül 2015, 23:10:27
Alıntı yapılan: Icarus - 23 Eylül 2015, 22:03:19
Derleyici yazmaktaki problem Asm'e çevirmek değil. Problem Ör: C'deki kodu anlamlandırabilen bir program yazmak. Bunun için pek çok teknik var. Konu hakkında artık bible haline gelmiş kitaplar var.
Hepsini web'de bulabilirsiniz.
Tabii Google'da bulduğunuz bilgiler 1970-80 civarını temsil edecektir ama olsun size bir başlangıç yaptırır. Geçtiğimiz 30 yılıda eğer birgün bu işi meslek olarak yapmaya karar verirseniz öğrenirsiniz.

Hocam örnek bir kitap önerebilir misiniz acaba?
Başlık: Ynt: Derleyici Nasıl Yazılır?
Gönderen: mufitsozen - 24 Eylül 2015, 01:13:02
Alıntı yapılan: Firzen - 23 Eylül 2015, 23:10:27
Hocam örnek bir kitap önerebilir misiniz acaba?

Sayin @Icarus'dan ve sizden ozur dileyerek araya giriyorum, benimde bir kac onerim olacak. umarim isinize yarar.

Aho'nun priciples of compiler design kitabi bu isin incilidir (tabiri caizse) Dragon Book diyede bilinir. Hem icerik hemde fiziksel olarak biraz "kalindir!"
http://www.amazon.com/Compilers-Principles-Techniques-Tools-2nd/dp/0321486811 (http://www.amazon.com/Compilers-Principles-Techniques-Tools-2nd/dp/0321486811)

Birde "Engineering a Compiler" kitabi var biraz daha guncel teknikler iceren http://www.amazon.com/gp/product/012088478X/ref=pd_lpo_sbs_dp_ss_1?pf_rd_p=1944687762&pf_rd_s=lpo-top-stripe-1&pf_rd_t=201&pf_rd_i=0321486811&pf_rd_m=ATVPDKIKX0DER&pf_rd_r=17B1KCVKX3Q66T4QQ55K (http://www.amazon.com/gp/product/012088478X/ref=pd_lpo_sbs_dp_ss_1?pf_rd_p=1944687762&pf_rd_s=lpo-top-stripe-1&pf_rd_t=201&pf_rd_i=0321486811&pf_rd_m=ATVPDKIKX0DER&pf_rd_r=17B1KCVKX3Q66T4QQ55K)

Benim size esas onerecegim kitap ise Vladimir O. Safonov'un kitabidir. Keske 30 yas genc olsaydim demistim okudugumda :-) http://www.amazon.com/Trustworthy-Compilers-Vladimir-O-Safonov/dp/0470500956 (http://www.amazon.com/Trustworthy-Compilers-Vladimir-O-Safonov/dp/0470500956)

bunlarin disinda parsing, optimization ve code generation safhalarindan bahseden daha bir cok kitap bulabilirsiniz.

Referans verdigim kitaplari ebook(pdf yada epub) olarak webde bulabilirsiniz.
Başlık: Ynt: Derleyici Nasıl Yazılır?
Gönderen: Firzen - 24 Eylül 2015, 11:57:10
Alıntı yapılan: mufitsozen - 24 Eylül 2015, 01:13:02
Sayin @Icarus'dan ve sizden ozur dileyerek araya giriyorum, benimde bir kac onerim olacak. umarim isinize yarar.

Aho'nun priciples of compiler design kitabi bu isin incilidir (tabiri caizse) Dragon Book diyede bilinir. Hem icerik hemde fiziksel olarak biraz "kalindir!"
http://www.amazon.com/Compilers-Principles-Techniques-Tools-2nd/dp/0321486811 (http://www.amazon.com/Compilers-Principles-Techniques-Tools-2nd/dp/0321486811)

Birde "Engineering a Compiler" kitabi var biraz daha guncel teknikler iceren http://www.amazon.com/gp/product/012088478X/ref=pd_lpo_sbs_dp_ss_1?pf_rd_p=1944687762&pf_rd_s=lpo-top-stripe-1&pf_rd_t=201&pf_rd_i=0321486811&pf_rd_m=ATVPDKIKX0DER&pf_rd_r=17B1KCVKX3Q66T4QQ55K (http://www.amazon.com/gp/product/012088478X/ref=pd_lpo_sbs_dp_ss_1?pf_rd_p=1944687762&pf_rd_s=lpo-top-stripe-1&pf_rd_t=201&pf_rd_i=0321486811&pf_rd_m=ATVPDKIKX0DER&pf_rd_r=17B1KCVKX3Q66T4QQ55K)

Benim size esas onerecegim kitap ise Vladimir O. Safonov'un kitabidir. Keske 30 yas genc olsaydim demistim okudugumda :-) http://www.amazon.com/Trustworthy-Compilers-Vladimir-O-Safonov/dp/0470500956 (http://www.amazon.com/Trustworthy-Compilers-Vladimir-O-Safonov/dp/0470500956)

bunlarin disinda parsing, optimization ve code generation safhalarindan bahseden daha bir cok kitap bulabilirsiniz.

Referans verdigim kitaplari ebook(pdf yada epub) olarak webde bulabilirsiniz.
Hocam çok teşekkür ederim bu kitaplara bakacağım mutlaka.
Başlık: Ynt: Derleyici Nasıl Yazılır?
Gönderen: ts - 03 Ağustos 2019, 19:47:15
Merhaba forum ilk mesajımda konu hortlatmak istemezdim kusura bakmayın. Uzun süredir takip ediyorum formu bugün üye olmaya karar verdim. Elektroniğe daha doğrusu pic mikrodenetleyicilere bir yıldır ilgi duyuyorum. Birde geliştirme kartı aldım üzerinde pic18f2550 bulunan, bir derleyicisi var kullanmasamda bu derleyiciyi http://pickatide.com (http://pickatide.com) Forumda çeşitli fikirler çıkmış ama bir sonuç olmamış. En azından birileri yapmış alfa sürümde olsa Türkiye'de. Forum olarak bir derleyici yazacak kimselerin olmaması yada bir araya gelememeleri çok üzücü. Şununda farkındayım para kazanmak çok zordur bir derleyici yazıp ama hiç bir deneme olmaması bunca yıl ilginç. Tekrar kusura bakmayı eski konuyu deştiğim için, takıldığım yerlerde yardımlarınızı isteyeceğim.     
Başlık: Ynt: Derleyici Nasıl Yazılır?
Gönderen: M.Salim GÜLLÜCE - 05 Ağustos 2019, 12:13:03
-Bunlar hakkında ne düşünürsün.
http://pickatide.com/#firstPage (http://pickatide.com/#firstPage)

-Arduino benzeri bir şey yapmaya çalışıyorlar sanırım
Arduino aldı başını gitti, PIC geri kaldı o pazarda
Programlayıcı ve derleyici de içinde sanki öyle anladım.

-Bunu yapan türk.

-Arduino işte.

-eskişehirden

-Hmmm.
Öyle ise biraz zor gibi. Yedirmezler kolay kolay. Allah işlerini rast getirsin

-Aynı sitenin org u war
göz at istersen

-Sadece TR hedeflemesi kötü olmuş.
Bir ortak bulup (ya da becerebilecekse bulmadan) dünya çapında yapması gerek. Bu şekilde para da kazanması zor
Benzer bir arduino'nun iki misli fiyatı var. Bu, kötü değil ama ihtimal ki para kazandırmaz.
Yazılımı indirmedim, ama linux yazılımları gtibi görünüyor. Yani ayarlar config dosyasından. Arayüz üzerinden değil.

-hımm

-Bence bunu Microchip'in desteklemesi gerek ama bir Türke bırakırlar mı bilemiyorum

-Aslında bu adamların reklamını yapmak lazım sosyal medyada

-Sadece TR'de sağlanacak bir başarı anlamlı değil o kadar.
İşi biraz oturtup, sitelerini ve dokümanlarını İngilizceye çevirip Microchip'e gitmeliler.
Başlık: Ynt: Derleyici Nasıl Yazılır?
Gönderen: boreas - 05 Ağustos 2019, 20:36:40
Abdurrahman Ulusoy'un yazdığı http://pikyaz.blogspot.com/2016/05/pikyaz.html programı vardı birde.
Başlık: Ynt: Derleyici Nasıl Yazılır?
Gönderen: Firzen - 06 Ağustos 2019, 03:28:02
Ben valla pes ettim aklımda çok basit kontrol için bir derleyici yazmak vardı yalan oldu. MATLAB, LabVIEW, Mathematica devam... Üniversiteler bu programların lisansları için milyonlarca para veriyor. Tübitak, SAGE vs uğraşmıyor da gariban firzen mi yapacak.
Başlık: Ynt: Derleyici Nasıl Yazılır?
Gönderen: OptimusPrime - 06 Ağustos 2019, 06:14:14
 :D

Zor isler bunlar. 2000 lerin basinda bir arkadasim soyunmustu bu islere. Soyunmasi ile giyinmesi bir oldu.  :D
Başlık: Ynt: Derleyici Nasıl Yazılır?
Gönderen: Tagli - 06 Ağustos 2019, 10:03:14
flex ve bison ikilisi bile insanı çıldırtmak için yeterli :) Bir zamanlar bir çeşit otomatik C kodu üretici yapmak için bunları kullanmıştım.
Gerçi artık bunların daha modern alternatifleri var ama yine de mantık benzer.
Başlık: Ynt: Derleyici Nasıl Yazılır?
Gönderen: mufitsozen - 10 Ağustos 2019, 14:00:41
@Firzen DMS Software Reengineering Kit (http://www.semanticdesigns.com/Products/DMS/DMSToolkit.html)
Başlık: Ynt: Derleyici Nasıl Yazılır?
Gönderen: mufitsozen - 10 Ağustos 2019, 14:22:35
Alıntı yapılan: Firzen - 06 Ağustos 2019, 03:28:02Ben valla pes ettim aklımda çok basit kontrol için bir derleyici yazmak vardı yalan oldu. MATLAB, LabVIEW, Mathematica devam... Üniversiteler bu programların lisansları için milyonlarca para veriyor. Tübitak, SAGE vs uğraşmıyor da gariban firzen mi yapacak.

Hemen vazgecme, Bence basa cikabilirsin. Ben elimden gelen her konuda yardimci olurum.

Once ne yapmak istedigini belirle, bir plan yap, sonra goruselim.