8/20/2019 Derleyicinin Tarihi
1/13
Derleyicinin Tarihi
Üzerinde assembly dili ile program yazılabilen ilk bilgisayarlar 1950’lerde üretildiler. Ancak assembly ile hızlı kod yazımı ve büyük pro elerin geli!tirilmesi "ok #z#n zaman alıyord#.
195$’te %ohn &ack#s ilk yor#mlayıcıyı üretti ancak b# assembly kod#ndan daha yava!"alı!ıyord#. 195'’da &ack#s ve arkada!ları( )*+,+A- dilinin ilk derleyicisini üretti inde isehız sor#n# a!ılmı! old#.
Derleyici
/n genel tanımı ile bir derleyici (compiler)( belli bir dille yazılmı! program metnini giri!olarak alan ve metnin anlamını bozmadan ba!ka bir dildeki program metinine d nü!türen bir programdır. süre" "eviri (translation) olarak adlandırılır. &ütün derleyiciler bir giri!
dilinden (kaynak kod) sadece bir "ıkı! diline (hedef dil) "eviri ger"ekle!tirir. radakikaynak kod dili ile yazılmı! bil dil olabilir. 2ede3 dil ise 4enti#m i!lemci serisi i"in makinekod# olabilir.
&ir derleyici elde etmek i"in derleyicinin kaynak kod#ndan meydana gelen ve derleyici i"in"alı!tırılabilir kodlar üreten ba!ka bir derleyici k#llanılır.
ekil61 otomatik "eviri paradigmasına
7ünümüzdeki derleyiciler otomatik "eviri paradigmasına #yg#n olarak geli!tirilirler. sebeple iki ana bile!enden ol#!#rlar8 aynak dil metninin analizini ger"ekle!tiren derleyicinin par"ası n6#" :3ront6end; olarak adlandırılırken hede3 dil sentezinin yapıldı ı arka6#" :back6
end; olarak adlandırılır.
8/20/2019 Derleyicinin Tarihi
2/13
ekil6<
Yorumlama
/ er ekil6or#mlama kar!ıla!ılan i3adenin her de3asında tekrar bütün dil yapısı i"inden b#l#n#p analizedilmesi gerekti inden dolayı derlemeden "ok daha yava!tır. n#nla birlikte e er bir hataylakar!ıla!ılırsa daha kaynak program üzerinde "alı!ılıyor ol#nmasından dolayı hatanın yerikolayca tespit edilebilir. da program geli!tirme de "ok büyük bir yardım sa lar.
8/20/2019 Derleyicinin Tarihi
3/13
ekil6$ =erleme ve >or#mlama ?üre"leri
Derlemede;
4rogram süreci nemlidir ?on#"lanan ara 3orm dü!ük seviyelidir :makine kod#;
>or#mlama mekanizması donanım i!lemcisidir.4rogram @yg#laması kıyasla hızlıdır
Yorumlamada;
4rogram #yg#laması minim#md#r ?on#"lanan ara 3orm yüksek seviyelidir >or#mlama mekanizması programdır 4rogram #yg#laması kıyasla yava!tır.
İyi ir derleyicinin !zellikleri
yi bir derleyicinin en nemli zelli i do r# kod üretebilmesidir. &ir derleyicinin dilinzelliklerine tamamen #yması da nemlidir.
=erleme hızı da bir kon#d#r 3akat "ok nemli de ildir. ü"ük programların hızlı makineler üzerinde birka" saniyede derlenebilirler. =aha büyük programlama pro eleri genellikle alt programlarda organize edilirler :modüller( kütüphane yordamları vb.;. b#nlar derleyici birimleri olarak adlandırılırlar. derleme birimlerinden her biri ayrı ayrı derlenebilir.
8/20/2019 Derleyicinin Tarihi
4/13
=erleyici büyüklü ü hemen hi" nemli bir kon# de ildir. gün bir"ok bilgisayarda bellek problemi yokt#r.
&ir derleyicinin k#llanıcı dost# olması hata raporlama kalitesi ile l"ülebilir. 2atanın nedeninii"eren a"ık bir mesa k#llanıcıya s#n#lmalıdır. 7er"ekten iyi bir hata tanımlaması vermek genelde zor ya da imkBnsızdır.
2ızın ve üretilen kod#n zelli inin nemi tamamen derleyicinin amacına ba lıdır.
"asit "ir Derleyici Yapısı
&asit bir derleyici en az bir s zcük analizi :leCical;( bir s zdizimi analizi :syntaC; ve bir i"erik
y netimi :conteCt handler; blo #ndan ol#!#r. süre" n6#" :3ront6end; olarak adlandırılır.
&ir programlama dilinin tercüme edilmesinin birka" mantıksal evresi vardır. evreler e!zamanlı ve ardı!ık zamanlı olarak "alı!abilirler.
ekil6D &asit bir derleyici yapısı
#e$ical %naliz EscannerF da denir. =erlemenin ilk evresidir ve tek ba!ına metin i"erisindeanlamı olmayan karakterleri mantıksal olarak gr#p yapar. Grne in HI’( H2’( HJ’( HK’ ve H/’har3lerinin EI2JK/F kelimesini ol#!t#rabilece i a"ıktır.
8/20/2019 Derleyicinin Tarihi
5/13
&ynta$ %naliz &ütün programı analiz eder ve leCical analiz de yapılanın bir üst evresiniger"ekle!tirir. evrede scanner’ın ol#!t#rd# # kü"ük gr#pları :token; daha büyük gr#plarad nü!türür. Lesela i3adeler( d ngüler( altprogramlar gibi... nlar ana programı ol#!t#r#r.
rnekte ayrı!tırma i!lemini kolayla!tırmak i"in H:H ve H;’ sembolleri k#llanılmı!tır.*perat r olarak da sadece HM’ ve HN’ operat rleri k#llanılmı!tır. radaki yapı $( :5NO; ve:
8/20/2019 Derleyicinin Tarihi
6/13
"asit "ir Derleyici ' & zc k %nalizi
&ir leCical analiz aracı !# ü" !eyi yapabilmelidirR
1. &ütün bo!l#kları ve a"ıklamaları temizlemeli(
8/20/2019 Derleyicinin Tarihi
7/13
"asit "ir Derleyici ' &ynta$ %nalizi
>apısal programlamada ortaya "ıkan iki temel g rev vardırR
7irdiyi anlamlı alt par"alara ayırmak
alt par"alar arasındaki ili!kiyi ortaya koymak(
? zdizimi analizindeki hede3 elimizdeki tokenlerden ol#!an listenin dilin s zdizimine #yg#nol#p olmadı ını belirlemektir. Ayrıca ? zdizimi analizin g revi bir A?,’nin giri!iniyapılandırmaktır. A!a ıdaki gramer yapısı iki basit &oolean ok#ma yordamı ile ok#nabilir.
8/20/2019 Derleyicinin Tarihi
8/13
4arseQoperator :;TTTTTTTTTT.operator i"in
4arseQeCpression :;TTTTTTTTT.eCpression i"in
2er iki yordamda a!a ıdaki kod satırlarında g sterilmi!tir ve ayrı!tırıcının sürücüsü4arseQeCpression:; i"in ba!langı" "a rısını i"erir.
8/20/2019 Derleyicinin Tarihi
9/13
8/20/2019 Derleyicinin Tarihi
10/13
2er bir yordam anlamsal yapıyı ok#maya "alı!ır. i!lemi ger"ekle!tirirken !# y ntemleri#yg#lar8 - i"in yordam sıradaki -’nin alternati3lerini ok#maya "alı!ır. 2er bir alternati3 A i"inon#n ilk elemanı A1’i ok#maya "alı!ır. / er A1 b#l#n#rsa yordam A’nın do r# se"enek old# #n# ve sonra di er A’nın elemanlarının varlı ının gerektirece ini dü!ünür.
/ er yordam b# y ntemle anlamsal yapıyı ok#yabilirse bir "ıkı! parametresi olarak A?,’ye#yg#n gelen bir i!aret"i sa lar :"ıkı! de erinin saklanması i"in;. / er yordam -’nin her hangi bir alternati3inin ilk üyesini b#lamazsa hi"bir giri! alamaz ve bir "ıkı! parametresi üretemez:ret#rn 0;.
8/20/2019 Derleyicinin Tarihi
11/13
yakla!ım recursive descent parsin+- olarak adlandırılır. Uünkü 3onksiyonlar ayrı!tırmaa acını k#rmak i"in a!a ıya do r# tekrarlanıyor. y ntem old#k"a zayı3 bir ayrı!tırmay ntemidir.
,eoride( 3arklı anlamsal yapıların A?,’leri i"in 3arklı dü üm tiplerine sahip olabilmemizera men onların sını3larda gr#plandırılması ve b# sını3ların her biri i"in yalnızca bir dü üm tipi
olması daha #yg#nd#r. ayrı!tırma a a"ları arasındaki 3arklardan biridir.
Uok daha zelde( bizim rne imizde bir i3adedeki bütün dü ümler EeCpressionF tipindedir ve b# tipteki dü ümlerin ayrımı i"in her bir dü üm bir EtypeF zelli i alır :H=’ digit( H4’ parantez;. EtypeF bize dü ümlerin geri kalanındaki alanların nasıl yor#mlanaca ını s yler.&a!ka bir yor#mlama Ekod üreteciF ya da Eyor#mlayıcıF i"in gereklidir.
=ü üm tipi EeCpressionF’ın tanımlanması ile ba!lık dosyası :header 3ile; !ekildeg sterilmi!tir.
8/20/2019 Derleyicinin Tarihi
12/13
8/20/2019 Derleyicinin Tarihi
13/13
odeQgenQeCpression :; yordamı parametresinin niteli ini :type ; on#n bir digit dü ümü müyoksa bir parantez i3adesi dü ümü mü old# #n# kontrol eder. 2er iki d#r#mda da yı ının enüstüne olası de eri koymak i"in kod üretmek zor#ndadır. / er giri! dü ümü bir digit dü ümseyordam de eri direk olarak dü ümden elde eder ve yı ının üzerine eklemek i"in kod# üretir.&ir 4@?2 kom#t# üretir. ,am tersi giri! dü ümü bir parantez i3adesi dü ümüyse yordam
ncelikle le3t ve right i!levleri i"in kod üretecektir ve daha sonra A== ya da L@K,kom#tlarını üretecektir.
7iri! olarak :