Derleyici Tasarımının Aşamaları Nelerdir?
Derleyici çeşitli aşamalarda çalışır, her aşama kaynak programı bir gösterimden diğerine dönüştürür. Her aşama önceki aşamasından girdi alır ve çıktısını derleyicinin bir sonraki aşamasına besler.
Bir derleyicide 6 aşama vardır. Bu aşamanın her biri, yüksek seviyeli dili makine kodunu dönüştürmeye yardımcı olur. Bir derleyicinin aşamaları şunlardır:
- Sözcüksel analiz
- Sözdizimi analizi
- Anlamsal analiz
- Ara kod üreteci
- Kod iyileştirici
- Kod üreteci
Tüm bu aşamalar, kaynak kodunu belirteçlere bölerek, ayrıştırma ağaçları oluşturarak ve kaynak kodunu farklı aşamalara göre optimize ederek dönüştürür.
Bu eğitimde şunları öğreneceksiniz:
- Derleyici Tasarımının Aşamaları Nelerdir?
- Aşama 1: Sözcüksel Analiz
- Aşama 2: Sözdizimi Analizi
- 3. Aşama: Anlamsal Analiz
- 4. Aşama: Ara Kod Oluşturma
- Aşama 5: Kod Optimizasyonu
- 6. Aşama: Kod Üretimi
- Sembol Tablosu Yönetimi
- Hata İşleme Rutini:
Aşama 1: Sözcüksel Analiz
Sözcüksel Analiz, derleyicinin kaynak kodunu taradığı ilk aşamadır. Bu işlem soldan sağa, karakter karakter olabilir ve bu karakterleri simgeler halinde gruplandırabilir.
Burada, kaynak programdan gelen karakter akışı, simgeleri tanımlanarak anlamlı diziler halinde gruplandırılır. İlgili biletlerin sembol tablosuna girişini yapar ve bu jetonu bir sonraki aşamaya geçirir.
Bu aşamanın temel işlevleri şunlardır:
- Bir kaynak koddaki sözcük birimlerini tanımlayın
- Sözcük birimlerini sabitler, ayrılmış sözcükler gibi sınıflara ayırın ve bunları farklı tablolara girin. Kaynak programdaki yorumları yok sayacak
- Dilin bir parçası olmayan jetonu tanımlayın
Örnek :
x = y + 10
Jetonlar
X | tanımlayıcı |
= | Atama operatörü |
Y | tanımlayıcı |
+ | Toplama operatörü |
10 | Numara |
Aşama 2: Sözdizimi Analizi
Sözdizimi analizi, koddaki yapıyı keşfetmekle ilgilidir. Bir metnin beklenen biçime uyup uymadığını belirler. Bu aşamanın temel amacı, kaynak kodun programcı tarafından yazıldığından emin olmaktır.
Sözdizimi analizi, belirteçlerin yardımıyla ayrıştırma ağacını oluşturarak belirli programlama diline dayalı kurallara dayanır. Aynı zamanda kaynak dilin yapısını ve dilin gramerini veya sözdizimini belirler.
İşte bu aşamada gerçekleştirilen görevlerin bir listesi:
- Sözcüksel analizörden jetonlar edinin
- İfadenin sözdizimsel olarak doğru olup olmadığını kontrol eder
- Tüm sözdizimi hatalarını bildirin
- Ayrıştırma ağacı olarak bilinen hiyerarşik bir yapı oluşturun
Misal
Herhangi bir tanımlayıcı / sayı bir ifadedir
X bir tanımlayıcıysa ve y + 10 bir ifadeyse, o zaman x = y + 10 bir ifadedir.
Aşağıdaki örnek için ayrıştırılmış ağacı düşünün
(a+b)*c
Ayrıştırma Ağacı'nda
- İç düğüm: bir operatör dosyalanmış ve çocuklar için iki dosya ile kayıt
- Yaprak: 2 / daha fazla alan içeren kayıtlar; jeton için biri ve jetonla ilgili diğer bilgiler
- Program bileşenlerinin anlamlı bir şekilde birbirine uyduğundan emin olun
- Tür bilgilerini toplar ve tür uyumluluğunu denetler
- Kontrol işlenenlerine kaynak dil tarafından izin verilir
3. Aşama: Anlamsal Analiz
Anlamsal analiz, kodun anlamsal tutarlılığını kontrol eder. Verilen kaynak kodun anlamsal olarak tutarlı olduğunu doğrulamak için sembol tablosuyla birlikte önceki aşamanın sözdizimi ağacını kullanır. Ayrıca kodun uygun bir anlam taşıyıp taşımadığını da kontrol eder.
Semantic Analyzer, Tür uyumsuzluklarını, uyumsuz işlenenleri, uygun olmayan argümanlarla çağrılan bir işlevi, bildirilmemiş bir değişkeni vb. Kontrol edecektir.
Anlamsal analiz aşamasının işlevleri şunlardır:
- Toplanan tür bilgilerini saklamanıza ve bunları sembol tablosuna veya sözdizimi ağacına kaydetmenize yardımcı olur
- Tip kontrolü yapmanızı sağlar
- İstenilen işlemi karşılayan kesin tip düzeltme kurallarının bulunmadığı tür uyumsuzluğu durumunda, bir anlamsal hata gösterilir.
- Tip bilgilerini toplar ve tip uyumluluğunu denetler
- Kaynak dilin işlenenlere izin verip vermediğini kontrol eder.
Misal
float x = 20.2;float y = x*30;
Yukarıdaki kodda, semantik analizör, çarpma işleminden önce 30.0'da kayan 30 tamsayısını yazacaktır.
4. Aşama: Ara Kod Oluşturma
Anlamsal analiz aşaması derleyicide bittiğinde, hedef makine için ara kod üretir. Bazı soyut makineler için bir programı temsil eder.
Ara kod, yüksek seviyeli ve makine seviyeli dil arasındadır. Bu ara kodun, onu hedef makine koduna çevirmeyi kolaylaştıracak şekilde üretilmesi gerekir.
Ara Kod oluşturmada İşlevler:
- Kaynak programın anlamsal gösteriminden üretilmelidir.
- Çeviri sürecinde hesaplanan değerleri tutar
- Ara kodu hedef dile çevirmenize yardımcı olur
- Kaynak dilin öncelik sırasını korumanıza izin verir
- Talimatın doğru sayıda işlenenini tutar
Misal
Örneğin,
total = count + rate * 5
Adres kodu yöntemi yardımıyla ara kod:
t1 := int_to_float(5)t2 := rate * t1t3 := count + t2total := t3
Aşama 5: Kod Optimizasyonu
Bir sonraki aşama, kod optimizasyonu veya Ara koddur. Bu aşama, gereksiz kod satırını kaldırır ve kaynakları israf etmeden programın yürütülmesini hızlandırmak için ifadelerin sırasını düzenler. Bu aşamanın temel amacı, daha hızlı çalışan ve daha az yer kaplayan bir kod oluşturmak için ara kodu geliştirmektir.
Bu aşamanın temel işlevleri şunlardır:
- Yürütme ve derleme hızı arasında bir denge kurmanıza yardımcı olur
- Hedef programın çalışma süresini iyileştirir
- Hala orta düzeyde sunumda olan aerodinamik kod üretir
- Ulaşılamayan kodu kaldırmak ve kullanılmayan değişkenlerden kurtulmak
- Döngüden değiştirilmeyen ifadelerin kaldırılması
Misal:
Aşağıdaki kodu düşünün
a = intofloat(10)b = c * ad = e + bf = d
Olabilir
b =c * 10.0f = e+b
6. Aşama: Kod Üretimi
Kod üretimi, bir derleyicinin son ve son aşamasıdır. Kod optimizasyon aşamalarından girdiler alır ve sonuç olarak sayfa kodunu veya nesne kodunu üretir. Bu aşamanın amacı, depolamayı tahsis etmek ve yeniden yerleştirilebilir makine kodu oluşturmaktır.
Ayrıca değişken için bellek konumları tahsis eder. Ara koddaki talimatlar, makine talimatlarına dönüştürülür. Bu aşama, optimize veya ara kodu hedef dile kapsar.
Hedef dil makine kodudur. Bu nedenle, tüm hafıza yerleri ve kayıtları da bu aşamada seçilir ve tahsis edilir. Bu aşamada üretilen kod, girdileri almak ve beklenen çıktıları üretmek için yürütülür.
Misal:
a = b + 60.0
Muhtemelen kayıtlara çevrilecektir.
MOVF a, R1MULF #60.0, R2ADDF R1, R2
Sembol Tablosu Yönetimi
Bir sembol tablosu, tanımlayıcının nitelikleri için alanlarla birlikte her bir tanımlayıcı için bir kayıt içerir. Bu bileşen, derleyicinin tanımlayıcı kaydı aramasını ve hızlı bir şekilde almasını kolaylaştırır. Sembol tablosu ayrıca kapsam yönetimi için size yardımcı olur. Sembol tablosu ve hata işleyici, tüm aşamalarla etkileşime girer ve buna göre sembol tablosu güncellenir.
Hata İşleme Rutini:
Derleyici tasarımında, aşağıda verilen tüm aşamalarda işlem hatası oluşabilir:
- Sözcüksel analizci: Yanlış yazılmış belirteçler
- Sözdizimi çözümleyicisi: Eksik parantez
- Ara kod üreteci: Bir operatör için eşleşmeyen işlenenler
- Code Optimizer: İfadeye ulaşılamadığında
- Code Generator: Ulaşılamayan ifadeler
- Sembol tabloları: Birden çok beyan edilmiş tanımlayıcı hatası
En yaygın hatalar, taramada geçersiz karakter dizisi, türdeki geçersiz simge dizileri, kapsam hatası ve anlamsal analizde ayrıştırmadır.
Hata, yukarıdaki aşamaların herhangi birinde karşılaşılabilir. Hataları bulduktan sonra, derleme işlemine devam etmek için aşamanın hatalarla uğraşması gerekir. Bu hataların, derleme işlemini gerçekleştirmek için hatayı işleyen hata işleyicisine bildirilmesi gerekir. Genellikle hatalar mesaj şeklinde bildirilir.
Özet
- Derleyici çeşitli aşamalarda çalışır, her aşama kaynak programı bir gösterimden diğerine dönüştürür.
- Derleyici tasarımının altı aşaması şunlardır: 1) Sözcüksel analiz 2) Sözdizimi analizi 3) Anlamsal analiz 4) Ara kod üreteci 5) Kod iyileştirici 6) Kod Oluşturucu
- Sözcüksel Analiz, derleyicinin kaynak kodunu taradığı ilk aşamadır.
- Sözdizimi analizi tamamen metindeki yapıyı keşfetmekle ilgilidir
- Anlamsal analiz, kodun anlamsal tutarlılığını kontrol eder
- Anlamsal analiz aşaması derleyici üzerinden bittiğinde, hedef makine için ara kod üretin
- Kod optimizasyon aşaması, gereksiz kod satırını kaldırır ve ifadelerin sırasını düzenler
- Kod oluşturma aşaması, kod optimizasyon aşamasından girdi alır ve sonuç olarak sayfa kodunu veya nesne kodunu üretir.
- Bir sembol tablosu, tanımlayıcının nitelikleri için alanlarla birlikte her tanımlayıcı için bir kayıt içerir.
- Hata işleme rutini, birçok aşamada hataları ve raporları ele alır