Derleyici (Compiler) herhangi bir bilgisayar dilinde yazılmış kodu başka bir bilgisayar diline çeviren programlara veya program setlerine verilen addır. Derleyiciler günümüzde genelde yüksek seviyeli bir programlama dilinde yazılmış kodu ikili makine koduna çevirmekte kullanılırlar. Fakat makine kodunu programlama dilindeki koda veya bir programlama dilinde yazılmış kodu başka bir dile çevirmeye yarayan derleyiciler de mevcuttur. Fakat derleyiciler en çok çalıştırılabilir dosya oluşturmak için kullanılmaktadırlar. Bir derleyiciden genel olarak şu işlemlerin hepsini yapması beklenir : sözcüksel analiz, ön işleme, ayrıştırma, semantik analiz, kod jenerasyonu ve kod optimizasyonu. Derleyiciden kaynaklanan program hataları çoğunlukla bulunması çok zor ve düzeltilmesi zor hatalardır, bu yüzden derleyici geliştiricileri derleyicilerinin hatasız çalışmasını sağlamaya çok vakit harcarlar.

Bilgisayar yazılımları uzun yıllar boyu çevirici dil (assembly language) sayesinde yazılmıştı. Bir derleyici yazmanın maliyetinin bir yazılımı farklı işlemci türlerinde kullanabilmenin maliyetinden daha düşük olduğunun farkedilmesi ile de, yüksek seviyeli diller icat edilmiş ve ilk derleyiciler ortaya çıkmaya başlamıştır. İlk derleyici de Amerikalı deniz subayı ve bilgisayar bilimcisi Grace Hopper tarafından 1952 yılında A-0 programlama dili için yazılmıştır. Bunun dışında FORTRAN ve COBOL gibi diller de farklı mimarilerde derlenebilen diller olarak ortaya çıkmışlardır. Ve bu derleyiciler çevirici dilde yazılmışlardır.

Derleyici yapımı ve optimizasyonu günümüzde bilgisayar mühendisliği ve bilgisayar bilimi bölümlerinde öğretilmektedir. Bu derslerde genellikle eğitim amaçlı bir programlama dilinin derleyicisinin de uygulanması yapılmaktadır.

Derleyiciler bugün kullandığımız makineden bağımsız yazılımların geliştirilmesini sağlamışlardır. İlk yüksek seviyeli dil olan FORTRAN'ın geliştirilmesinden önce makine bağımlı çevirici dil (assembly language) yaygın bir şekilde kullanılmaktaydı. Çevirici dil aynı mimaride daha çok yeniden kullanılabilen ve yer değiştirebilen program oluşturmasına rağmen bu programı başka bir donanım mimarisinde çalıştırabilmek için programı modifiye etmek veya baştan yeniden yazmak gerekliydi. Fakat FORTRANDAN sonra COBOL, C, BASIC yüksek seviyeli programlama dillerinin ortaya çıkmasıyla birlikte bilgisayar programcıları makineden bağımsız programlar yazabilmeye başladılar.

Derleyici yukarıda da bahsettiğimiz gibi yüksek seviyeli dilde yazılan programı makina koduna çevirmekle sorumludur. Derleyiciler üç temel kısımdan oluşur:

  1. Ön-son(Frontend) : Programın yazılan dilin kurallarına ve semantiklerine uygun bir şekilde yazılıp yazılmadığını kontrol eder. Burada dilin kurallarına uyan ve uymayan programlar belli olur, varsa hatalar rapor edilir, uyarılar verilir. Ön-son , orta-son için IR(intermediate representation) oluşturur.
  2. Orta-son (Middle-end): Bu kısım optimizasyonun yapıldığı yerdir. Yararsız ve ulaşılamayan kodlar silinir, sabit değerler bulunur. Orta-son da arka-son için IR oluşturur.
  3. Arka-son (Backend) : Orta-sondan gelen IR'yi istenen çeviri koduna dönüştürür. Değişkenler de registerlar için burada seçilir.

Şimdi de yazdığımız kaynak kodun nasıl çalıştırılabilir dosya haline geldiğini inceleyelim. Bu süreç de dört aşamada olur:

  1. Derleme : kaynak kod → yer değiştirebilir obje kodu
  2. Bağlama : bir çok yer değiştirebilir obje kodu ve kütüphaneler → tek bir adet ikili yer değiştirebilir kod
  3. Yükleme : yer değiştirebilir kod → mutlak ikili kod
  4. Çalıştırma : kontrol programın ilk talimatona geçer

Son olarak da derleme sürecini altı fazda inceleyelim :

  1. Sözcüksel analiz (tarama) : kaynak metin belirteçlere ayrılır.
  2. Sentaktik(sözdizimsel) analiz (ayrıştırma) : belirteçler sentaktik yapılara dönüştürülür.
  3. Semantik analiz : her bir sentaktik yapı için ara kod oluşturulur.
  4. Makine bağımsız optimizasyon : ara kod verimliliği artırmak için optimize edilir.
  5. Kod oluşturma : ara kod yer değiştirilebilir objeye çevrilir
  6. Makine bağımlı optimizasyon: makine kodu optimize edilir.

Bu yazımızda derleyicinin ne olduğu, kısaca tarihçesi, nelerden meydana geldiği, bir kaynak kodunun nasıl çalıştırılabilir dosyaya dönüştüğü ve derleme işleminin aşamalarından bahsettik. Bir dahaki yazıda görüşmek üzere!

Kaynaklar: