BilgisayarlarProgramlama

Yayıncı - ... derleyici türleri olduğunu. Dönüştürme ve yayın programları

Programlar, hem de insanların tercüman ya tercüman gereken bir dilden diğerine çevirmek için.

temel kavramlar

Program hesaplamaların bir dilsel temsilidir i P → P (i) →. Bir tercüman giriş programı P ve bazı giriş x tedarik edildiği bir programdır. Bu p x gerçekleştirir: I (P, x) = P (x). Sadece bir çevirmen (formel sistemde temsil edilebilir) tüm olası programlarını gerçekleştirme yeteneğine sahiptir var olması çok derin ve önemli keşif Turing olduğunu.

İşlemci makine dilinde programlar bir tercüman olduğunu. onlar yorumlamak daha kolay olan bir forma tercüme yüzden, yüksek seviyeli diller için tercüman yazmak için Genellikle çok pahalı.

çevirmen Bazı türler, çok garip isimleri var:

  • montajcı makine diline montaj dil programları çevirir.
  • derleyici bir alt dil üst düzey bir dil çevirir.

bir p → X → Q, ∀x: - yayın her ikisi de aynı anlamlara sahip olduğu bir şekilde T programı bir dil S giriş verileri olarak program alır ve üreten bir programdır. P (x) = Q, (x) tanımlanmaktadır.

yorumlanabilir şeye tüm programı yayını ise, yürütme veya AOT derleme önce bir derleme denir. AOT derleyici seri olarak kullanılabilir, ikinci, genellikle, örneğin montajcı, olduğu:

Kaynak kodu derleyici → (çevirmen) → → montaj kodu montajcı (derleyici) → → CPU makine kodu (yorumlayıcı).

Diğer önceden derlenmiş bölümü tarafından yürütüldüğünde programı gönderildiği takdirde Operasyonel veya dinamik derleme oluşur. JIT-derleyiciler tekrar tekrar kaynak kodunu tekrar etmemek için zaten yaptıklarını hatırlıyorum. Hatta program yürütme ortamının davranışına göre adaptif derleme ve recompilation üretebilir.

Birçok dil derleme zamanında kodu çalıştırmak ve zamanında yeni kodu derlemek için izin verir.

çeviri aşaması

Yayın analiz ve sentez aşağıdaki adımları içerir:

Hedef kodu → kaynak kodu analiz → → → kavramsal temsili jeneratörü (sentezleyici).

Bu durum, bu nedenlerden kaynaklanmaktadır:

  • Başka bir yöntem, uygun değildir. Kelime çeviri basitçe çalışmaz.
  • İyi mühendislik çözümü: Bunun yerine M × N kompleksi daha sadece M + N basit programlar (polukompilyatorov) ihtiyaç yaz hedeflenen M ve N kaynak diller için çevirmenlere (çevirmen toplam) yazmak istiyorum.

Ancak uygulamada, bir yeterli nadiren anlamlı ve yeterince güçlü bir kavramsal bakış akla gelebilecek her kaynak ve hedef dilleri kapsayacak şekilde. Bazı bu yakın gelmek mümkün iken.

Gerçek derleyiciler birçok aşamadan geçmektedir. Kendi derleyici oluştururken insanlar temsillerini ve jeneratörler yaratmak için yapmış bütün zor işleri tekrarlamak zorunda değildir. Sen JavaScript veya C doğrudan dile çevirmek ve mevcut JavaScript motoru ve dinlenme yapmak için C derleyicisi yararlanabilir. Ayrıca mevcut ara temsilini ve kullanabilirsiniz sanal makineleri.

kayıt çevirmen

kaynak, hedef ve taban: - Yayıncı üç dil dahil bir program veya donanım vardır. Bunlar aşağıda orijinal sol, sağ ve hedef tabanını yerleştirerek, bir T şeklinde yazılabilir.

derleyicilerinin üç tipi vardır:

  • Yayıncı - bu temel kaynak dilde karşılık geliyorsa samokompilyator olduğunu.
  • dili hedefleyebilir Derleyici bazal denilen samorezidentnym olduğunu.
  • Yayıncı - bir çapraz derleyici, o hedeflediyse ve temel çeşitli diller.

Bu neden önemlidir?

Hatta bu amaçla kullanılan kavram, örneğin yaygın olarak kullanılmaktadır, çünkü gerçek derleyici, onun yaratılış teknolojinin iyi bir bilgi asla eğer:

  • biçimlendirme metin;
  • dil sorguları veritabanlarına;
  • gelişmiş bilgisayar mimarisi;
  • genelleştirilmiş optimizasyon problemleri;
  • GUI;
  • betik diller;
  • kontrol edici maddeler;
  • sanal makineler;
  • Makine çevirisi.

Eğer önişlemcilerinin, bağlayıcıları, yükleyiciler, yanlışlık ve profilers yazmak isterseniz ek olarak, bir derleyici yazarken aynı adımlar geçmesi gerekiyor.

Ayrıca dil için tercüman yaratılması onun inceliklerini ve belirsizlikler daha iyi anlaşılmasını anlamına geldiğinden dolayı, daha iyi programlar yazmak öğrenebilirsiniz. yayın genel ilkelerin çalışma aynı zamanda iyi bir tasarımcı dili olmayı sağlar. Bu yüzden ne kadar dik uygulanmasında etkinlik edilemezse dil fark eder?

kapsamlı teknoloji

derleyici teknoloji bilgisayar biliminin birçok farklı alanı kapsar:

  • Dilin biçimsel teori: gramer, ayrıştırma, hesaplanabilirlik;
  • bilgisayar mimarisi. talimat kümeleri RISC ya da TAK, ardışık işleme çekirdek saat çevrimleri, vb;
  • Programlama dilleri kavramları, örneğin, bir dizi kontrolü, koşullu yürütme, yineleme, tekrarlama, fonksiyonel bozulma, modülerlik, senkronizasyon, meta programlama, kapsamı, sabit alt tipleri, şablonlar, çıkış tipi, prototipler, ek açıklamalar, akış, monads, posta kutuları performans devam , joker, düzenli ifade, vb vb işlemsel bellek, kalıtım, çok biçimlilik, mod ayarları ve..;
  • soyut dil ve sanal makineleri;
  • algoritmalar ve veri yapıları: düzenli ifadeler, ayrıştırma algoritmaları, grafik algoritmaları, dinamik programlama, eğitim;
  • Programlama dilleri: sözdizimi, (statik ve dinamik) anlam, destek paradigmalar (yapısal, OOP fonksiyonel, mantıksal yığın, paralellik, meta-programlama);
  • oluşturma yazılımı (genellikle büyük ve karmaşık derleyici): lokalizasyonu, önbelleğe alma, componentize API-arayüzler, yeniden kullanım için, senkronizasyon.

derleyici tasarımı

Gerçek çevirmen gelişiminde karşılaşılan sorunlardan bazıları:

  • Kaynak dili ile ilgili sorunlar. bunu derlemek için kolay mı? Bir önişlemci var mı? Nasıl türleridir? Bir kütüphane var?
  • derleyici geçer Gruplama: Tek ya da çok-yönlü?
  • optimizasyon derecesi istenen. az veya hiç optimizasyonu ile hızlı ve kirli yayın programları normal olabilir. Aşırı optimizasyon derleyici yavaşlatır, ama zamanında daha iyi kod buna değer olabilir.
  • Hata tespiti istenen derecesi. Çevirmen sadece ilk hataya durdurabilir mi? durdurmak ne zaman? derleyici hata düzeltme güvenmek ister?
  • araçlar durumu. Orijinal dili çok küçük değilse, tarayıcı ve jeneratör analiz gereklidir. Orada jeneratörler, kod jeneratörler de vardır, ancak çok yaygın değildir.
  • Hedef kod tipi üretilecek. Saf katkılı veya sanal makine koduna seçilebilir. Ya da sadece böyle LLVM, RTL veya JVM gibi popüler bir ara temsilini oluşturan bir giriş bölümünü yazın. Veya C veya JavaScript kaynak kodunda orijinal çevirisini yapmak.
  • Hedef kod biçimi. Seçebilirsiniz bir montaj dili, taşınabilir bir makine kodu, makine kodu bellek görüntüsü.
  • Yeniden Hedefleme. Jeneratörlerin grubu iyi olduğunda, bir ortak giriş bölümüne sahip olacak şekilde. Bu nedenle birçok parçadan girişi için bir jeneratör olması en iyisidir.

derleyici Mimarisi: bileşenler

Bunlar (çıkış programı C veya sanal makinede bir program ise, o kadar çok sayıda aşamadan gerekir) yerel kod üreten bir derleyici ana işlevsel bileşenleri şunlardır:

  • giriş program (akış işaretleri) bir simge dizisi dönüştürür tarayıcı (sözcük analiz), beslenir.
  • bir soyut sözdizimi ağacı inşa Ayrıştırıcı (ayrıştırıcı).
  • Semantik analiz anlamsal bilgi ayrışır ve hatalar için ağaç düğümlerini denetler. Ek özellikler ve kurulan bağlantılar ile soyut sözdizimi ağacı - Sonuç olarak, semantik grafiği inşa etti.
  • Ara madde kod üreteci (küpe ana bloklara bölünmüş olup) bir akış grafiği oluşturur.
  • Makine bağımsız kod iyileştirici temelde rutinleri içinde kalan (taban birimi içinde) yerel ve küresel (tüm bloklar için) optimizasyon hem yürütmektedir. gereksiz kod azaltır ve hesaplamaları kolaylaştırır. Sonuç, tadil edilmiş akış grafiğidir.
  • Jeneratör (muhtemelen etkisiz) bir amacı, bir dosya Çevirici sanal kayıtları yaratmak, bir doğrusal iletim kontrol koduna hedef kod temel blok bağlanır.
  • Makine bağımlı iyileştirici, bağlayıcı kayıtları arasındaki bellek ayırır ve planlama ekipleri yapar. Bu boru hattı iyi kullanımı ile bu kurulda birleştirici dili dönüşüm programını gerçekleştirir.

Buna ek olarak, hata tespit alt yöneticisi ve sembol tablolarının kullanılması.

Sözcüksel analiz (tarama)

Tarayıcı jetonları, kaldırma boşluk, yorum ve genişleyen makro bir akışı içine akışı kaynak karakterleri dönüştürür.

Tarayıcılar genellikle dikkate durumda, kenar boşluklarını, satır sonları ve gömülü yorumlarınızı almak olsun veya olmasın gibi sorunlarla karşılaşırlar.

Tarama sırasında oluşabilecek hatalar, sözcük olarak adlandırılan ve şunları içerir:

  • alfabesinde olmayan karakterler;
  • Bir kelime ya da çizgi karakter sayısı fazlalığı;
  • değil kapalı bir işareti veya değişmez bir dize;
  • yorumunda dosya sonu.

Ayrıştırma (ayırma)

ayrıştırıcı bir soyut sözdizimi ağacına jeton sırası dönüştürür. Ağacın her düğüm kendilerini ağaç düğümleri ve bunların birçoğu adlandırılmış alanların olduğu nesne olarak depolanır. Bu aşamada hiçbir devir vardır. Eğer oluşturduğunuzda bir ayrıştırıcı gramer (LL veya LR) karmaşıklığının seviyesine dikkat ve herhangi kurallar anlam ayrım olup olmadığını öğrenmek için gereklidir. Bazı diller semantik analizini gerektirir.

Bu aşamada hata bulundu sözdizimi denir. Örneğin:

  • k = 5 * (7 - Y;
  • J = / 5'tir;
  • 56 = X * 4.

semantik analizi

Boyunca semantik analiz Çözümleme ağacının kuralları ve yardımcı parçaları edilebileceği kontrol etmek için (örtülü türü dönüşüm için işlem sokulması referans adları sağlayan ve böyle devam eder. D) semantik grafik oluşturmak için.

Açıkçası, farklı farklı dilde kurallar kabul edilebilirlik kümesi. Java benzeri dilleri derlemek, derleyici bulabilirsiniz:

  • kapsamı içinde birden çok değişken ifadesi;
  • bildiriminden önce bir değişken için bir referans;
  • bildirilmemiş adının referanslar;
  • patent haklarının ihlali;
  • Çağırılırken bağımsız değişken aşın veya yetersiz sayıda;
  • tür uyumsuzluğu.

nesil

Ara madde kod oluşturma temel bloklara bölünmüş dizilerini oluşan akış grafiğini üretir.

kod oluşturma gerçek makine kodu üretir. ilk adım RISC makineleri için geleneksel derleyici olarak, sanal kayıtları sonsuz bir sayı ile bir assembler oluşturmak. CISC-makinelerde muhtemelen olmayacak.

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

Copyright © 2018 tr.delachieve.com. Theme powered by WordPress.