Derleyici, bir programlama dilinde yazılmış olan kodları, kaynak kod olarak adlandırılan düz metin dosyalarını, genellikle makine diline veya başka bir düşük seviyeli dile çeviren bir yazılım aracıdır. Bu işlem genellikle bir adım olarak adlandırılır ve sonucunda elde edilen dosyaya genellikle “derlenmiş kod” veya “hedef kod” denir. Derleyiciler, yazılım geliştiricilerin yazdığı yüksek seviyeli programlama dilleriyle yazılmış olan insan tarafından okunabilir kaynak kodları, bilgisayarların anlayabileceği düşük seviyeli makine kodlarına çevirirler.
Adım
- Sözdizimi Analizi: Kaynak kodun sözdizimi (syntax) incelenir ve dilin kurallarına uygunluğu kontrol edilir.
- Semantik Analiz: Kodun anlamı ve mantığı incelenir. Değişkenlerin doğru şekilde kullanılıp kullanılmadığı, fonksiyon çağrılarının geçerli olup olmadığı gibi kontrol edilir.
- Ara Kod Üretimi: Derleyici, genellikle ara bir dil veya ara kod üretir. Bu, derleyicinin iç işleyişini kolaylaştırabilir ve optimizasyon olanakları sunabilir.
- Optimizasyon: Ara kod, performansı artırmak için optimize edilebilir. Bu aşamada, kodun daha etkili bir şekilde çalışabilmesi için çeşitli optimizasyonlar yapılır.
- Kod Üretimi: En son aşama, makine diline veya başka bir düşük seviyeli dile çevrilen nihai hedef kodun üretildiği aşamadır.
Derleyicilerin Temel İşlevleri
- Dil Dönüşümü: Derleyiciler, genellikle yüksek seviyeli bir programlama dilinde yazılmış kodu, daha düşük seviyeli bir dildeki karşılığına çevirir. Bu, insanların yazdığı kodun, bilgisayar tarafından anlaşılabilir ve yürütülebilir bir form almasını sağlar.
- Hata Kontrolü: Derleyiciler, kaynak kodun hatalarını tespit eder ve rapor eder. Bu, yazılım geliştiricilerin hataları düzeltmelerine ve güvenilir programlar oluşturmalarına yardımcı olur.
- Optimizasyon: Derleyiciler, programın çalışma süresini ve kaynak kullanımını artırmak için çeşitli optimizasyon tekniklerini uygular. Bu, yazılımın daha etkili ve verimli olmasını sağlar.
- Belgeleme: Derleyiciler, hedef kodu belgeleyebilirler, bu da geliştiricilere programın nasıl çalıştığını anlamalarına yardımcı olabilir.
Derleyicilerin Türleri
- Tek Geçişli Derleyiciler: Kaynak kodu sadece bir kez okuyup analiz ederek hedef koda çeviren derleyicilerdir. Bu derleyicilerin temel avantajı, kaynak kodun bir kez okunması nedeniyle genellikle daha hızlı olmalarıdır. Ancak, tek geçiş sırasında yapılan optimizasyonlar genellikle sınırlıdır, çünkü derleyici tüm bilgiye tek bir geçişte ulaşır. Bu tür derleyiciler, genellikle bellek kullanımı ve hız açısından avantajlıdır, ancak daha karmaşık optimizasyonları uygulama konusunda kısıtlıdırlar.
- Çok Geçişli Derleyiciler: Kaynak kodunu birden fazla geçişten geçirerek çeviren derleyicilerdir. Her geçiş genellikle belirli bir görevi yerine getirir ve genellikle şu aşamalardan oluşur:
- Sözdizimi Analizi: Kaynak kodun sözdizimini kontrol etme aşaması.
- Semantik Analiz: Kodun anlamını ve mantığını kontrol etme aşaması.
- Ara Kod Üretimi: Ara bir dil veya ara kod üretilmesi.
- Optimizasyon: Kodun performansını artırmak için yapılan optimizasyon işlemleri.
- Kod Üretimi: Hedef koda çevrilen nihai kodun üretilmesi.
Çok geçişli derleyiciler, her aşamada ayrıntılı bilgi toplama ve analiz etme olanağına sahiptir. Bu, daha kapsamlı optimizasyonların uygulanmasına ve daha karmaşık kod yapılarının daha etkili bir şekilde çevrilmesine olanak tanır. Ancak, bu tür derleyiciler genellikle daha fazla bellek kullanabilir ve daha uzun sürebilir.
Özetle, tek geçişli derleyiciler hızlı çalışma avantajına sahipken, çok geçişli derleyiciler daha fazla optimizasyon olanakları sunabilir ancak daha fazla kaynak kullanabilir ve daha uzun sürebilir.
Derleyicilerin Avantajları:
- Performans: Derlenmiş programlar, genellikle yorumlanmış programlara göre daha hızlı çalışır çünkü derleme aşamasında yapılan optimizasyonlar sayesinde daha verimli hale gelirler.
- Güvenlik: Derleyiciler, hata kontrolü ve güvenlik testleri ile programın daha güvenli olmasını sağlarlar, potansiyel sorunları önceden tespit edebilirler.
- Bağımsızlık: Derlenmiş programlar, genellikle herhangi bir yorumlayıcıya ihtiyaç duymadan doğrudan çalışabilirler.
Derleyicilerin Dezavantajları:
- Taşınabilirlik: Derlenmiş programlar genellikle belirli bir platforma veya işletim sistemine bağlıdır, bu da taşınabilirliklerini azaltabilir.
- Esneklik: Derlenmiş programlar değiştirilmek istendiğinde tekrar derlenmesi gerekir, bu da esnekliklerini azaltabilir.
- Disk Alanı ve Bellek Kullanımı: Derlenmiş programlar genellikle daha büyük boyuttadır, bu da daha fazla disk alanı ve bellek kullanımına neden olabilir.
Örnekler:
Bir C programını derleyen GCC (GNU Compiler Collection) gibi geniş bir derleyici ailesi bulunmaktadır. Aynı zamanda, Java programlarını derleyen javac gibi derleyiciler de mevcuttur. Bu derleyiciler, ilgili programlama dillerinde yazılmış kaynak kodları derleyerek, platforma özgü makine kodlarına veya ara kodlara çevirirler.




