bir derleyici bir program insan tarafından okunabilir olan kaynak kodu çalıştırılabilir makine koduna dönüştürün. Bunu başarıyla yapabilmek için, insan tarafından okunabilen kodun sözdizimi hangi programlama dilinde yazıldığı kuralları. Derleyici yalnızca bir programdır ve kodunuzu sizin için düzeltemez. Bir hata yaparsanız, sözdizimini düzeltmeniz gerekir, yoksa derlenmez.
Kodu Derlerken Ne Olur?
Bir derleyicinin karmaşıklığı, dilin sözdizimine ve ne kadar soyutlamaya bağlı o programlama dili sağlar. Bir C derleyicisi C ++ veya C # için bir derleyiciden çok daha basittir.
Sözcüksel Analiz
Derleme yaparken, derleyici ilk olarak bir kaynak kod dosyasından bir karakter akışı okur ve sözcük belirteçleri akışı oluşturur. Örneğin, C ++ kodu:
int C = (A * B) +10;
şu jetonlar olarak analiz edilebilir:
- "int" yazın
- değişken "C"
- eşittir
- LEFTBRACKET
- değişken "A"
- zamanlar
- değişken "B"
- RIGHTBRACKET
- artı
- gerçek "10"
Sözdizimsel Analiz
Sözcüksel çıktı, derleyicinin girdinin geçerli olup olmadığına karar vermek için dilbilgisi kurallarını kullanan sözdizimsel analizör kısmına gider. olmadıkça
değişkenler A ve B daha önce ilan edilmiş ve kapsam dahilindedir, derleyici şunları söyleyebilir:- 'A': bildirilmemiş tanımlayıcı.
Beyan edilmiş ancak başlatılmamışlarsa. derleyici bir uyarı verir:
- başlatılmadan kullanılan yerel değişken 'A'.
Derleyici uyarılarını hiçbir zaman göz ardı etmemelisiniz. Kodunuzu garip ve beklenmedik şekillerde kırabilirler. Derleyici uyarılarını her zaman düzeltin.
Bir veya İki Geçiş mi?
Bazı programlama dilleri yazılır, böylece bir derleyici kaynak kodunu sadece bir kez okuyabilir ve makine kodunu oluşturabilir. paskal böyle bir dildir. çok derleyiciler en az iki geçiş gerektirir. Bazen, bunun ileri bildirimleri nedeniyle fonksiyonlar veya sınıflar.
C ++ 'da bir sınıf bildirilebilir, ancak daha sonraya kadar tanımlanamaz. Derleyici, sınıfın gövdesini derleyene kadar sınıfın ne kadar belleğe ihtiyacı olduğunu hesaplayamaz. Doğru makine kodunu oluşturmadan önce kaynak kodunu yeniden okumalıdır.
Makine Kodu Üretme
Derleyicinin sözcüksel ve sözdizimsel analizleri başarıyla tamamladığı varsayılarak, son aşama makine kodu üretmektir. Bu, özellikle modern CPU'larda karmaşık bir süreçtir.
Derlenen hız yürütülebilir kodun mümkün olduğunca hızlı olması gerekir ve üretilen kodun kalitesine ve ne kadar optimizasyon istendiğine bağlı olarak büyük ölçüde değişebilir.
Çoğu derleyici, genellikle hızlı hata ayıklama derlemeleri ve yayımlanan kod için tam optimizasyon için bilinen optimizasyon miktarını belirtmenize izin verir.
Kod Üretimi Zor
Derleyici yazarı bir kod üreticisi yazarken zorluklarla karşılaşır. Birçok işlemci,
- Öğretim boru hattı
- İç önbelleğe.
Bir kod içindeki tüm talimatlar döngü içinde tutulabilir İşlemci önbellek, bu döngü CPU'nun ana RAM'den talimat alması gerektiğinden çok daha hızlı çalışır. CPU önbelleği, CPU yongasında yerleşik olarak bulunan ve ana RAM'daki verilerden çok daha hızlı erişilen bir bellek bloğudur.
Önbellek ve Kuyruklar
Çoğu CPU, çalıştırmadan önce CPU'nun önbelleğe talimatları okuduğu bir önceden getirme kuyruğuna sahiptir. Koşullu bir dal oluşursa, CPU kuyruğu yeniden yüklemelidir. Bunu en aza indirmek için kodun oluşturulması gerekir.
Birçok CPU'nun aşağıdakiler için ayrı parçaları vardır:
- Tam sayı aritmetiği (tam sayılar)
- Kayan nokta aritmetiği (kesirli sayılar)
Bu işlemler genellikle hızı artırmak için paralel olarak çalıştırılabilir.
Derleyiciler genellikle daha sonra olan nesne dosyalarına makine kodu oluşturur bağlantılı bir bağlayıcı program ile birlikte.