Derleyici-derleyici - Compiler-compiler - Wikipedia

İçinde bilgisayar Bilimi, bir derleyici derleyici veya derleyici oluşturucu oluşturan bir programlama aracıdır. ayrıştırıcı, çevirmen veya derleyici bir tür resmi tanımdan Programlama dili ve makine.

En yaygın derleyici-derleyici türü, daha kesin olarak ayrıştırıcı oluşturucuve yalnızca sözdizimsel analizi işler: girdisi bir dilbilgisi, tipik olarak yazılmış Backus-Naur formu (BNF) veya genişletilmiş Backus – Naur formu (EBNF) tanımlayan sözdizimi bir programlama dilinin; ve çıktısı kaynak kodu programlama dili için bir ayrıştırıcının. Ayrıştırıcı üreteçleri, anlambilim programlama dilinin veya makine kodu üretimi hedef makine için.[1]

Bir meta derleyici esas olarak inşaat alanında kullanılan bir yazılım geliştirme aracıdır derleyiciler, çevirmenler, ve tercümanlar diğer programlama dilleri için.[2] Bir meta derleyicinin girdisi bir bilgisayar programı bir uzman programlama metaldil esas olarak derleyiciler oluşturmak amacıyla tasarlanmıştır.[2][3][4] Üretilen derleyicinin diline nesne dili. Bir derleyici üreten minimum girdi bir metaprogram belirterek nesne dili gramer ve anlamsal dönüşümler nesne programı.[3][4][5]

Varyantlar

Tipik bir ayrıştırıcı oluşturucu, çalıştırılabilir kodu, bu kurallar ayrıştırıcı tarafından uygulandığında yürütülmesi gereken gramer kurallarının her biri ile ilişkilendirir. Bu kod parçaları, çözümleyici tarafından analiz edilen sözdizimsel yapının anlambilimini tanımladıkları için bazen anlamsal eylem rutinleri olarak adlandırılır. Oluşturulması gereken ayrıştırıcı türüne bağlı olarak, bu yordamlar bir ayrıştırma ağacı (veya soyut sözdizimi ağacı ) veya doğrudan çalıştırılabilir kod oluşturun.

Derleyici-derleyicilerin en eski (1964), şaşırtıcı derecede güçlü sürümlerinden biri META II çıktı olanaklarıyla analitik bir grameri kabul eden yığın makinesi üreten kod ve kendi kaynak kodunu ve diğer dilleri derleyebilir.

Orijinalin en eski programları arasında Unix inşa edilen sürümler Bell Laboratuvarları iki parçalıydı lex ve yacc normalde çıktı vermek için kullanılan sistem C programlama dili kod, ancak programlama dillerinden metin dosyası dönüştürmeye kadar her şey için kullanılabilecek esnek bir çıktı sistemine sahipti. Onların modern GNU versiyonlar esnek ve bizon.

Bazı deneysel derleyici-derleyiciler, tipik olarak programlama dili anlambiliminin resmi bir tanımını girdi olarak alır. gösterimsel anlambilim. Bu yaklaşım genellikle 'anlambilim tabanlı derleme' olarak adlandırılır ve öncülük etmiştir. Peter Mosses 1978'de Anlamsal Uygulama Sistemi (SIS).[6] Bununla birlikte, hem üretilen derleyici hem de ürettiği kod zaman ve mekan açısından verimsizdi. Şu anda hiçbir üretim derleyicisi bu şekilde oluşturulmamıştır, ancak araştırmalar devam etmektedir.

Üretim Kalitesi Derleyici-Derleyici (PQCC ) proje Carnegie Mellon Üniversitesi anlambilimini resmileştirmez, ancak makine tanımı için yarı resmi bir çerçevesi vardır.

Derleyici-derleyiciler, aşağıdan yukarıya yeniden yazma makinesi oluşturucuları da dahil olmak üzere birçok türde mevcuttur (bkz. JBurg ) sözdizimi ağaçlarını kod üretimi için yeniden yazma gramerine göre döşemek için kullanılır ve öznitelik grameri ayrıştırıcı üreteçleri (ör. ANTLR ayrıştırma aşamasında eşzamanlı tür denetimi, sürekli yayılma ve daha fazlası için kullanılabilir).

Meta derleyiciler

Meta derleyiciler, ne olursa olsun aynı olan yönleri otomatikleştirerek derleyici yazma görevini azaltır. nesne dili. Bu, tasarımını mümkün kılar alana özgü diller belirli bir sorunun spesifikasyonuna uygun olanlar. Bir meta derleyici, üretim maliyetini düşürür çevirmenler bunun için alana özgü nesne dilleri bir problemin çözümüne dahil etmenin ekonomik olarak mümkün hale geldiği bir noktaya alana özgü dil tasarım.[4]

Bir meta derleyicinin metaldil çok çeşitli başka yazılım mühendisliği ve analiz araçları oluşturmak için de yararlı olan güçlü bir dizi ve sembol işleme dilidir.[4][7]

İçin yararlı olmanın yanı sıra alana özgü dil geliştirme, bir meta derleyici, derleyici yazma alanı için tasarlanmış, alana özgü bir dilin en iyi örneğidir.

Bir meta derleyici, metaprogram genellikle kendi diliyle yazılır veya mevcut bir bilgisayar programlama dili. Kendi metal dilinde yazılmış bir meta derleyicinin kendi kendini derleme süreci, kendi kendine barındırılan derleyici. Bugün yazılan en yaygın derleyiciler, kendi kendine barındırılan derleyicilerdir. Kendi kendine barındırma, birçok meta derleyicinin güçlü bir aracıdır ve kendi meta programlama metal dillerinin kolayca genişletilmesine izin verir. Bir meta derleyiciyi diğer derleyici derleyicilerinden ayıran özellik, girdi olarak özel bir metaprogramlama derleyici işleminin tüm yönlerini tanımlayan dil. Bir meta derleyici tarafından üretilen bir metaprogram, bir program yazılmış C ++, TEMEL veya başka herhangi bir genel Programlama dili. metaprogramlama metaldil bilgisayar programlama dillerinin ve diğer bilgisayar araçlarının daha kolay geliştirilmesini sağlayan güçlü bir özelliktir. Komut satırı işlemcileri, metin dizisi dönüşümü ve analizi, meta derleyicilerin meta programlama metal dilleri kullanılarak kolayca kodlanabilir.

Tam özellikli bir geliştirme paketi şunları içerir: bağlayıcı ve bir Çalışma süresi destek kütüphane. Genellikle makine odaklı sistem programlama dili, gibi C veya C ++, destek kitaplığını yazmak için gereklidir. Derleme işlemi için gerekli destek işlevlerinden oluşan bir kitaplık, genellikle tam meta derleyici paketini tamamlar.

Meta derleyicinin anlamı

Bilgisayar biliminde önek meta genellikle anlamında kullanılır hakkında (kendi kategorisi). Örneğin, meta veriler diğer verileri tanımlayan verilerdir. Diğer dilleri tanımlamak için kullanılan bir dil, metaldil. Meta ayrıca şu anlama da gelebilir daha yüksek bir soyutlama düzeyinde. Bir metaldil bir dilin özelliklerini tanımlamak için daha yüksek bir soyutlama düzeyinde çalışır. Backus-Naur formu (BNF) resmi bir metaldil başlangıçta tanımlamak için kullanılır ALGOL 60. BNF zayıf metaldil, çünkü sadece sözdizimi ve hakkında hiçbir şey söylemiyor anlambilim veya anlam. Metaprogramlama yazıyor bilgisayar programları tedavi etme yeteneği ile programları verileri olarak. Bir meta derleyici girdi olarak alır a metaprogram bir özel metal diller (daha yüksek düzeyde bir soyutlama), özellikle metaprogramlama.[3][4][5] Çıktı, çalıştırılabilir bir nesne programıdır.

Bir benzetme yapılabilir: C ++ derleyici girdi olarak alır a C ++ programlama dili programı, bir metaderleyici girdi olarak alır a metaprogramlama metaldil programı.

Dördüncü meta derleyici

Dilin birçok savunucusu İleri Forth'un yeni bir uygulamasını oluşturma sürecini bir meta-derleme olarak adlandırın ve bir meta derleyici oluşturur. Meta derleyicinin Dördüncü tanımı şöyledir:

"Bir meta derleyici, kendi kaynak kodunu işleyen ve kendi çalıştırılabilir bir sürümüyle sonuçlanan bir derleyicidir."

Meta derleyici teriminin bu Dördüncü kullanımı ana bilgisayar biliminde tartışılmaktadır. Görmek Forth (programlama dili) ve Derleyici yapısının tarihi. Kendini derlemenin gerçek Forth süreci, Forth'un bir kendi kendine barındırma genişletilebilir programlama dil ve bazen çapraz derleme, bilgisayar biliminde köklü terminoloji. Meta derleyiciler genel bir derleyici yazma sistemidir. Dördüncü meta derleyici kavramının yanı sıra, kendi kendine barındırma ve genişletilebilir dilden ayırt edilemez. Gerçek süreç, minimum dördüncü alt kümeyi tanımlayan daha düşük bir seviyede hareket eder. kelimeler, bu ek dördüncü sözcükleri tanımlamak için kullanılabilir, Tam bir Forth uygulaması daha sonra temel kümeden tanımlanabilir. Bu bir önyükleme sürecine benziyor. Sorun, hemen hemen her genel amaçlı dil derleyicisinin Forth meta derleyici açıklamasına da uymasıdır.

(Kendi kendini barındıran derleyici) X kendi kaynak kodunu işlediğinde ve kendi çalıştırılabilir bir sürümüyle sonuçlandığında, X bir meta derleyicidir.

X'i herhangi bir ortak dil olan C, C ++ ile değiştirin, Pascal, COBOL, Fortran, Ada, Modula-2 vb. Ve X, meta derleyicinin Forth kullanımına göre bir meta derleyici olacaktır. Bir meta derleyici, derlediği derleyicinin üzerinde bir soyutlama düzeyinde çalışır. Kendini derlerken yalnızca aynı (kendi kendini barındıran derleyici) düzeyinde çalışır. Meta derleyicinin bu tanımındaki problemi görmek gerekir. Çoğu dile uygulanabilir.

Ancak Forth'da programlama kavramını incelerken sözlüğe yeni kelimeler eklemek, dili bu şekilde genişletmek metaprogramlamadır. Onu bir meta derleyici yapan, Forth'daki bu meta programlamadır.

Forth'ta programlama, dile yeni kelimeler eklemektir. Dili bu şekilde değiştirmek metaprogramlama. Forth bir meta derleyicidir çünkü Forth, özellikle meta programlama için tasarlanmış bir dildir.[3] Forth programlama Forth genişliyor Forth kelime dağarcığına kelimeler eklemek yeni bir Forth oluşturur lehçe. Forth, Forth dil lehçeleri için özel bir meta derleyicidir.

Tarih

Bu adı kullanan ilk derleyici-derleyici tarafından yazılmıştır. Tony Brooker 1960 yılında ve Atlas bilgisayar Manchester Üniversitesi, I dahil ederek Atlas Otomatik Kod derleyici.[kaynak belirtilmeli ]

Meta derleyicilerin erken tarihi, Syntax Driven Compilers üzerinde SIG / PLAN Çalışma grubu 1'in geçmişi ile yakından bağlantılıdır. Grup, öncelikle Los Angeles bölgesindeki Howard Metcalfe'nin çabasıyla kuruldu.[8] 1962 sonbaharında Howard Metcalfe, iki derleyici-yazma çevirmeni tasarladı. Biri, Ledley ve Wilson tarafından açıklanan bir yönteme dayanan aşağıdan yukarıya bir analiz tekniği kullandı.[9] Diğeri, bağlamdan bağımsız bir gramerden rastgele İngilizce cümleler oluşturmak için Glennie'nin bir çalışmasına dayanan yukarıdan aşağıya bir yaklaşım kullandı.[10]

Val Schorre aynı zamanda iki "meta makine" tanımladı. Bir üretken ve bir analitik. Üretken makine uygulandı ve rastgele cebirsel ifadeler üretti. İlk meta derleyici Meta I, Ocak 1963'te UCLA'da bir IBM 1401'de Schorre tarafından uygulandı. Orijinal tercümanları ve metamachines, doğrudan bir sözde makine dilinde yazılmıştır. META II Ancak, sözde makine diline kendi derlemesini tanımlayabilen daha üst düzey bir üst dilde yazılmıştır.[11][12][13]

Bolt, Beranek ve Newman'dan Lee Schmidt, Mart 1963'te zaman paylaşımlı PDP-l'de bir CRT ekranı kullanan bir meta derleyici yazdı.[14] Bu derleyici yorumlayıcı kod yerine gerçek makine kodu üretti ve kısmen Meta I'den önyüklendi.[kaynak belirtilmeli ]

Schorre, 1963 Baharında Meta I'den Meta II'yi önyükledi. 1964 Philadelphia ACM konferansında sunulan iyileştirilmiş meta derleyici sistemi hakkındaki makale, genel referans olarak kullanılabilen bir meta derleyici hakkındaki ilk makaledir. Schorre sisteminin sözdizimi ve uygulama tekniği, takip eden sistemlerin çoğunun temelini oluşturdu. Sistem küçük bir 1401'de uygulandı ve küçük bir Algol benzeri dil.[kaynak belirtilmeli ]

Birçok benzer sistem hemen takip etti.[kaynak belirtilmeli ]

Roger Rutman arasında AC Delco Ocak 1964'te IBM 7090'da mantıksal tasarım simülasyonu için bir dil olan LOGIK'i geliştirdi ve uyguladı.[15] Bu derleyici, Boole ifadeleri için verimli kod üreten bir algoritma kullandı.[kaynak belirtilmeli ]

1964 ACM işlemlerinde yer alan başka bir makale, Meta III, tarafından geliştirilmiş Schneider ve Johnson, IBM 7090 için UCLA'da.[16] Meta III, geniş bir dil sınıfı için verimli makine kodu üretme girişimini temsil eder. Meta III tamamen assembly dilinde uygulandı. Meta III, bir derleyici yazma gösteri derleyicisi olan CODOL ve ALGOL 60'ın bir lehçesi olan PUREGOL'da iki derleyici yazılmıştır. (ALGOL olarak adlandırmak saf bir galaydı).

1964'ün sonlarında Lee Schmidt, meta derleyici EQGEN'i PDP-l'den Beckman 420'ye önyükledi. EQGEN, mantık denklemi üreten bir dildi.

1964'te System Development Corporation, meta derleyicilerin geliştirilmesinde büyük bir çaba göstermeye başladı. Bu çaba, güçlü meta derleyiciler, Bookl ve Book2'yi içerir. Lisp kapsamlı ağaç arama ve yedekleme yeteneğine sahip. Şunlardan birinin büyümesi Q-32 SDC'deki sistemler Meta 5'tir.[17] Meta 5 sistemi, herhangi bir içeriğe duyarlı dili ayrıştırmak için giriş akışının yedeğini ve yeterli başka özelliği içerir. Bu sistem çok sayıda kullanıcıya başarıyla dağıtıldı ve derleme dışında birçok dizgi işleme uygulamasına sahipti. Birçok ayrıntılı aşağı itme yığınına, öznitelik belirleme ve test etme olanaklarına ve çıktı mekanizmalarına sahiptir. Meta 5'in başarıyla çevirdiği NEŞELİ programlar PL / I programlar gücünü ve esnekliğini gösterir.

Robert McClure şirketinde Texas Instruments adlı bir derleyici-derleyici icat etti TMG (1965'te sunulmuştur). TMG, aşağıdaki gibi programlama dilleri için erken derleyiciler oluşturmak için kullanıldı B, PL / I ve ALTRAN. Val Schorre meta derleyicisi ile birlikte, son bölüm için erken bir ilham kaynağı oldu. Donald Knuth 's Bilgisayar Programlama Sanatı.[18]

LOT sistemi 1966'da Stanford Araştırma Enstitüsü'nde geliştirildi ve Meta II'den sonra çok yakından modellendi.[19] PL / I'in bir alt kümesini derleyebilecek bir derleyici oluşturmasına izin veren yeni özel amaçlı yapılara sahipti. Bu sistem, kapsamlı istatistik toplama olanaklarına sahipti ve yukarıdan aşağıya analizin özelliklerini incelemek için kullanıldı.

SIMPLE, PL / I için ön işlemcilerin yazılmasına yardımcı olmak için tasarlanmış özel bir çevirmen sistemidir, PL / I ile yazılmış SIMPLE, üç bileşenden oluşur: Bir yönetici, bir sözdizimi çözümleyici ve bir anlamsal kurucu.[20]

AĞAÇ-META derleyici, Kaliforniya Menlo Park'taki Stanford Araştırma Enstitüsü'nde geliştirilmiştir. Nisan 1968. Erken meta derleyici geçmişi, TREE META kılavuzu. TREE META, bazı SDC gelişmeleriyle paralellik gösterdi. Önceki meta derleyicilerden farklı olarak, anlambilim işlemeyi sözdizimi işlemeden ayırdı. Sözdizimi kuralları içeriyordu ağaç tanınan dil öğelerini ağaç düğümleriyle birleştiren bina işlemleri. Girişin ağaç yapısı temsili, daha sonra basit bir şekilde ayrıştırılmamış kurallarla işlendi. Ayrıştırılmamış kurallar, eşleştirildiğinde gerçekleştirilen ilişkili eylemle sonuçlanan düğüm tanıma ve öznitelik testini kullandı. Buna ek olarak, ağaç elementi gibi, ayrıştırılmamış bir kuralda da test edilebilir. Ayrık olmayan kurallar, aynı zamanda, ayrıştırılmamış kuralın eylemi gerçekleştirilmeden önce, ağacın öğelerini geçiren ayrıştırılmamış kuralları çağırabilen özyinelemeli bir dildi.

Başlangıçta Glennie tarafından ortaya atılan metarnachine konsepti o kadar basit ki, üç donanım versiyonu tasarlandı ve bir tanesi gerçekten uygulandı. İkincisi, St. Louis'deki Washington Üniversitesi'nde. Bu makine makro modüler bileşenlerden yapılmıştır ve talimatlar için Schorre tarafından açıklanan kodlara sahiptir.

CWIC (Compiler for Writing and Implementing Compilers) bilinen en son Schorre meta derleyicisidir. Systems Development Corporation'da Erwin Book, Dewey Val Schorre ve Steven J. Sherman tarafından geliştirilmiştir. Bir liste işleme dili optimizasyon algoritmalarının tüm gücüyle (lisp 2), kod oluşturmadan önce sözdizimi oluşturulmuş listeler ve ağaçlar üzerinde çalışabilir. CWIC ayrıca dile yerleştirilmiş bir sembol tablosuna sahipti.

Alana özgü dillerin yeniden canlanması ve kullanımı kolay, anlaşılması kolay ve bakımı kolay ayrıştırıcı oluşturuculara duyulan ihtiyaçla, meta derleyiciler, gelişmiş yazılım mühendisliği projeleri için değerli bir araç haline geliyor.

Yacc damarındaki diğer ayrıştırıcı oluşturucu örnekleri şunlardır: ANTLR, Coco / R, FİNCAN,[kaynak belirtilmeli ] GNU Bizonu, Eli,[21] FSL,[kaynak belirtilmeli ] SableCC, SID (Sözdizimi İyileştirme Cihazı),[22] ve JavaCC. Yararlı olsalar da, saf ayrıştırıcı üreteçleri yalnızca bir derleyici oluşturma sorununun ayrıştırma kısmını ele alır. Daha geniş kapsamlı araçlar, örneğin PQCC, Coco / R ve DMS Yazılımı Yeniden Yapılandırma Araç Seti anlamsal analiz, kod optimizasyonu ve oluşturma gibi daha zor ayrıştırma sonrası etkinlikler için önemli ölçüde destek sağlar.

Schorre dilleri

En eski Schorre meta derleyicileri META I ve META II, UCLA'da D. Val Schorre tarafından geliştirilmiştir. Diğer Schorre tabanlı meta derleyiciler izledi. Her biri, dil analizi ve / veya kod oluşturmaya iyileştirmeler ekler.

Programlamada, hem derleyiciye hem de programlama diline atıfta bulunmak için programlama dili adını kullanmak yaygındır, bağlam anlamı ayırt eder. Bir C ++ programı, bir C ++ derleyicisi kullanılarak derlenir. Bu, aşağıdakiler için de geçerlidir. Örneğin, META II hem derleyici hem de dildir.

Meta derleyicilerin Schorre hattındaki metal diller, gömülü çıktı dönüştürme yapılarına sahip olan sözdizimi denklemlerini analiz eden yukarıdan aşağı dilbilgisini kullanan işlevsel programlama dilleridir.

Bir sözdizimi denklemi:

 = ;

derlenmiş Ölçek geri dönen fonksiyon başarı veya başarısızlık. , işlev adıdır. , gruplandırılabilen, alternatifleri olan testler ve çıktı üretimlerinden oluşan mantıksal bir ifade biçimidir. Bir Ölçek A gibi bool diğer dillerde başarı olmak doğru ve başarısızlık olmak yanlış.

Bir programlama dilini analitik olarak yukarıdan aşağıya tanımlamak doğaldır. Örneğin, bir program şu şekilde tanımlanabilir:

 program = $ bildirimi;

Bir programı sıfır veya daha fazla bildirim (ler) dizisi olarak tanımlama.

Schorre META'da X diller bir itici kural vardır. Yukarıdaki program kuralı, bir sürüş kuralı örneğidir. Program kuralı bir Ölçek bildirimi çağıran işlev, bir Ölçek kural, döndürür başarı veya başarısızlık. $ Döngü operatörü başarısızlık Geri döndü. $ Operatörü, sıfır bildirimi olsa bile her zaman başarılıdır. Yukarıdaki program her zaman başarı döndürür. (CWIC'de uzun bir başarısızlık beyanı atlayabilir. Uzun başarısızlık, CWIC'in geri izleme sisteminin bir parçasıdır)

Bu ilk derleyicilerin karakter kümeleri sınırlıydı. Karakter / alternatif (veya) operatör için kullanıldı. "A veya B", A / B olarak yazılır. Gruplama için parantezler () kullanılır.

Bir (B / C)

A'nın bir yapısını ve ardından B veya C'yi açıklar.Boole ifadesi olarak

Bir ve (B veya C)

Bir dizi X Y, dolaylı bir X'e sahiptir ve Y anlamı. ( ) gruplanıyor ve / veya Şebeke. Testlerin sıralaması bir giriş karakter dizisi belirlendiğinden değerlendirme sırası her zaman soldan sağa doğrudur.

İlk karakteri bir "." Olan özel operatör sözcükleri netlik için kullanılır. .EMPTY, önceki alternatifin mevcut olmaması durumunda son alternatif olarak kullanılır.

X (A / B / .EMPTY)

X'in isteğe bağlı olarak A tarafından takip edildiğini gösterir veya B. Bu, bu metal dillerin programlama dilleri olmasının belirli bir özelliğidir. Geri izleme yukarıdakilerden kaçınılır. Diğer derleyici kurucu sistemleri, üç olası diziyi bildirmiş ve bunu çözmek için ayrıştırıcıya bırakmış olabilir.

Yukarıdaki meta programlama metal dillerinin özellikleri tüm Schorre meta derleyicileri ve bunlardan türetilenler için ortaktır.

META I

META I, META II'yi derlemek için kullanılan, elle derlenmiş bir meta derleyiciydi. META I hakkında çok az şey bilinmektedir, ancak META II'nin ilk derlemesi, elle kodlanmış META I derleyicisininkiyle neredeyse aynı kod üretmiştir.

META II

Her kural isteğe bağlı olarak testler, operatörler ve çıktı üretimlerinden oluşur. Bir kural, giriş programı kaynak karakter akışının bir bölümünü başarıya veya başarısızlığa döndürerek eşleştirmeye çalışır. Başarı durumunda, giriş eşleşen karakterlerin üzerinde ilerletilir. Başarısızlık durumunda, giriş ilerletilmez.

Çıktı üretimleri, doğrudan bir sözdizimi kuralından bir montaj kodu biçimi üretti.

AĞAÇ-META

TREE-META ağaç inşa operatörlerini tanıttı :<düğüm_adı> ve [<numara>] çıktı üretimini hareket ettirmek, işlenmemiş kurallara dönüşür. Ağaç oluşturma operatörleri, girdiyi doğrudan bir girdiye dönüştüren gramer kurallarında kullanıldı. soyut sözdizimi ağacı. Ayrıştırılmamış kurallar ayrıca ağaç desenleriyle eşleşen test işlevleridir. Ayrıştırılmamış kurallar, bir dilbilgisi kuralından çağrılır. soyut sözdizimi ağacı çıktı koduna dönüştürülecektir. Bir bina soyut sözdizimi ağacı ve ayrıştırılmamış kurallar, ayrıştırma ağacını analiz ederek yerel optimizasyonların yapılmasına izin verdi.

Çıktı üretimlerinin incelenmemiş kurallara taşınması, dilbilgisi analizi ile kod üretimi arasında net bir ayrım yaptı. Bu, programlamanın okunmasını ve anlaşılmasını kolaylaştırdı.

CWIC

1968-1970'de Erwin Book, Dewey Val Schorre ve Steven J. Sherman CWIC'i geliştirdi.[4] (Derleyici Yazma ve Uygulama Derleyicisi) adresinde Sistem Geliştirme Şirketi Charles Babbage Institute for the History of Information Technology (Kutu 12, klasör 21),

CWIC, her biri çevirinin belirli yönlerinin açık bir şekilde tanımlanmasına izin vermeyi amaçlayan üç özel amaçlı, alana özgü dilden oluşan bir derleyici geliştirme sistemidir. Sözdizimi dili, kaynak metnin tanınmasını ve ondan bir ara metne dönüştürülmesini tanımlamak için kullanılır. ağaç yapı. Oluşturucu dili, üretimin dönüşümünü tanımlamak için kullanılır. ağaç uygun nesne diline.

Sözdizimi dili, Dewey Val Schorre'nin önceki meta derleyici satırını takip eder. En çok sahip olan TREE-META'ya benzer ağaç sözdizimi dilinde bina operatörleri. TREE-META'nın ayrıştırılmamış kuralları, aşağıdakilere dayalı nesne tabanlı üretici dili ile çalışmak üzere genişletilmiştir. LISP 2.

CWIC üç dil içerir:

  • Sözdizimi: Kaynak program girdisini dilbilgisi dönüştürme formülünü kullanarak liste yapılarına dönüştürür. Ayrıştırılmış bir ifade yapısı, bir kurala bir üretici çağrısının yerleştirilmesiyle bir jeneratöre geçirilir. Bir ağaç ilk elemanı bir düğüm nesnesi olan bir listeyle temsil edilir. Dilin operatörleri var, < ve >özellikle liste yapmak için. Kolon : operatör, düğüm nesneleri oluşturmak için kullanılır. :EKLE bir ADD düğümü oluşturur. Ünlem ! operatör, bir dizi ayrıştırılmış girdiyi bir düğümle birleştirerek ağaç . Sözdizimi kuralları ile oluşturulan ağaçlar, üreteç işlevlerine geçirilerek başarı veya başarısızlık döndürülür. Sözdizimi dili TREE-META'ya çok yakındır. Her ikisi de bir düğüm oluşturmak için iki nokta üst üste kullanır. CWIC'ler ağaç bina ünlem işareti! , TREE-META'nın [] işlevi ile aynıdır.
  • Jeneratör: Adlandırılmış bir dizi dönüştürme kuralı, her biri bir ayrıştırılmamış, örüntü eşleştirme kuralından oluşur. ve LISP 2 benzeri bir dilde yazılmış bir çıktı üretimi. çeviri IBM 360 ikili makine koduna yapıldı. Jeneratör dilinin diğer imkanları çıktı genelleştirilmiş.[4]
  • MOL-360: bağımsız orta seviye uygulama dili 1968'de geliştirilen ve temeldeki destek kitaplığını yazmak için kullanılan IBM System / 360 ailesi bilgisayarlar için.

Jeneratör dili

Jeneratörler Dil benzer anlambilimlere sahipti Lisp. Ayrıştırma ağaç özyinelemeli bir liste olarak düşünüldü. Jeneratör Dili işlevinin genel biçimi şöyledir:

  function-name (first-unparse_rule) => first-production_code_generator (second-unparse_rule) => second-production_code_generator (third-unparse_rule) => üçüncü-üretim_code_generator ...

Verilen bir işlemek için kod ağaç genel amaçlı bir programlama dilinin özelliklerini, artı bir form: , çıktı dosyasına (stuff) yayacaktı. Unparse_rule'da bir üretici çağrısı kullanılabilir. Üreticiye yerleştirildiği unparse_rule şablonunun elemanından geçirilir ve dönüş değerleri () 'de listelenir. Örneğin:

  ifade_gen (ADD [ifade_gen (x), ifade_gen (y)]) =>  serbest bırakma (y); dönüş x; (SUB [ifade_gen (x), ifade_gen (y)]) =>  serbest bırakma (y); dönüş x; (MUL [ifade_gen (x), ifade_gen (y)]) =>. . . (x) => r1 = getreg (); yük (r1, x); dönüş r1; ...

Yani ayrıştırılırsa ağaç (ADD [, ]) gibi görünüyor, expr_gen (x) ile çağrılacak ve x döndürülecek. Unparse kuralındaki bir değişken, production_code_generator'da kullanılabilen yerel bir değişkendir. ifade_gen (y) ile çağrılır ve y döndürür. İşte bir jeneratör çağrısı, ayrıştırılmamış bir kuralda bulunduğu pozisyondaki elemana geçirilir. Umarım yukarıdaki x ve y geri dönüşte yazmaç olur. Son dönüşümlerin bir atomik bir sicile yüklemesi ve kaydı döndürmesi amaçlanmıştır. İlk üretim, genel kayıtlardaki uygun değerlerle 360 ​​"AR" (Add Register) komutunu oluşturmak için kullanılacaktır. Yukarıdaki örnek, bir jeneratörün yalnızca bir parçasıdır. Her üretici ifadesi, daha sonra işlenecek bir değer olarak değerlendirilir. Son dönüşüm şöyle de yazılabilirdi:

               (x) => dönüş yükü (getreg (), x);

Bu durumda load, getreg () tarafından döndürülen kayıt olan ilk parametresini döndürür. load ve getreg işlevleri diğer CWIC üreteçleridir.

CWIC adreslendi alana özgü diller dönemden önce alana özgü dil var

CWIC yazarlarından:

"Bir meta derleyici, yaratıcı olmayan yönlerini, üretilen derleyicinin çevireceği dil ne olursa olsun aynı olan yönleri otomatikleştirerek derleyici oluşturma görevine yardımcı olur. Bu, bir derleyicinin özelliklerine uygun dillerin tasarımını mümkün kılar. Bu tür diller için işlemci üretme maliyetini, bir problemin çözümüne dil tasarımıyla başlamanın ekonomik olarak mümkün hale geldiği bir noktaya düşürür. "[4]

Örnekler

Ayrıca bakınız

Referanslar ve notlar

  1. ^ "ALGOL 60 için Sözdizimi Yönlendirmeli Bir Derleyici" Edgar T. Irons, ACM'nin İletişimleri Cilt 4 Sayı 1, Ocak 1961.
  2. ^ a b Meta derleyici: (bilgisayar Bilimi) Diğer programlama dilleri için derleyiciler oluşturmak için kullanılan bir derleyici."Bilim Teknolojileri Sözlüğü McGraw-Hill Bilimsel ve Teknik Terimler Sözlüğü, 6. baskı". McGraw-Hill Şirketleri.
  3. ^ a b c d Wikipedia, özgür ansiklopedi - Metaprogramlama
  4. ^ a b c d e f g h Kitap, Erwin; Dewey Val Schorre; Steven J. Sherman (Haziran 1970). "CWIC / 36O sistemi, derleyiciler yazmak ve uygulamak için bir derleyici". ACM SIGPLAN Bildirimleri. 5 (6): 11–29. doi:10.1145/954344.954345.
  5. ^ a b C. Stephen Carr, David A. Luther, Sherian Erdmann, TREE-META Derleyici-Derleyici Sistemi: Univac 1108 ve General Electric 645 için Meta Derleyici Sistemi, Utah Üniversitesi Teknik Raporu RADC-TR-69-83.
  6. ^ Peter Mosses, "SIS: Gösterge Anlamlarını Kullanan Bir Derleyici-Üretici Sistemi," Rapor 78-4-3, Bilgisayar Bilimleri Bölümü, Aarhus Üniversitesi, Danimarka, Haziran 1978
  7. ^ Komşular, J.M. Bileşenleri Kullanan Yazılım Yapımı. Teknik Rapor 160, Bilgi ve Bilgisayar Bilimleri Bölümü, California Üniversitesi, Irvine, 1980.
  8. ^ Howard Metcalfe, "Mekanik Dilbilime Dayalı Parametreli Bir Derleyici" Planning Research Corporation R-311, 1 Mart 1963, yine Otomatik Programlamada Yıllık İnceleme, Cilt. 4
  9. ^ Robert Ledley ve J. B. Wilson, "Automatic Programming, Syntactical Analysis Through Language Translation", Communications of the Association for Computing Machinery, Cilt. 5, No. 3 s. 145–155, Mart 1962.
  10. ^ A. E. Glennie, "Sözdizimi Makinesi ve Evrensel Bilgisayar Yapısı Üzerine", Teknik Rapor Numarası 2, AD 240–512, Hesaplama Merkezi, Carnegie Institute of Technology, 1960.
  11. ^ Schorre, D.V., META II sözdizimi odaklı bir derleyici yazma dili, 1964 19. ACM Ulusal Konferansı Bildirileri, s. 41.301-41.3011, 1964
  12. ^ Dewey, Val Schorre (1963). "Bir Sözdizimi - 1401 için Yönetilen SMALGOL". ACM Ulusal Konferansı, Denver, Colorado.
  13. ^ Meta I, 1963 Colorado ACM konferansında verilen makalede anlatılmıştır. SMALGOL'a bakın.
  14. ^ L. O. Schmidt, "The Status Bitt ACM SegPlan" Programlama Dilleri Özel İlgi Grubu "Çalışma Grubu 1 Haber Mektubu, 1964.
  15. ^ Roger Rutman, "LOGIK. A Syntax Directed Compiler for Computer Bit-Time Simulation", Master tezi, UCLA, Ağustos 1964.
  16. ^ F. W. Schneider ve (G. D. Johnson, "A Syntax-Directed Compiler-write, Compiler to generate Efficient Code", Computing Machinery for Association 19. Ulusal Konferansı Bildirileri, 1964
  17. ^ D. Oppenheim ve D. Haggerty, "META 5: Veri Dizilerini Manipüle Etmek İçin Bir Araç", Hesaplama Makineleri Birliği 21. Ulusal Konferansı Bildirileri, 1966.
  18. ^ Knuth Donald (1990). P. Deransart; M. Jourdan (editörler). "Nitelik Gramerlerinin Doğuşu" (PDF). Uluslararası Nitelik Gramerleri ve Uygulamaları Konferansı Bildirileri (Paris, Fransa). Bilgisayar Bilimlerinde Ders Notları. New York: Springer-Verlag. 461: 1–12. CiteSeerX  10.1.1.105.5365. doi:10.1007/3-540-53101-7_1. ISBN  978-3-540-53101-2.
  19. ^ Charles R. Kirkley ve Johns F. Rulifson, "The LOT System of Syntax Directed Compiling", Stanford Research Institute Internal Report ISR 187531-139, 1966.
  20. ^ George J. E. (1967a). Sözdizimi Çözümleyicisi, Tanıyıcı, Ayrıştırıcı ve Anlamsal yorumlama Sistemi, Stanford Doğrusal Hızlandırıcı Merkezi, 15 Kasım 1967.
  21. ^ Robert W. Gray et al., "Eli: Eksiksiz, esnek bir derleyici yapım sistemi." ACM'nin iletişimi 35: 2: 121-130, 1992; Ayrıca bakınız http://eli.colorado.edu/ Arşivlendi 28 Mart 2019 Wayback Makinesi
  22. ^ J.M. Foster, "Sözdizimi geliştirme programı." Bilgisayar Dergisi 11:1:31-34, 1968

daha fazla okuma

Dış bağlantılar