> Derleyici Tasarımı > Derleyici Tasarım Notları – 1

Derleyici Tasarım Notları – 1

Derleyici tasarımı, uzun zamandır kendimi geliştirmek için uğraştığım bir konu. Bu konu ile ilgili çok kitaplar ve makaleler okudum ve araştırmalar yaptım. Ama ne yazık ki, bu konuda kendimi ciddi manada ilerleyebilmiş olarak hissetmiyorum. Şimdi ise bu araştırma ve notlarımı burada toplamayı düşünüyorum. Böylece kendimi bu konuda geliştirmeyi ve bununla beraber bu notları sizlerle paylaşmayı düşünüyorum.

Bu yazı serisi, önceden yazdığım makaleler gibi tecrübe ve bilgiye dayalı olmayacak. Okuduğum kitap ve makalelerden ve denemelerimden oluşacak. Bu yüzden bu makale serisinin hedeflediği kitle, sadece bu işin meraklılarına hitap ediyor. Derleyici-yorumlayıcı yazmak isteyenlere faydalı bir konu özeti olacağını düşünüyorum. Ayrıca bu işe yeni başlayacak olanlara veya başlamış ama bir sebepten dolayı yarım bırakmış kimselere de bir fihrist, bir yol haritası olacağını düşünüyorum. Tabi bu notları çıkarmakla ben de kendimi bu konuda geliştirmeyi düşünüyorum.

Başlarken..

İlk derleyici yazma merakım, bir işletim sistemi yazma merakım olduğunda başladı 🙂 Gerçi işletim sistemi olarak sadece disketten boot edilebilir ve dos benzeri bir şeyler yazabildim ancak. Fakat bu gayretim bana çok şeyler kazandırdı. Öncelikle bilgisayar ve işletim sisteminin çalışma mantığını çok iyi bir şekilde sindirdim. Ayrıca assembler ve diğer programlama dilleri noktasında da çok faydası oldu. Ayrıca derleyicilerin işletim sistemleri için ne kadar önemli ve vazgeçilmez bir şey olduğunu da gördüm. Bütün o kodları assembler ile yazmak bir yana, herhangi bir hata olduğunda kafayı yememek bir yana. Bu tabiki ilk başlarda derleyici yazma merakından çok, derleyici yazma ihtiyacını doğurdu.

Tabi bunlar çok öncelerde kaldı. Artık eskisi gibi işletim sistemi yazmak gibi uçuk bir düşüncenin altına girmeyi düşünmüyorum. Fakat derleyici yazmak o kadar da uçuk, ütopik olan bir şey değil. Zira en ünlü programalama dillerine baktığınızda hemen hemen hepsinin ilk başlarda bir veya iki kişi ile yazıldığını görürsünüz. Bu konu ile ilgili araştırma yaptıkça, bu konunun anlaşılmasının çok zor olmadığını fakat teoriden pratiğe, uygulamaya dökmenin zorluğunu gördüm. Son zamanlarda derleyici tasarım teknolojisinin gelişmesiyle beraber uygulamaya dökme işlemi de artık -eskisi gibi- çok zor değil. Zamanı geldiğinde bu teknolojilerden bahsetmeye çalışacağım.

Bu Makale Serisi Kime Hitap Ediyor

İlk başlarda da dediğim gibi öncelikle bu işe meraklı olmalısınız. Bu konu sadece derleyici veya yorumlayıcı yazmaktan ibaret değil tabiki. Eğer yabancı bir dilden (mesala İngilizce’den) Türkçe çeviri yapan veya tam tersi işlemi yapan bir çeviri programı yapmak istiyorsanız, yine bu konu iyi bilmeniz gerekiyor.

Bir derleyici, yorumlayıcı yazabilmek için bir programlama diline iyi hakim olmanız da gerekmektedir. Bu yüzden bu makaleyi okuyabilmeniz için en az bir adet programlama dilini iyi bilmeniz gerekiyor. Üstelik nesne tabanlı programlamayı da bilmeniz işinizi daha da kolaylaştıracaktır.

Ayrıca şunu da belirtmek isterim. Bu konuda Türkçe kaynak yok denecek kadar az. Bu konuda kendinizi geliştirmek istiyorsanız ilk başta İngilizce ile başlasanız fena etmezsiniz.

Kitaplar ve Kaynaklar

Piyasada bu konu ilgili bir çok kitap mevcut. Kimi çok eski ve şu anki teknolojiye hitap etmiyor, kimisi de çok teoride kalıp pratikte hiç bir kullanımından bahsetmiyor. Onca kitap arasından kendimize referans kabul edebileceğimiz kitabı seçmek zor olabiliyor. Ben bunlardan beğendiğim ve gerçekten kaliteli kitapları tavsiye edeceğim. Bu kitaplar genel yorumlarda da iyi gözle bakılan ve günümüz derleyici teknolojilerine de uygun kitaplardır.

Benim tavsiye edebileceğim kitaplar şunlar:

Compilers, Principles, Techniques and Tools; 2nd Edition: Bu kitap, derleyici tasarımının temel ve vazgeçilmez kitabı olarak kabul edilir. Derleyici tasarımcıları arasında ilk baskısının kapağındaki ejder figüründen dolayı “Dragon Book” ismiyle anılmaktadır. Kitabın ilk baskısı yanılmıyorsam 1986 yılında yayınlanmış. Fakat benim tavsiye edeceğim 2. baskısıdır. 2. baskısı 2006’da çıktı ve değişen bir çok derleyici teknolojisini barındırmaktadır. İyi bir başlangıç yapmak isteyen ve yanı başında referans kitap olarak bulundurmak isteyenlere tavsiye ediyorum.

Engineering a Compiler (Cooper, Torczon): Bu kitabı çok aramama rağman ancak ebay üzerinde bulabildim. Sıfır almak isteyenler için amazonda da mevcut. Ebook olarak bulmayı niyetlenenlere söyleyeceğim şey şu ki, bu kitabın internet üzerindeki ebookları eksik. Daha doğrusu draft, yani yazarın kitap çıkmadan çok önceki taslak metinlerinden oluşuyor. Şu ana kadar incelediğim kitaplar arasında işe yarar, teori ve pratik bilgisi iyi olan ve yeni derleyici teknolojilerine hitap eden nadir kitaplardan birisi.

The Definitive ANTLR Reference: İleride bahsedeceğim derleyici derleyicilerinden birisi olan ANTLR ile ilgili yazılmış güzel bir kitap. ANTLR derleyici derleyicisini tasarlayan ve yazan Terence Parr tarafından yazılmış olan kitapta, sadece ANTLR ile ilgili bilgi bulunmamakta. Bu kitapta derleyici tasarımının temel bilgileri yanında gramer oluşturma, lexer, parser çalışma mantıkları ve LL çakışmaları gibi bir çok konuda bilgi de bulunmakta. Önceki iki kitap, her ne kadar pratikte kullanılabilecek bilgiler içerse de genelde teoriyi hedefleyen kitaplardır. Fakat bu kitap, öğrendiğimiz teoriyi uygulumaya nasıl dökebilceğimizi ayrıntısı ile anlatmakta.

Derleyici-yorumlayıcı yazmak isteyen herkese bu üç kitabı şiddetle tavsie ediyorum. Bunlar dışında yardımcı olabilecek şu kitaplara da göz atabilirsiniz. 

  • Advanced Programming Language Design (Raphael A. Finkel)
  • Build Your Own Net Language And Compiler (Edward G. Nigles)
  • Let’s Build a Compiler (Jack W. Crenshaw) (şu linkte bedava dağıtılmaktadır: http://compilers.iecc.com/crenshaw/)
  • Building An Optimizing Compiler (Bob Morgan)
  • Compiler and Compiler Generators (P.D. Terry)
  • Algorithms for Compiler Design (O.G. Kakde)
  • Modern Compiler Implementation in Java (Andrew W. Appel)
  • Compiler Construction (Kneeth C. Louden)

Bu kitaplarla beraber bir sorununuz olduğunda, internet üzerinde ANTLR ve Coco/R mail listeleri sizlere yardımcı olacaktır.

Ayrıca sourcefoge.net gibi bir çok sitede bulabileceğiniz açık kaynak kodlu derleyici projeleri bulunmaktadır. Özellikle Tiny C benzeri bir çok açık kaynak kodlu ve küçük (yani incelenebilir) derleyicilere ulaşabilirsiniz. Gcc, freepascal gibi büyük projeleri de inceleyebilirsiniz. Fakat bu projeler çok büyük olduklarından pek öğretme/öğrenme amaçlı değiller. Bunun yerine daha çok küçük ve deneysel projeleri bulup incelemekte yarar var.

Ben yeri geldikçe bu tarz projeleri bulup sizlerle paylaşacağım. Ayrıca yeni çıkmış olan veya benim yeni keşfettiğim güzel kitapları da burada yeri geldikçe tanıtmaya çalışacağım.

Bir sonraki bölümde derleyiciler hakkında temel teorik bilgiler bulacaksınız. Bir sonraki bölümde anlamadığınız yerler olursa burada verdiğim kitap ve kaynaklardan istifade edererek araştırırsınız. Çünkü bunlar temel konulardır ve sonrasında gelecek olan bölümler bu temel bilgiler üzerine inşa edilecektir.

Bölüm 1: Derleyiciler ve Çalışma Mantığı

Derleyici tasarımı, bilgisayar biliminde önemli bir sahayı oluşturmaktadır. En basit olarak bir derleyici, büyük bir bilgisayar programıdır. Bir derleyici, kaynak kodu alır ve belli bir bilgisayar mimarisine uygun çalıştırılabilir bir hedefe çevirir. Bu çevirimin bir parçası da girilen kaynak kodun imla analizini yani syntax analizini yapmaktır. Bu imla analizi sonucunda, kaynak kodlarda hata tespiti yapılır ve kaynak kodun derleyici içindeki karşılıklarına çevrilir. Derleyeci, daha sonra, bu çevrilmiş olan kaynaklara bir mânâ, anlam yükler. Bu anlam yüklemesi sonucunda, derleyici anlam hatalarını araştırır. Bu işlemden sonra da kaynak kodun derleyicide ifade ettiği anlama göre hedeflenen çıktı üretilir. Tabi bu açıklama çok yüzeysel bir açıklama ve adeta bu bölümde göreceklerimizin bir özeti hükmünde oldu.

Derleyici tasarımı, bir mühendislik çalışmasıdır ayrıca. Derleyici yazarı, bu yolda kendisine bol alternatifi olan, masrafı, avantajları ve zorluğu belirgin olan bir tasarım ortamı oluşturmak zorundadır. Her bir karar, oluşturulacak olan derleyiciyi etkileyecektir. Oluşturulacak olan ürünün kalitesi bu alınan kararlara bağlıdır.

Derleyici tasarımı, çok eski olmamasına rağmen, tatmin edici seviyelere kadar gelişmiş bir konudur. Bu konuda bir çok başarılara imza atılmıştır. Piyasada olan bir çok derleyici ve binlerce çeşit programalama dili ile beraber, bu konudaki bilgiler kullanılarak geliştirilmiş bir çok program, bunun ispatıdır. Bir problemi çözmek için bir çok yöntem geliştirilmiştir. Ben burada en güncel ve popüler tekniklerden bahsetmeye çalışacağım. Ama bilinki, bahsedeceğimiz her bir konu ve teknik için alternatifler mevcuttur. Bu alternatifleri araştırmak size kalmış.

Derleme İşlemine Genel Bakış

Bir program çalıştırılabilir olmadan önce, bir çok çevirim işlemlerine tabi tutularak hedef çalıştırılabilir kodlar oluşturulurlar. Bu çevirim işlemini yapan programın özel adına derleyici (compiler) diyoruz. Derleyici, kendisinin anlayacağı bir dilde kaynak kodlarını alır ve çıkışta çalıştırılabilir kodlar üretir. Bu çalıştırılabilir kodlar Windows’da exe, dll, Linux’de elf, so gibi dosyalar olabilceği gibi, .net, java gibi sanal makinalar için çalıştırılabilir kodlar da üretebilir.

Ayrıca çalıştırılabilir kodlar, direk olarak işleme de tabi tutulabilirler. Yani javascript, vbscript gibi direk olarak derleme anında çalışan derleyiciler de mevcuttur. Bu tip derleyicilerin özel adına ise yorumlayıcı (interpreter) denilir. Her ne kadar bazı eski kaynaklarda yorumlayıcılar ve derleyiciler iki farklı şeylermiş gibi gösterilse de çalışma mantıkları aynı olduğu için hepsine genel olarak derleyici demeyi uygun buluyorum. Çünkü derleme işleminde, ileride ayrıntısı ile göreceğimiz gibi, ilk safha yorumlama, ikinci safha ise kod üretmedir. Yorumlayıcıların tek farkı, kod üretme safhası bulunmamasıdır.

Ayrıca yorumlayıcı kodları, çalışabilmek için bir yorumlayıcıya ihtiyaç duyarlar. Mesela php kodları php derleyicisine, basic kodları basic derleyicisine, javascript kodları ecmascript destekli bir browser’a ihtiyaç duyarlar. Bu kodlar, yorumlayıcı olmadan çalıştırılamazlar. Fakat C++, Delphi gibi derleyicilerin ürettiği kodları, direk olarak işletim sistemi üzerinden işlemci çalıştırmaktadır, daha sonradan derleyiciye ihtiyaçları yoktur.

Bir de günümüz teknolojisinde yorumlayıcı olan ama temelde derleyiciler gibi kod üretebilen derleyiciler de mevcuttur. Mesela php derleyicisi, yorumlayıcı gibi ayrı bir dosyaya işletim sistemine uygun bir kod üretmeden, hemen çalışmaya başlar. Fakat yorumlayıcılardan farklı olarak “kod üretir”. Bu kod tabiki ayır bir dosya değil, IIS, Apache gibi server’lara uygun yapıda opcode’lardır.

Günümüzde derleme işlemi yapan bir programı, yorumlayıcı, derleyici olarak kesin bir şekilde ayırmak zorlaşmıştır. Bunun yerine hepsine derleyici demek ve derleme işlemindeki ilk bölüme yorumlayıcı demek daha doğru olacaktır. Ve bu mantığın kavram karmaşasını da önleyeceğini düşünüyorum. Ve herhangi bir yorumlayıcıya derleyici demeyi de yanlış bulmuyorum. (Php yorumlayıcısı yerine, php derleyicisi demek bana daha uygun geliyor…)

Peki, kaynak kodumuz, derleyici ile tanıştıktan sonra hangi aşamalardan ve safhalardan geçiyor? Bu konuyu ayrıntısı ile ilerleyen bölümlerde göreceğiz. Burada özet mahiyetinde şöyle bahsedebiliriz:

Derleyici İşleyiş Diagramı

Derleyici İşleyiş Diagramı

Genel manada bu şekilde olsa da hem arka planda, hemde görüntüde bir çok safha değişebilmektedir.

Kaynak kod derleyicimize geldiği vakit, ilk olarak, kaynak kodun harfleri teker teker işlenir ve tanımlanarak token dediğimiz nesnelere dönüştürülürler. Bu işlemi gerçekleştiren parçaya Lexer denilir. Lexer’ın görevi, imla (syntax) analizi yapıp sonuç olarak bir token listesi oluşturmaktır. Bu imla analizi sırasında kaynak kodda hatalar da bulunabilir. Bu hatalar Lexer tarafından tespit edilir ve imla hatası (syntax error) olarak bildirilir. Lexer, kaynak kodun ifade ettiği, edeceği anlam ile uğraşmaz. Hangi token’nın hangisinden sonra geldiği ile ilgilenmez.

Mesela aşağıdaki karakter katarına bakalım.

post216_fig2

Lexer, bu karakter katarındaki her bir karakteri ayrıştırır. “width” kelimesini bir token, “:=” atama operatörünü bir token, 2 sayısını bir token ve “;” işaretini bir başka token olarak belirler. Eğer gramere göre bu karakter katarında hata mevcut değilse token listesini üretir. Burada ayrıca her bir boşluk da, kimi lexer’lar tarafından, birer token olarak kabul edilmektedir. İleride ayrıntısını göreceğimiz token’ı Delphi’deki bir record veya C++’daki bir struct yapısına benzetebilirsiniz. Bu record ya da struct içinde, token’nın türü, bulunduğu pozisyon gibi değerler bulunur.

Lexer, token listesini oluşturduktan sonra işlemini tamamlamıştır. Artık bu token listesini, Parser dediğimiz başka bir derleyici parçasına iletir.

Parser, bu token listesini alır ve bir ağaç yapısı üretir. Bu oluşturulan ağaca, Parse Ağacı denilir. Token listesinden oluşturulmuş olan parse ağacı, yine tokenlardan oluşmuş bir yapıdır ve derleyicinin tanıdığı gramere göre oluşturulur. Parser eğer ağacı oluştururken gramere uygun olmayan bir token ile karşılaşırsa bunu hata olarak bildirir. Parserın ürettiği bu hataya “Gramer Hatası” yada “Parse Hatası” (Parse Error) denilir.

Parser, token içinde bulunan ve tokenın ifade ettiği text ile uğraşmaz. Tokenın karakter katarında hangi pozisyonda bulunduğu ile ilgilenmez. Ayrıca parser, lexer gibi, tokenın ifade ettiği anlam ile uğraşmaz. Parser sadece token listesinin dizilişine göre gramere uygunluğu kontrol eder. Bunun sonucunda da bu token listesinden oluşan bir parse ağacı üretir.

Misal olarak aşağıdaki karakter katarından, Lexer ve Parser’ın ürettiği çıktılara bakalım:

 

Lexer ve Parser İşleyişi

Lexer ve Parser İşleyişi

Bu ağacın oluşturulmasının amacına daha sonra değineceğiz.

Parse ağacı oluştuktan sonra bu ağaç, Semantik Analiz’e (Semantic Analysis) tabi tutulur. Ağacın her bir yaprağında bulunan tokenlar, bu aşamada derleyici için bir mânâ ifade etmeye başlarlar. Yani artık integer olan bir token, derleyici tarafından integer, değişken olan token ise değişken olarak anlam verilir. Bunun sonucunda ise, anlam olarak belli hatalar oluşabilir. Bu aşamada oluşabilecek hatalara Semantik Hatalar (Semantic Errors) denilir. Mesela integer olan bir değişken, string olan bir değişkene direk olarak eşitlenemez! Tabi bu örnek programlama dillerine göre farklılık da gösterebilir. Fakat genel manada integer bir değeri string bir değere direk olarak eşitleyemezsiniz. Çünkü bunların token tipleri farklıdır. Bu tarzdaki, yani anlam bakımından yanlış olan işlemler semantik hataları oluştururlar.

Semantik analiz sonucunda herhangi bir hata oluşmamış ise parse ağacı yardımı ile intermediate code ya da intermediate representation dediğimiz ara bir kod oluşturulur. Tabi bu safha her derleyicide bulunmayabilir. Bu ara kod oluşturulduktan sonra kodlar optimize edilir ve tekrar son çıktı için kod üretilir. Bazı derleyiciler ara kod oluşturmadan direk olarak kod oluşturabilmektedir.

Bu işlemlerden bizi en çok zorlayan kısım lexer ve parser kısımlarıdır. Çünkü bu parçalar, programlama dilinin gramerini ifade eden, tanımlanmasında hata kabul etmeyen, hamaliyesi çok olan parçalardır. Bu zorluklardan dolayı bir çok “derleyici derleyicisi” denilen yardımcı programlar geliştirilmiştir. Her büyük derleyicide bu derleyici derleyicisi kullanılmaktadır. Bunu daha sonra ayrıntısı ile göreceğiz.

Burada bahsettiğimiz tabirler yabancı gelse de, ileride bunları daha iyi ve ayrıntısı ile bahsedeceğiz. Ama genel olarak “Derleyici Tasarım Notları” başlıklı bu yazı serimiz bunlardan bahsedecektir. Burada bir nevi, anlatacaklarımızı özetlemiş olduk. Fakat ayrıntıda gizli, çok farklı teknikler ve yöntemler mevcut. Bunlara yeri geldikçe bahsedeceğiz.

 

________________________________

Birinci bölüm henüz bitmiş değil. Devamını bir başka zamana atıyorum. 

Kolay gelsin.

Fatih Tolga Ata © 2009

33 Comments

  • At 2009.03.26 16:19, Zafer ÇELENK said:

    Merhaba,

    Öncelikle elinize sağlık çok güzel bir makale olmuş yazıyı sonuna kadar soluksuz okudum diyebilirim. Serini diğer yazılarınıda sabırsızlıkla beklediğimi belirtmek isterim.

    Üzüldüğüm nokta ise böyle güzel bir konunun, insanların ilgisini çekmemesi, oysaki böyle bir konuda daha fazla katılımcı olabilirdi.

    • At 2009.03.28 15:58, Berkant said:

      Güzel bir makele olmuş devamını bekliyorum.

      • At 2009.03.30 20:04, Fatih Tolga Ata said:

        Sağolun. Devamını getirmeyi ben de çok istiyorum ama her zaman yazamıyorum. Özellikle bu konuda çok araştırma yapmam gerekiyor. Yakında devamı gelecek inş.

        • At 2009.04.16 15:43, mirat can bayrak said:

          Çok güzel bir yazı olmuş ellerinize sağlk

          • At 2009.05.31 13:13, Hasan Alper Öcalan said:

            Gerçekten çok yararlı bir yazı olmuş, tebrik ederim. Bende bu konuya baya ilgisi olan birisiyim. Size birkaç soru sormak ve danışmak isterim. Mail adresimden bana ulaşabilirseniz çok sevinirim, sitede iletişim bölümü bulamadım.

            • At 2009.06.06 11:16, Anonim said:

              dewamini en kisa zamanda bekleriz

              • At 2009.07.30 16:45, AhmetM said:

                güzel yazı ama bu konular çok uzun
                biz bir C derleyicisi yapmıştık zamanında
                ordan bu konuları iyi biliyorum

                • At 2012.03.13 00:01, colddeath said:

                  Bana bu yaptığın kodları atabilirmisin? Çok ihtiyacım var da.

                  • At 2012.04.22 14:03, mehmet said:

                    kardeşim heralde sende c derleyicisi yapıyorsun.,text dosyasını nasıl okuttuğunu öğrendinmi? ben tanımlama yapabiliyorum ama onu okutamıyorum. yardımcı olursan sevinirim

                  • At 2012.04.22 14:01, mehmet said:

                    merhabalar kardeşim, benimde bu sene C derleyicisi yapma ödevim war biraz yardımcı olursan çok sevinirim.

                  • At 2009.08.13 02:56, Tuna said:

                    Öncelikle çalışmanızı paylaştığınız için size teşekkür ederim. Derleyici ve yorumlayıcı programcılığı zahmetli olabilecek fakat çok çok eğlenceli bir iştir, benimle bu heyecanı paylaşan insanların varlığı bilmek mutlu edici. Bununla beraber iş bir derleyici üretimine geldiğinde bazı gerçeklere değinmek istiyorum. Sizinde belirtiğiniz gibi insanlığın bu alanda ki mevcut bilgi birikimi 1970 lerden beri bir hayli genişlemiştir. El yazımı sade bir yorumlayıcı veya biraz daha zorlayıcı olmakla beraber derleyici yazmak temel olarak çok zor bir iş olmasa da belirttiğim gibi modern derleyici teknolojisi oldukça ilerlemiş olduğundan pratikte üzerinde iş üretilebilecek ve mevcut alternatiflerine tercih edilebilme olasılığını hedefleyen bir projeyi tamamlamak oldukça büyük bir çaba ve yatırım(zaman, para vs.) gerektirmektedir. Okuduğum bir iki kaynakta bu alanda büyük deneyim sahibi olan kişiler çoğu durumda bir yorumlayıcı veya derleyicini yazımının onun destek kütüphanelerinin yazımından bir hayli daha kolay ve düşük maliyetli bir iş olduğunu söylüyorlar. Bu demek oluyor ki derleyici yazımı işin yalnızca bir etabını oluşturuyor(ve nisbeten basit). Bana kalırsa iş üretmeyi amaçlayan bir dil ve ona bağlı olarak platform üretmek günümüzde tek bir kişi tarafından uygulanması pek de olası gözükmeyen bir iş. Fakat bunun yanında doğru bir proje ile yola çıkılıp, bu proje doğru bir şekilde duyurulabilirse onlarca başarı örneği gibi (php, python, groovy, ruby vs.) bir yerlerlere gelinmesi de olası. Tüm bunlara ek olarak herşeyi bir kenara bırakırsak eğer, pratikte çok kullanım alanı bulunmasa da yinede yorumlanan veya derlenen bir dil ve onun çalışma ortamını geliştirmek, test etmek ve onunla oynamak çok çok zevkli bir iş ve bence uykusuz geçen yüzlerce geceye değer 🙂

                    • At 2009.09.26 15:18, mustafa sağat said:

                      güzel bir konuya değinmişsin eline saglik. Bir ara bende kaynak ariyordum fakat umudu kesmistim . Türkçe bir siteden bu bilgilere ulaşmak cok guzel bir duygu.

                      • At 2009.11.01 20:44, Serkan said:

                        Devamınıda olmasını isterdim.. Derleyici Tasarımı konusuda Tek Türkçe Kaynak bu Googleda arattım Türkçe olarak sadece bu cıktı.. Cok kotu bir durum. Türkçe kaynaklarımız cok az.
                        Umarım Devamıda gelir.
                        Yapay zeka konusunda Yapmak istedigim bir Dil var. Ve nasıl yapıcagımı bilmiyorum. Eger bu konuda bana yardımcı olursan Sevinirim. serkan.krks ([at]) gma il . com

                        • At 2009.11.10 12:03, leyla said:

                          Bilgiler bir az daha artarsa ,çox iyi olur

                          • At 2010.02.23 12:43, Ozan Çakin said:

                            Gerçekten temeli sağlam atabilecek bir makale olmuş..
                            Çalışmalarınızda başarılar dilerim.

                            • At 2010.04.18 21:59, burhan said:

                              emeğinize sağlık güzel bir makale olmuş, keşke devamını da getirebilseydiniz. . .

                              • At 2010.04.21 16:31, Fatih Tolga Ata said:

                                Ben de isterdim fakat şu sıralarda vakit bulmak gerçekten çok zor. İnş. önümüzdeki günlerde siteye vakit ayırmaya çalışacağım.

                                • At 2010.05.04 14:24, Sercan TEK said:

                                  Konu o kadar ilgimi Çekti Ki inanırmısınız 2 kere soluksuz okudum.. Gerçekten çok güzel bir konu seçmişiniz.. Bende derleyici üzerinde çalışıyorum.. PIC programla derleyicisi.. ama öncelikle PIC ASM öğrenmeliyim.. Oluşturduğum dili Assembly diline dönüştürüp derleteceğim.. fakat assembly dallanarak çalışan bir dil.. o yüzden bazı problemler çıkıyor.. Fonksiyonel bir dili dallanarak çalıştıran bir dile çevirmek zahmetli bir iş.. ama aşacağıma inanıyorum… çoğu PIC dili ASM dönüştürülüyor.. neyse fazla uzatmayayım..Yazınızın devamını sabırsızlıkla bekliyorum.. Aslında Örnek Kodlarla açıklamanız çok güzel olurdu.. Mantık olarak kod yapısı ve açıklama olunca anlaşılması kolay oluyor..Delphi Kullanıcısıyım ve çoğu makalenizde Delphi Dilini Gördüm gerçekten güzel anlatmışınız elinize sağlık…

                                  • At 2010.09.29 20:03, büşra said:

                                    güzel olmuş tşk ama intermediate code Gen den sonrası yok devamını açıklarsanız sevinirim kolay gelsin : )))

                                    • At 2010.10.26 19:43, gülsüm said:

                                      faydali olmuş, teşekkür ediyorum. Ayrica kullandiğiniz kaynaklari ayrintisiyla vermeniz cok yararlı oldu.

                                      • At 2010.12.30 15:01, hilkat said:

                                        oncelıkle elınıze saglık..ama boyle bı calışmanın devamının olmaması açıkcası beni üzdü:( devamının gelmesını ümid ederimm… iyi çalışmalar..

                                        • At 2011.01.09 13:14, Fatih Tolga Ata said:

                                          Sağolun. Yüksek lisans ve askerlik araya girince diyezon ile ilgilenemez oldum. Askerden sonra ilgilenmeye çalışacağım. Şafak 128 🙂

                                          • At 2011.03.07 00:30, matrix said:

                                            Makale çok güzel, lütfen devamını bekliyoruz.

                                            • At 2011.03.27 14:57, Fatih Tolga Ata said:

                                              Teşekkürler. Devamı doğan güneşten sonra. Şafak 51 🙂

                                              • At 2011.12.09 14:18, Ahmet Yeşilçimen said:

                                                Teşekkür Ederim Hocam Allah Razı Olsun.

                                                • At 2012.04.23 18:56, mehmet said:

                                                  EE SONRA? BUNLARI YAZINCA BİLGİSAYAR DERLİYORMU?? HAYIR. BOŞ YAZMIŞIN

                                                  • At 2012.06.02 13:25, kara said:

                                                    Keşke yazdıklarınız başladığı gibi bitseymiş, güzel bilgiler vermişsiniz ama devamı gelir diye ümit etmek bile zorlaşıyor bu saatten sonra.

                                                    • At 2012.08.01 21:08, Fatih Tolga Ata said:

                                                      Hepiniz çok haklısınız, böyle yarım bırakmak benim de içime hiç sinmedi. Derleyiciler ile ilgili onca araştırma, kitap, vs.. okudum. Ama bilmek ile bildiklerini karşıya aktarmak arasında dağlar kadar fark var. Bir makale yazarken gerçekten zaman ve emek harcıyorum. Çok iyi bildiğim bir konuyu bile anlatırken yanı başımda bir referans her zaman açık olur ve kontrol ederim. Özellikle böylesine derin bir konuda hata yapmadan aktarmak önemli. Ben şu anda bu makaleleri rahat rahat yazdığım zamanlardaki gibi bir üniversite öğrencisi değilim. Istanbul’da çalışanlar ne demek istediğimi iyi idrak edebilirler.
                                                      Şu anda öncelikli olarak bu makale serisini bitirmeyi planlıyorum, inşaallah. Ama yakın zamanda bir şey beklemeyin.

                                                      • At 2013.08.31 08:01, gowher said:

                                                        Sagbolun hocam bu konuda ben chok merakliydim hala merakliyim oyuzden dersleri nekadar chabuk verirseniz okadar sevinirdim

                                                        • At 2013.12.14 09:58, Burak said:

                                                          merhaba.

                                                          üst düzey bilgiler veriyorsunuz pek çoğundan kendi çapımda istifade ettim.
                                                          ama beni üzen duru m bu kadar bilgili insanlar var iken gerçekten birşeyleri yapma k adına oluşturulmuş gruplar göremiyorum ülkemizde.

                                                          genelde para peşinde koşuyor insanlar.çalışana kadar uğraşıyor yazdığı kod ile ne yaptığından bile haberi olmuyor çoğunun!.

                                                          umarım derleyici konusundan daha ileri bilgiler de verirsiniz.

                                                          çalışmalarınızda başarı ve ilminizin artması dileğiyle..
                                                          saygılar.

                                                          Burak

                                                          • At 2015.07.09 17:29, Ahmet Yeşilçimen said:

                                                            Hocam 2009 yazmıssınız yıllar önce okudum yıl oldu 2015 6 yıl olmuş 2. yazıyı bekliyoruz artık yazın lütfen ve ricam mesajıma cevap vermeniz 🙂

                                                            • At 2015.07.10 23:57, Kaan said:

                                                              Merhaba,

                                                              Öncelikle bu yazıyı yazdığınız için size çok teşekkür ederim. İnternette derleyici tasarımı ile ilgili en doyurucu bilgiyi veren bu site sanırım. Benim sormak istediğim birkaç şey var. Konu biraz eski ama yanıtlayacağınızı umuyorum. İnternette bulduğum kitapların çoğu 800 – 1200 sayfa arası ve açıkçası gözüm korktu. Matematik ve Fizik bilgim yok denecek kadar az. Vaktinizi almamak için fazla uzatmadan sorularıma geçiyorum.

                                                              * Derleyici Tasarımı için Matematik bilgisi gerekir mi? Gerekirse ne kadar bilmemiz gerekir? (Hangi konuları)

                                                              * Derleyici Tasarımı için Automata teorisini bilmemiz gerekiyor mu? Yoksa bu opsiyonel mi?

                                                              * İngilizce bilmeden (Temel seviye hariç) derleyici yazmak mümkün mü?

                                                              • At 2016.07.14 12:36, M.selim Erkühük said:

                                                                Hocam yazının devamı gelecek mi?Gercekten guzel anlatıyorsunuz.

                                                                (Required)
                                                                (Required, will not be published)