Derleyici nedir?
Derleyici nedir? Bir derleyici nasıl çalışır?Derleyici nedir?
Derleyici nedir?
Derleyici, bir programlama dilinin kaynak kodunu makine koduna, bayt koduna veya başka bir programlama diline çeviren özel bir programdır. Kaynak kodu genellikle Java veya C++ gibi üst düzey, insan tarafından okunabilen bir dilde yazılır. Bir programcı kaynak kodunu bir kod düzenleyicisine veya bir düzenleyici içeren entegre geliştirme ortamına (IDE) yazar ve kaynak kodunu bir veya daha fazla metin dosyasına kaydeder. Kaynak programlama dilini destekleyen bir derleyici, dosyaları okur, kodu analiz eder ve onu hedef platforma uygun bir formata çevirir.
Kaynak kodunu makine koduna çeviren derleyiciler, belirli işletim sistemlerini ve bilgisayar mimarilerini hedefler. Bu tür çıktıya bazen nesne kodu adı verilir (bu, nesne yönelimli programlamayla ilgili değildir). Çıktısı alınan makine kodu tamamen ikili bitlerden (1'ler ve 0'lar) oluşur, böylece hedef bilgisayarlardaki işlemciler tarafından okunabilir ve yürütülebilir. Örneğin, bir derleyici Linux x64 platformu veya Linux ARM 64 bit platformu için makine kodunun çıktısını alabilir.
Bazı derleyiciler kaynak kodunu makine kodu yerine bayt koduna çevirebilir. İlk olarak Java programlama dilinde tanıtılan Bayt kodu, Java sanal makinesi (JVM) veya bayt kodu yorumlayıcısını çalıştıran herhangi bir sistem platformunda çalıştırılabilen bir ara dildir. JVM veya yorumlayıcı bayt kodunu donanım işlemcisi tarafından yürütülebilecek talimatlara dönüştürür. JVM aynı zamanda bayt kodunun tam zamanında derleyici tarafından yeniden derlenmesini de mümkün kılar.
Bazı derleyiciler kaynak kodunu makine kodu veya bayt kodu yerine başka bir üst düzey programlama diline çevirebilir. Bu tür derleyiciye aktarıcı, aktarıcı derleyici, kaynaktan kaynağa çevirici olarak da adlandırılabilir veya başka bir isimle anılabilir. Örneğin, bir geliştirici COBOL'u Java'ya dönüştürmek için bir aktarıcı kullanabilir.
Kaynak dili veya çıktı türü ne olursa olsun, derleyicinin çıktı kodunun mantığının her zaman giriş koduyla eşleştiğinden ve kod dönüştürülürken hiçbir şeyin kaybolmadığından emin olması gerekir. Derleyici, tam anlamıyla bir çevirmendir ve çıktının doğru olduğundan ve tüm orijinal mantığı koruduğundan emin olmalıdır.
Bir derleyici nasıl çalışır?
Derleyicilerin kaynak kodunu analiz etmek ve çıktı koduna dönüştürmek için kullandıkları yöntemler farklılık gösterir. Farklılıklarına rağmen genellikle aşağıdaki adımları gerçekleştirirler:
Sözcük analizi: Derleyici kaynak kodunu, koddaki belirli kalıpları temsil eden ayrı kod parçaları olan sözcük birimlerine böler. Sözdizimi ve anlamsal analizlere hazırlık amacıyla sözcükbirimler daha sonra tokenleştirilir.
Sözdizimi analizi: Derleyici, kaynak dilin kurallarına göre kodun sözdiziminin doğru olduğunu doğrular. Bu işleme aynı zamanda ayrıştırma da denir. Bu adım sırasında derleyici genellikle belirli kod öğelerinin mantıksal yapılarını temsil eden soyut sözdizimi ağaçları oluşturur.
Semantik analiz: Derleyici kodun mantığının geçerliliğini doğrular. Bu adım, kodun doğruluğunu doğrulayarak sözdizimi analizinin ötesine geçer. Örneğin anlamsal analiz, değişkenlere doğru türlerin atanıp atanmadığını veya doğru şekilde bildirilip bildirilmediğini kontrol edebilir.
IR kodu oluşturma: Kod üç analiz aşamasının tümünü geçtikten sonra derleyici, kaynak kodun bir ara temsilini (IR) oluşturur. IR kodu, kaynak kodunun farklı bir formata çevrilmesini kolaylaştırır. Ancak kaynak kodunu her açıdan doğru bir şekilde temsil etmeli, hiçbir işlevi atlamamalıdır.
Optimizasyon: Derleyici, son kod üretimine hazırlık olarak IR kodunu optimize eder. Optimizasyon türü ve kapsamı derleyiciye bağlıdır. Bazı derleyiciler kullanıcıların optimizasyon derecesini yapılandırmasına izin verir.
Çıkış kodu üretimi: Derleyici, optimize edilmiş IR kodunu kullanarak son çıktı kodunu oluşturur.
Derleyiciler bazen tercüman adı verilen programlarla karıştırılır. Her ne kadar ikisi benzer olsa da önemli açılardan farklılık gösterirler. Derleyiciler Java, C++, C# veya Swift gibi dillerde yazılmış kaynak kodunu analiz eder ve dönüştürür. Genellikle hedef ana bilgisayar sistemi tarafından yürütülebilecek makine kodunu veya bayt kodunu oluşturmak için kullanılırlar.
Tercümanlar IR kodu oluşturmaz veya oluşturulan makine kodunu kaydetmez. Kodu, önceden dönüştürmeden veya belirli bir platform için önceden hazırlamadan, çalışma zamanında her seferinde bir ifadeyi işlerler. Yorumlayıcılar Perl, PHP, Ruby veya Python gibi kodlama dillerinde yazılan kodlar için kullanılır.