Derleyici Tasarımı Nedir? Türler, İnşaat Aletleri, Örnek

⚡ Akıllı Özet

Derleyicinin aşamaları, kaynak kodu makine koduna dönüştüren altı aşamayı tanımlar: sözcük analizi, sözdizimi analizi, anlamsal analiz, ara kod üretimi, kod optimizasyonu ve kod üretimi; bunların yanı sıra sembol tablosu yönetimi ve hata işleme de desteklenir.

  • 🔤 Sözcük Analizi: Tarayıcı, karakterleri belirteçler halinde gruplandırır ve sembol tablosuna kaydeder.
  • ???? Sözdizimi Analizi: Ayrıştırıcı, dilbilgisini kontrol eder ve belirteçlerden hiyerarşik bir ayrıştırma ağacı oluşturur.
  • ✔️ Semantik Analiz: Bu aşama, sözdizimi ağacını kullanarak tür uyumluluğunu ve anlamını doğrular.
  • ⚙️ Code Nesil: Ara kod oluşturulur, optimize edilir ve son olarak hedef makine koduna çevrilir.
  • ???? Destek Rutinleri: Sembol tablosu ve hata işleme rutini, her derleme aşamasıyla etkileşim halindedir.

Derleyicinin Aşamaları ve Örnekleri: Derleme Süreci ve Adımları

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

A derleyici Derleyici çeşitli aşamalarda çalışır ve her aşama kaynak programı bir gösterimden diğerine dönüştürür. Her aşama, önceki aşamadan girdi alır ve çıktısını derleyicinin bir sonraki aşamasına iletir. 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ı

Bu aşamaların tamamı, kaynak kodu belirteçlere bölerek, ayrıştırma ağaçları oluşturarak ve farklı aşamalar aracılığıyla kaynak kodu optimize ederek dönüştürür.

Aşama 1: Sözcüksel Analiz

Sözcük analizi, derleyicinin kaynak kodu taradığı ilk aşamadır. Bu işlem soldan sağa, karakter karakter yapılabilir ve bu karakterler belirteçler halinde gruplandırılır.

Burada, kaynak programdan gelen karakter akışı, belirteçler tanımlanarak anlamlı diziler halinde gruplandırılır. İlgili belirteçler sembol tablosuna girilir ve bu belirteç bir sonraki aşamaya aktarılır.

Bu aşamanın temel işlevleri şunlardır:

  • Kaynak koddaki sözcük birimlerini belirleyin.
  • Sözcük birimlerini sabitler, ayrılmış sözcükler gibi sınıflara ayırın ve bunları farklı tablolara kaydedin. Kaynak programdaki yorumları dikkate almayacaktır.
  • Dilin bir parçası olmayan bir belirteci tanımlayın.

Örnek: x = y + 10

Simge Menşei
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, kod içindeki yapıyı keşfetmekle ilgilidir. Bir metnin beklenen biçime uyup uymadığını belirler. Bu aşamanın temel amacı, programcı tarafından yazılan kaynak kodun doğru olup olmadığını doğrulamaktır.

Sözdizimi analizi, belirteçler yardımıyla ayrıştırma ağacını oluşturarak belirli programlama dilinin kurallarına dayanır. Ayrıca kaynak dilin yapısını ve dilin gramerini veya sözdizimini belirler.

İşte bu aşamada gerçekleştirilen görevlerin listesi:

  • Sözcük çözümleyicisinden belirteçleri alın.
  • İfadenin sözdizimsel olarak doğru olup olmadığını kontrol edin.
  • 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ı/sayı bir ifadedir. Eğer x bir tanımlayıcı ve y+10 bir ifade ise, o zaman x = y+10 bir deyimdir. Aşağıdaki örnek için ayrıştırma ağacını inceleyin:

(a+b)*c

Sözdizimi Analizi Örneği

Ayrıştırma Ağacında:

  • İç düğüm: bir operatör alanı ve iki alt alan içeren kayıt.
  • Yaprak (Leaf): 2 veya daha fazla alana sahip kayıtlar; biri belirteç (token) için, diğeri belirteçle ilgili 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.
  • İşlem yapılan değişkenlerin kaynak dil tarafından izin verilip verilmediğ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.

Semantik Çözümleyici, tür uyuşmazlıklarını, uyumsuz işlenenleri, uygunsuz argümanlarla çağrılan bir fonksiyonu, bildirilmemiş bir değişkeni vb. kontrol edecektir.

Semantik 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.
  • Tür kontrolü yapmanıza olanak tanır.
  • Tür uyumsuzluğu durumunda, istenen işlemi karşılayan kesin tür düzeltme kuralları bulunmadığında, anlamsal bir hata gösterilir.
  • Tür bilgilerini toplar ve tür 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ı 30.0 ondalık sayısına dönüştürecektir.

Aşama 4: Ara Aşama Code nesil

Anlamsal analiz aşaması tamamlandıktan sonra, derleyici hedef makine için ara kod üretir. Bu kod, bazı mutlak değerler için bir programı temsil eder.tract makinesi.

Ara kod, üst düzey ve makine düzeyindeki diller arasında yer alır. Bu ara kodun, hedef makine koduna kolayca çevrilebilmesini sağlayacak şekilde oluşturulması gerekir.

Ara Katmanın İşlevleri Code nesil:

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

Örnek E-posta

Örneğin:

total = count + rate * 5

Adres kodu yöntemi yardımıyla elde edilen ara kod şu şekildedir:

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

Faz 5: Code Optimizasyon

Bir sonraki aşama, ara kodun optimizasyonudur. Bu aşama, gereksiz kod satırlarını kaldırır ve kaynak israfı yapmadan programın yürütülme hızını artı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 iyileştirmektir.

Bu aşamanın temel işlevleri şunlardır:

  • Bu, yürütme hızı ve derleme hızı arasında bir denge kurmanıza yardımcı olur.
  • Hedef programın çalışma süresini iyileştirir.
  • Ara aşamadaki gösterim biçiminde bile olsa, sadeleştirilmiş kod üretir.
  • Erişilemeyen kodları kaldırmak ve kullanılmayan değişkenlerden kurtulmak.
  • Döngüden değiştirilmeyen ifadeleri kaldırıyoruz.

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

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

Şu hale gelebilir:

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şamasından girdiler 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şkenler için bellek konumları da tahsis eder. Ara koddaki talimatlar makine talimatlarına dönüştürülür. Bu aşama, optimize edilmiş veya ara kodu hedef dile dönüştürür.

Hedef dil makine kodudur. Bu nedenle, tüm bellek konumları 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.

Örnek E-posta

a = b + 60.0 ifadesi, muhtemelen şu şekilde yazmaçlara çevrilebilir:

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

Sembol Tablosu Yönetimi

Sembol tablosu, her bir tanımlayıcı için, tanımlayıcının özniteliklerine ait alanlar içeren bir kayıt içerir. Bu bileşen, derleyicinin tanımlayıcı kaydını aramasını ve hızlı bir şekilde bulmasını kolaylaştırır. Sembol tablosu ayrıca kapsam yönetimine de yardımcı olur. Sembol tablosu ve hata işleyici tüm aşamalarla etkileşim halindedir ve sembol tablosu buna göre güncellenir.

Hata İşleme Rutini

Derleyici tasarım sürecinde, aşağıdaki aşamaların tümünde hatalar meydana gelebilir:

  • Sözcük çözümleyici: Yanlış yazılmış jetonlar.
  • Sözdizimi çözümleyici: Parantez eksik.
  • Ara kod üreteci: Bir operatör için eşleşmeyen işlenenler.
  • Code Optimize Edici: Açıklamaya ulaşılamadığında.
  • Code Generator: Bellek dolduğunda veya uygun kayıtlar tahsis edilmediğinde.
  • Sembol tabloları: Birden fazla tanımlayıcının belirtilmesi hatası.

En sık karşılaşılan hatalar arasında taramada geçersiz karakter dizileri, türde geçersiz belirteç dizileri, kapsam hatası ve anlamsal analizde ayrıştırma hataları yer almaktadır.

Hata yukarıdaki aşamaların herhangi birinde ortaya çıkabilir. Hatalar bulunduktan sonra, derleme işlemine devam etmek için bu hataların giderilmesi gerekir. Bu hataların, derleme işlemini gerçekleştirmek için hatayı işleyen hata işleyicisine bildirilmesi gerekir. Genellikle hatalar bir mesaj şeklinde bildirilir.

SSS

Evet. Yapay zekâ asistanları her aşamayı açıklayabilir. tracÖrnek kodun nasıl belirteçlere ve ayrıştırma ağaçlarına dönüştüğünü gösterir ve sözdizimi veya anlamsal hatanın nerede ortaya çıktığını belirtir. Bunlar faydalı çalışma araçlarıdır, ancak açıklamaları ders materyaliyle karşılaştırarak doğrulayın.

Makine öğrenimi, belirli bir program ve makine için hangi optimizasyon adımlarının en hızlı kodu üreteceğini tahmin edebilir ve eskiden elle oluşturulmuş sezgisel yöntemler olan seçimleri iyileştirebilir. Derleyici yine de optimize edilmiş programın orijinaliyle tamamen aynı şekilde davranmasını garanti etmelidir.

Ön uç, sözcükbilimsel, sözdizimsel ve anlamsal analizlerin yanı sıra ara kodları da ele alır ve kaynak dile bağlıdır. Arka uç ise optimizasyon ve kod üretimini ele alır ve hedef makineye bağlıdır. Bu ayrım, yeniden hedeflemeyi kolaylaştırır.

Hayır. Sözcük analizi (tarama) karakterleri belirteçler halinde gruplandırırken, ayrıştırma (sözdizimi analizi) bu belirteçleri dilbilgisi kurallarına göre bir ayrıştırma ağacına yerleştirir. Sözcük analizi önce çalışır ve belirteçlerini ayrıştırıcıya iletir.

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