Çapraz Derleyicinin T diyagramı


9

Red Dragon Book Compilers'ten Bootstrapping okuyorum ve çapraz derleyici için T diyagramını oldukça kafa karıştırıcı buldum. "Derleyiciyi1 derleyiciden çalıştır" ile ne anlama geldiğini anlayamıyorum. Bazı gerçek dünya derleyici ile ilişki için daha iyi bir açıklama, benzetme veya bir örnek sağlayabilir?

Önce bazı gösterimler. Tarafından LSN= resim açıklamasını buraya girin Dil için bir derleyici demek istiyorum L dilde yazılmış S çıktı dili / makine kodu üreten N. Bu bir mezar taşı veya T diyagramıdır .

Derleyici Derleme

  1. D uygulama makinesi S dilinde yeni bir dil L için çapraz derleyicimiz olduğunu varsayalım.

    LSN=
    LSN için T diyagramı

  2. Makine M için mevcut bir M derleyicisinin de mevcut olduğunu varsayalım.

    SMM=
    SMM için T-diyagramı

  3. LMN üretmek için LSN'yi SMM üzerinden çalıştırın

Derleyici Yapımı

LMN=LSN+SMM
LMN için T-diyagramı = LSN + SMM


Neler olup bittiğini anlamayı kolaylaştıracak bazı T diyagramları ekledim. Umarım birisi onları daha iyi bir şekilde render edebilir.
Dave Clarke

Yanıtlar:


11

T-diyagramları (sorunuzun orijinal versiyonundan çıkarmışsınızdır) bu tür bir soruyu anlamak için çok önemlidir. Son T diyagramına bakalım.

resim açıklamasını buraya girin

İlk T, L'de S ile yazılmış bir derleyiciyi açıklar.

İkinci T, M'den M'ye yazılan (veya M'de çalışan) S'den M'ye bir derleyiciyi tanımlar. Bu derleyici derleyiciniz olacak .

İkinci T'yi ilk T'ye uygulamak, ilk T'yi M makinesinde çalışacak şekilde derler. Sonuç, L'den N'ye M makinesinde çalışan bir derleyicidir.

İkinci T'nin M makinesinde de çalışması, çapraz derleyici kullanmak yerine derleyici derleyicisini çalıştıracağınız makinede derleyici derleyicisini çalıştırdığınızı yakalar (alt M farklıysa durum böyle olurdu) ).


5

LSN'yi SMM ile derlediğimiz, yani LSN'nin SMM üzerinden kaynak kodunu çalıştırdığımız anlamına gelir.

SMM bazı kaynak kodlarını derlediğinde, makine M için bir yürütülebilir dosya üretir, bu nedenle LSN'yi SMM ile derlediğimizde, makine N'de çalıştırılabilir dosyalar üretmek için makine M'deki L kaynak dosyalarını derleyen bir yürütülebilir dosya olan LMN alırız.

Belki bunu bir benzetmeyle anlamak daha kolay olurdu. Supppse cc, ARM kodunu üreten Fortran'da yazılmış bir C derleyicimiz var . fcX64 bilgisayarımızda bir Fortran derleyicimiz olduğunu varsayalım . Biz derleme Eğer ccile kaynak kodu fcbiz x64 üzerinde çalışan bir program olsun, C programlarını derler ama ARM için yürütülebilir üretir.


0

Basitleştirmek için ....

Not: Unutmayın Derleyici yalnızca düşük bir dilde çalışabilir.

1. Diyagramda, derleyici HLL'de (Yüksek Düzey Langg) yazılır, bu nedenle bir makinede çalıştırmak için derleyicinin uygulama dili LLL'de olmalıdır.

Dolayısıyla, 2. Diyagramda, derleyicinin Uygulama dili, hedef kodun kendi makinesinde çalışabileceği şekilde kendi kendine yerleşik bir derleyicide çalıştırılır.

Son olarak, her ikisini de birleştiren derleyici, langg - M ile bir makinede çalışır

giriş dili - L

çıkış Langg - N

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.