Derleyici İşlemlerinin Aşamaları: Örnekler, Süreç ve Adımlar

⚡ Akıllı Özet

Derleyicinin aşamaları, bir derleyicinin kaynak kodu makine koduna altı aşamada nasıl dönüştürdüğünü açıklar: sözcük analizi, sözdizimi analizi, anlamsal analiz, ara kod üretimi, kod optimizasyonu ve kod üretimi; tüm bu süreç sembol tablosu yönetimi ve hata işleme ile desteklenir.

  • 🔤 Sözcük Analizi: İlk aşamada kaynak kod taranır ve karakterler belirteçler halinde gruplandırılarak sembol tablosu doldurulur.
  • ???? Sözdizimi Analizi: Tokenler dilbilgisi kurallarına göre kontrol edilir ve bir ayrıştırma ağacına yerleştirilir.
  • Semantik Analiz: Derleyici, sözdizimi ağacını ve sembol tablosunu kullanarak tür uyumluluğunu ve anlamını doğrular.
  • 🔁 Orta seviye Code: Kolay çeviri için üç adresli kod gibi makineden bağımsız bir gösterim oluşturulur.
  • Optimizasyon: Programın daha hızlı ve daha küçük olması için gereksiz ve erişilemeyen kodlar kaldırılır.
  • 🖥️ Code Nesil: Son aşama, optimize edilmiş kodu hedef makine koduna dönüştürür ve kayıt defterleri ile belleği tahsis eder.

Derleyici Tasarımının Aşamaları Nelerdir?

derleyici çeşitli aşamalarda çalışır, her aşama kaynak programı bir temsilden diğerine dönüştürür. Her aşama bir önceki aşamadan girdi alır ve çıktısını derleyicinin bir sonraki aşamasına besler.
Bir derleyicide 6 aşama vardır. Bu aşamaların her biri, üst düzey dili makine koduna dönüştürmeye yardımcı olur. Bir derleyicinin aşamaları şunlardır:

  1. Sözcüksel analiz
  2. Sözdizimi analizi
  3. Anlamsal çözümleme
  4. Orta seviye kod üreteci
  5. Code iyileştirici
  6. Code jeneratör
Derleyicinin Aşamaları
Derleyicinin Aşamaları

Tüm bu aşamalar, kaynak kodunu tokenlere bölerek, ayrıştırma ağaçları oluşturarak ve kaynak kodunu farklı aşamalarla optimize ederek dönüştürür.

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 gerçekleştirilebilir ve bu karakterler jetonlar halinde gruplandırılabilir.
Burada kaynak programdan gelen karakter akışı, belirteçler tanımlanarak anlamlı diziler halinde gruplandırılır. İlgili biletlerin sembol tablosuna girişini yapar ve o tokenı bir sonraki aşamaya geçirir.
Bu aşamanın temel işlevleri şunlardır:

  • Kaynak kodundaki sözcük birimlerini tanımlama
  • 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ı yoksayacaktır
  • Dilin bir parçası olmayan belirteci tanımlayın

Örnek E-posta:
x = y + 10

Jeton

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 tamamen koddaki yapıyı keşfetmeyle ilgilidir. Bir metnin beklenen formata uyup uymadığını belirler. Bu aşamanın temel amacı programcının yazdığı kaynak kodun doğru olup olmadığından emin olmaktır.
Sözdizimi analizi, ayrıştırma ağacının belirteçler yardımıyla oluşturularak belirli programlama diline dayalı kurallara dayanmaktadır. Aynı zamanda kaynak dilin yapısını ve dilin gramerini veya sözdizimini de belirler.
Bu aşamada gerçekleştirilen görevlerin listesi aşağıda verilmiştir:

  • Sözcüksel analizciden belirteçler alın
  • İ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

Örnek E-posta

Herhangi bir tanımlayıcı/numara bir ifadedir
Eğer x bir tanımlayıcı ve y+10 bir ifade ise, x= y+10 bir ifadedir.
Aşağıdaki örnek için ayrıştırma ağacını göz önünde bulundurun

(a+b)*c

Sözdizimi Analizi Örneği

Ayrıştırma Ağacında

  • İç düğüm: operatör dosyasıyla kayıt ve çocuklar için iki dosya
  • Yaprak: 2/daha fazla alana sahip kayıtlar; biri jeton ve jetonla ilgili diğer bilgiler için
  • Programın bileşenlerinin anlamlı bir şekilde birbirine uyduğundan emin olun
  • Tür bilgilerini toplar ve tür uyumluluğunu kontrol eder
  • İşlenenlere kaynak dil tarafından izin verildiğini kontrol eder

Aşama 3: Anlamsal Analiz

Anlamsal analiz, kodun anlamsal tutarlılığını kontrol eder. Verilen kaynak kodunun anlamsal olarak tutarlı olduğunu doğrulamak için önceki aşamanın sözdizimi ağacını sembol tablosuyla birlikte kullanır. Ayrıca kodun uygun bir anlam taşıyıp taşımadığını da kontrol eder.
Anlamsal Analizör, Tür uyuşmazlıklarını, uyumsuz işlenenleri, uygunsuz 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 bunu 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 olmadığı tip uyuşmazlığı durumunda anlamsal bir hata gösterilir.
  • Tip bilgilerini toplar ve tip uyumluluğunu kontrol eder
  • Kaynak dilin işlenenlere izin verip vermediğini kontrol eder

Örnek E-posta

float x = 20.2;
float y = x*30;

Yukarıdaki kodda anlamsal çözümleyici, çarpma işleminden önce 30 tamsayısını kayan nokta 30.0 olarak yazacaktır.

Aşama 4: Ara Aşama Code nesil

Semantik analiz aşaması tamamlandıktan sonra derleyici, hedef makine için ara kod üretir. Bu, bazı mutlak değerler için bir programı temsil eder.tract makinesi.
Ara kod, üst düzey dil ile makine düzeyi dil arasındadır. Bu ara kodun, hedef makine koduna çevrilmesini kolaylaştıracak şekilde oluşturulması gerekir.
Ara Katmandaki Fonksiyonlar Code nesil:

  • Kaynak programın anlamsal temsilinden oluşturulmalıdır.
  • Çeviri işlemi sırasında hesaplanan değerleri tutar
  • Ara kodu hedef dile çevirmenize yardımcı olur
  • Kaynak dilin öncelik sırasını korumanıza olanak tanır
  • Talimatın doğru sayıda işlenenini tutar

Örnek E-posta

Örneğin,

total = count + rate * 5

Adres kodu yönteminin yardımıyla ara kod:

t1 := int_to_float(5)
t2 := rate * t1
t3 := count + t2
total := t3

Faz 5: Code Optimizasyon

Bir sonraki aşama kod optimizasyonu veya Ara koddur. Bu aşama, gereksiz kod satırını ortadan 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
  • Halen ara gösterimde olan kolaylaştırılmış kod üretir
  • Ulaşılamayan kodu kaldırma ve kullanılmayan değişkenlerden kurtulma
  • Döngüden değiştirilmeyen ifadelerin kaldırılması

Örnek:
Aşağıdaki kodu göz önünde bulundurun

a = intofloat(10)
b = c * a
d = e + b
f = d

Olabilir

b =c * 10.0
f = e+b

Faz 6: Code nesil

Code Üretim, bir derleyicinin son ve nihai aşamasıdır. Kod optimizasyon aşamalarından girdi alır ve sonuç olarak sayfa kodu veya nesne kodu üretir. Bu aşamanın amacı, depolama alanı ayırmak ve yeniden konumlandırılabilir makine kodu üretmektir.
Ayrıca değişken için bellek konumlarını da ayırır. Ara koddaki talimatlar makine talimatlarına dönüştürülür. Bu aşama, optimize veya ara kodun hedef dile aktarılmasını kapsar.
Hedef dil makine kodudur. Bu nedenle tüm hafıza konumları ve kayıtları da bu aşamada seçilir ve tahsis edilir. Bu aşamada oluşturulan kod, girdileri almak ve beklenen çıktıları üretmek için yürütülür.

Örnek E-posta

a = b + 60.0
Muhtemelen kayıtlara çevrilecektir.

MOVF a, R1
MULF #60.0, R2
ADDF R1, R2

Sembol Tablosu Yönetimi

Bir sembol tablosu, tanımlayıcının özniteliklerine ilişkin alanları içeren her 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 aynı zamanda kapsam yönetimi konusunda da size yardımcı olur. Sembol tablosu ve hata işleyicisi tüm aşamalarla etkileşime girer ve buna uygun olarak sembol tablosu güncellemesi yapılır.

Hata İşleme Rutini

Derleyici tasarım sürecinde hata aşağıda belirtilen aşamaların tümünde meydana gelebilir:

  • Sözcük analizörü: Yanlış yazılan belirteçler
  • Sözdizimi analizörü: Eksik parantez
  • Orta düzey kod üreteci: Bir operatör için uyumsuz işlenenler
  • Code Optimizasyon: İfadeye ulaşılamadığında
  • Code Generator: Bellek dolduğunda veya uygun kayıtlar ayrılmadığında
  • Sembol tabloları: Bildirilen birden fazla tanımlayıcı hatası

En yaygın hatalar, taramada geçersiz karakter dizisi, türde geçersiz belirteç dizileri, kapsam hatası ve anlamsal analizde ayrıştırmadır.
Hatayla yukarıdaki aşamaların herhangi birinde karşılaşılabilir. Hataları bulduktan sonra, derleme sürecine devam etmek için hatalarla ilgilenme aşaması 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.

SSS

Analiz aşaması (ön uç), kaynak kodu sözcüksel, sözdizimsel ve anlamsal analiz yoluyla parçalara ayırır. Sentez aşaması (arka uç), ara kod üretimi, optimizasyon ve kod üretimi yoluyla hedef programı oluşturur.

Derleyici, çalıştırmadan önce kaynak programın tamamını makine koduna çevirir. Yorumlayıcı ise kodu satır satır çevirir ve yürütür; bu, hata ayıklamayı kolaylaştırır ancak genellikle çalışma zamanında daha yavaştır.

Üç adresli kod, her komutun en fazla üç işlenene sahip olduğu bir ara gösterimdir; örneğin t1 = a + b. Optimize edilmesi basittir ve hedef makine koduna çevrilmesi kolaydır.

Yapay zeka ve makine öğrenimi, modern derleyicilere döngü dönüşümleri, satır içi kod yerleştirme ve kayıt tahsisi gibi daha akıllı optimizasyon kararları almada yardımcı olur. Belirli bir program ve hedef için hangi optimizasyonların performansı artırdığını tahmin ederler.

Evet. Yapay zeka her aşamayı örneklerle açıklayabilir. tracÖrnek bir ifadenin belirteçlerden makine koduna nasıl dönüştüğünü ve takip eden soruları nasıl yanıtladığınızı öğrenin. Bu, derleyici tasarımını öğrenciler için öğrenmeyi kolaylaştırır.

Bu yazıyı şu şekilde özetleyin: