|
Abruzzi
|
 |
« : Mayıs 14, 2008, 11:20:14 ÖÖ » |
|
BÖLÜM I
GİRİŞ Pascal dili ile pascal derleyicisi ayrı şeylerdir. Birisi kullanıcının istediği programı yazdığı bir ortam diğeri ise bu programlama dilinde yazılmış olan programı çalışır hale getiren işleticidir. Bu nedenle öncelikle bu bölümde, pascal programının genel özelliklerinden ve yazılmış bir programın algoritmasından bahsedilmiştir. Pascal derleyicisi ile ilgili bilgiler ise bir sonraki bölümde verilmiştir.
PASCAL PROGRAMLAMA DİLİ 1.1 Pascal Programlama Dili yapısı Pascal Programlama Dili yapısı, genel olarak üç ana bölümden oluşur.
1.1.1 Ana Bölümler
1.1.1.1 Program Başlığı – Headings- Program ifadesiyle verilen ve program amacını açıklayıcı tanım adıdır. En fazla 30 karakter uzunluğunda olabilir. (Alt Program) AP ve (Fonksiyonel Alt Program) FAP bloklarına erişim için verilen blok isimleri de birer başlıktır. Bu başlık dökümantasyon amacı ile kullanılır ve zorunlu değildir.
1.1.1.2 Bilgi Tanıtım Bölümü –Declarations- Program içinde kullanılacak bilgilerin, karakter olarak yapıları ve aktarılarak kullanılacakları değişken isimlerinin, tanımlarının yapıldığı bölümdür. Belirli bloklarda tanımlanırlar:
ünite (unit), kullanılacak arşiv bölümleri ((kab),(uses)), paragraf (label), sabit (const), tip (type), değişken (var), alt program ((ap),(procedure)), fonksiyonel alt program ((fap),(functıon)).
1.1.1.3 Program İşlem Blokları Programın amacına yönelik yapılacak işlemlerin, bloklar halinde tanımlandığı bölümdür. Programın çalıştırılması sonucu, işlenen bilginin hangi ortama verileceği belirtilir.
1.1.2 Genel Yazım Kuralları
En basit şekliyle bir Pascal programı, BAŞLA ifadesiyle başlar, SON ile biter. Her programlama dilinde olduğu gibi, programcı kullandığı programlama dilinin kurallarına göre yazılımı yapar. Pascal programlama dilinde, uyulması zorunlu olan kurallar aşağıda verilmiştir: 1. Programda kullanılacak bilgiler, karakter tipleriyle tip tanımlama ifadelerinde mutlaka isimlendirilerek verilmelidir. 2. Programda, işlemlerin aktarılacağı değişkenler mutlaka tanımlanmalı ve başlangıç değeri verilmelidir. 3. Programcının vereceği isimler, Pascal RESERVED WORDS (ayrılmış kelimelerden) olmamalıdır ve en fazla 30 karakter uzunluğunda olmalıdır. 4. İsimler alfabetik bir karakter ile başlamalıdır. Diğer karakterler, alfabetik veya rakam olabilir. Karakterler arasında, özel işaret olarak sadece “underline” (alt çizgi) kullanılabilir. 5. Her Pascal cümlesi ”;” ile bitmelidir.(başla, değişken, tip,sabit paragraf,yap gibi blok başlatan deyimler sonunda kullanılamaz.) 6. İfadeler arasında, birden fazla bırakılan boşluk, tek bir boşluğa eşdeğerdir. 7. İşlemler belli bir sıraya göre, bir birini takip eden veya iç içe bloklar halinde yazılır. 8. Pascal’da, büyük küçük harf ayrımı yoktur. Bu bakımdan komut, deyim ve ifadelerin yazılımları rahat bir şekilde yapılabilir.
1.1.3 Tanımlama Bloğunun Bölümleri
ÜNİTE (UNIT): Harici programlar adlandırılır. KULLANILACAK ARŞİV BÖLÜMLERİ (KAB) (USES): Kullanılacak arşiv programlar tanımlanır. PARAGRAF (LABEL): Paragraf isimleri tanımlanır. SABİT (CONST): Değişmez bilgiler tanımlanır. TİP (TYPE): Bilgi tip tanımları verilir. DEĞİŞKEN (VAR): Değişkenlerin tanımlanmasında kullanılır. ALT PROGRAM (AP) (PROCEDURE): Alt program blokları tanımlanır. FONKSİYONEL ALT PRUGRAM (FAP) (FUNCTION): Fonksiyonel alt programlar tanımlanır.
1.1.4 Veri Tipleri
1.1.4.1 Sayısal Veri Tipleri
(Byte) btamsayı : 0-255 arasındaki 256 değeri, bellekte bir byte (8 bit) uzunluğunda bir alanda saklayan bilgi tipidir. (Shortint) stamsayı : -128 ile +127 arasındaki işaretli değerleri, bellekte bir byte (8 bit) uzunluğunda bir alanda saklayan bilgi tipidir. (Integer) tamsayı : -32768 ile +32767 arasındaki işaretli sayısal değerleri, bellekte 2 byte (16 bit) uzunluğunda bir alanda saklayan bilgi tipidir. (Word) wtamsayı : 0 ile +65535 arasındaki işaretsiz sayısal değerleri, bellekte 2 byte (16 bit) uzunluğunda bir alanda saklayan bilgi tipidir. (Longint) ltamsayı : -2147438648 ile +2147438647 arasındaki işaretli sayısal değerleri, bellekte 4 byte (32 bit) uzunluğunda bir alanda saklayan bilgi tipidir. (Real) reel : Ondalık sayılar için kullanılan bilgi tipidir. Değişkenlere 2.9*10E-39 ile 1.7*10E+38 arasındaki aktarılabilecek işaretli bir değerleri, bellekte 6 byte (48 bit) uzun-luğunda bir alanda saklayan bilgi tipidir. (Single) sreel : Kısa reel olarak ta adlandırılır. Aktarılabilecek bir değerleri, bellekte 4 byte (32 bit) uzunluğunda bir alanda saklayan bilgi tipidir.7 veya 8 haneli rakamlara duyarlıdır. (Double) dreel : Uzun reel olarak ta adlandırılır. Aktarılabilecek bir değerleri, bellekte 8 byte (64 bit) uzunluğunda bir alanda saklayan bilgi tipidir.15 veya 16 haneli rakamlara duyarlıdır. (Extented) ereel : Aktarılabilecek bir değerleri, bellekte 10 byte (80 bit) uzunluğunda bir alanda saklayan bilgi tipidir.19 vey 20 haneli rakamlara duyarlıdır.
1.1.4.2 Alfasayısal Bilgi Tipleri
(Boolean) mantıksal : Bir mantıksal iş sonucu kontrolünde kullanılan, doğru veya yanlış değeri alan bilgi tipidir. Genellikle koşul cümlelerinde kullanılırlar.
(Char) tekkarakter :tek bir karakterin tanımlanmasında kullanılırlar. 0- 255 arası ASCII bir değer alırlar. Bilgiyi, bellekte 1 byte (8 bit) uzunluğunda bir alanda saklayan, bilgi tipidir.
(String) karakterler : Programda kullanılacak alfa sayısal bilgilerin, aktarılacakları değişken tiplerini, uzunluklarıyla tanımlar. 1-255 arası uzunlukta bir karakter dizisidir.
1.1.5 Alt Program ve Fonksiyonel Alt Program Yapısı
Fonksiyonel Alt Program (FAP)
Şekil 1.1 Alt Program veya Fonksiyonel Alt Program Diyagramı Örnek: fap a:reel; değişken b:reel; başla yaz(‘Bir sayı yazınız:’); satıroku(b); a:=b; son;
Şekil 1.2 Basit Türkçe Pascal Diyagramı
Örnek: Program rapor; değişken m:reel; . fap a:reel; değişken b:reel; başla yaz(‘Bir sayı yazınız:’); satıroku(b); a:=b; son; ap rapor_çıktısı; . ap hesap(x:reel); . başla m:=a; rapor_çıktısı; son.
1.1.6 Sabitler 1.1.7 Alt Programlar 1.1.8 Fonksiyonel Alt Programlar
(False) Yanlış (Arctan) Arctan (Append) Dosyaaç (True) Doğru (Eof) Dosyasonu (Close) Dosyakapa (Maxint) mtamsayı (Ln) Satır (Erase) Dosyakaldır (Sin) Sin (Delete) Sil (Cos) Cos (Exit) Çıkış (Sqrt) Kökal (Inc) Birarttır (Sqr) Kareal (Randomize) Rastgele (Read) Oku (Readln) Satıroku (Write) Yaz (Writeln) Satıryaz
1.1.9 Bazı Ayrılmış Kelimeler (And) Ve (Goto) Git (Set) Küme (Array) Dizi (İf) Eğer (Then) İse (Begin) Başla (İn) İçinde (Type) Tip (Const) Sabit (Label) Paragraf (Until) Ekadar (Div) Böl (Mod) Mod (Var) Değişken (Downto)Aşağı (Nil) Boşluk (While) Şstk (Else) Değilse (Not) Değil (Whit) İle (End) Son (Of) Nin (File) Dosya (Packed) Veya (For) Döngü (Procedure) Ap (Forward) İleri (Program) Program (Function) Fap (Repeat) Şsmtk
Fap : Fonksiyonel Alt Program Ap : Alt Program Şsmtk: Şart SağlanMıyorsa Tekrar Komutu Şstk: Şart Sağlanıyorsa Tekrar Komutu
1.2 Basit Bir Pascal Programının Çalışma Algoritması
Bu kısımda ise, Pascal’da yazılmış basit birkaç fonksiyonu yerine getiren, öğrenci takip programının bilgisayar tarafından nasıl işletildiği anlatılmaktadır. Giriş komutu verilen dosya (öğrenci takip programı) içerisindeki diziden, kayıtlar belleğe kopyalanır (alt program olarak çalışan, dosya okuma bölümü sayesinde). Eğer dosyalar başarılı olarak yüklenmedi (kopyalanmadı) ise, başarısız yükleme mesajı ekranda gösterilir. Değilse, aşağıdaki durum izlenir: 1. Alt program, işlenecek kayıtları çağırır. Kullanıcı tarafından, kayıtlar işlenmeye tabii tutulur (kayıtlar güncellenir). 2. İşlem tamamlandıktan sonra alt program yazma dosyası, güncelleştirilmiş diziyi kop-yalar. Sonra, kayıtlar dosyanın içine tekrar döndürülür.
1.2.1 1. Düzey Algoritmalar
1.2.1.1 Dosya Okuma : 1. Giriş için dosya açılır. 2. Sayısal kayıt sayacı sıfırlanır ve mantıksal değişken hatası da sıfıra eşitlenir. 3. Kütük sonu değilse ve hata yoksa aşağıdaki yol izlenir: Eğer sayısal kayıt α dizisi limitinden ise; a)Sayısal kayıt sayacı 1 arttırılır. b)Dosya içindeki, öğrenci dizisi bölgesindeki kayıtlar tek okunur. Koşul sağlanmıyorsa; Hata 1’e eşitlenir, dosyaya, başarılı değil sinyali yüklenir. 1.2.1.2 Kayıtların İşlenmesi: 1. İlk pozisyon alınır. Kaydı Bulup Getirme (Retrive) Kaydı Değiştirme (Modify) Güncellenen Kaydın Yazılması (Print Report) Çıkış (Quit) 2. Durum ≠Q yani çıkış durumu yoksa aşağıdaki işlemler yapılır: a) eğer uygun olan durum seçili ise bu duruma uygun olan alt program çağrılır, seçenek hareket işlemcisine aktarılır. İstenilen işlem yapılır. b) işlem yapıldıktan sonra yeni durum girişi tekrar yapılır. Q durumu seçilene kadar bu işlem tekrarlanır.
1.2.1.3 Dosyanın Yazılması: 1. Güncelleme için kütük açılır. 2. Index’in 1. elemanı için sayısal kayıt sayacı 1’den başlatılarak aşağıdaki durum izlenir. Dosya içine, öğrenci dizisinin1. elemanı yazılır.
1.2.2. 2. Düzey Algoritmalar
1.2.2.1 Kaydın Bulunup getirilmesi: 1. Öğrenci numarası girilir. 2. Arama alt programı, öğrenci dizisi içindeki aranan kayıt numarasını dizi içinde arar. 3. Eğer öğrenci kaydı bulundu ise yeni çağrılan kayıt gösterme alt programı, kaydı ekranda gösterir. Değilse, kayıt bulunamadı hata mesajını ekrana yazar.
1.2.2.2 Kaydın Değiştirilmesi: 1. Öğrenci numarası girilir. 2. Arama alt programı, öğrenci dizisi içindeki aranan kayıt numarasını dizi içinden arar. 3. Eğer öğrenci kaydı bulundu ise yenileme alt programı çağrılır, kayıt yenilenir. Değilse, kayıt bulunamadı hata mesajını ekrana yazar.
1.2.2.3 Güncellenen Kaydın Yazılması: 1. Rapor için başlık yazılır. 2. Index’in 1. elemanı için sayısal kayıt sayacı 1’den başlayarak aşağıdaki durumu izler: Öğrenci dizisi içindeki 1. Kayıt ekranda gösterilir. 1.2.3 3. Düzey Algoritmalar 1.2.3.1 Kaydın Ekranda Gösterilmesi: Bir öğrencinin, kayıt alanı ile ilgili çıktı işlemi kabul edilebilir bir biçimde geleneksel bir düzenleme ile ekrana yansıtılır. 1.2.3.2 Kaydı Güncelleme: 1. İlk alt seçenek alınır. N--Not Değişikliği O--Ders Ortalaması M--Maddi Durum D--Güncellemeyi Durdurma 2. Alt seçenek # 0 ise aşağıdaki yol izlenir. a) Bu, kayıt alt seçeneğine göre N, O, M veya D tek karakteri yeni bir değer olarak okunur. b) Bu işlem yapıldıktan sonra yeni durum girişi tekrar alınır. (Bu işlemler D seçilene kadar tekrarlanır.)
BÖLÜM II
ÇEVİRME İŞLEMLERİ
Kaynak programın bir çeşit aracı program kullanılarak amaç programa tercüme edilmesi işlemine çevirme denir. Genel olarak, düşük düzeyde yazılan bir programı makine diline çevirmek için Assembler kullanılırken, üst düzeyde yazılan programlar makine diline çevrilirken farklı tipte bir çevirme işlemine tabii tutulur. Bu işlemi yapan iki tip program vardır. Bunlar yorumlayıcı ve derleyicidir.
2.1 Derleyiciler (Compiler) Derleyici, üst-düzey dillerde yazılan programları makine diline, Assembly diline veya bazı ara dillere çeviren aracı programdır. Eğer kullanılan derleyici ilkin assebly dilinde bir program üretiyorsa daha sonra assebly dili, makine dilinde program üretiminde kullanılmalıdır.
Şekil 2.1 Derleyici ve yorumlayıcı ayrı ayrı veya birlikte çalışabilir.
Derleme işlemi için kaynak kodları üzerinde, aşağıdaki işlevlerden tümünü veya bazılarını yapmak için yedi defa geçiş yapılabilir. 1. Anahtar kelimeleri veya operatörleri tespit etmek için kelime analizi ( lexical analysis). 2. Her ifadenin tipini ve düzetmelerini tespit etmek için söz dizim analizi ( syntactic analysis). 3. Hata kontrolü, kaydedici ataması ve optimizasyona yardımcı olacak ifadeler arasındaki ilişkiyi bulan akış analizi. 4. Toplam komut sayısını azaltmak için optimizasyon. 5. Assembly veya makine dili için kod üretilmesi. 6. Program listesinin üretilmesi. Derleyici, Assembly dili kullanılarak, üretilen komuttan iki ile beş katı daha çok komut üretebilir. Bu durum ilave bellek gerektirebilir ve icra zamanı daha yavaş olabilir. Bu ihtiyaç bazı uygulamalarda mahzur olarak kabul edilmeyebilir. Program çok karmaşık olduğunda, eğer program Assembly dilindeyse, program asla icra edilmeyebilir. Üst düzey dille programlamada orta ve büyük uzunlukta programlar yazılabilir ve debug edilmesi hızlıdır. Derleyici, bilgisayarda ROM’da bulunan programlar veya alt programlardan oluşur. Pascal dilinde yazılmış bir program ise RAM’da girilmiştir. Derleyici programı tarayarak ilk görevi olan anahtar kelimeleri ve operatörleri tespit eder (Lexical analysis). Konu ile ilgisi olmayan tüm detayların (açıklamalar vs.) ve boşluklar yok edilir. Kalan kısım, özel işaretlerle ifadelere bölünmüş özlü bir program halini alır.
ROM
X.OBJ
Şekil 2.2 Basit Bir Derleyicinin Yapısı
Aşağıda, Pascal ile yazılmış basit bir örnek program ele alınmaktadır. Aslında program sayılmayan bu dizinin, derleme esnasında nasıl bir davranış gösterdiği işlenmektedir.
begin int x; x:=3; writeln(x); end;
Hataların gözlenmesi ve gereksizliklerin azaltılmasından (lexical analysis) sonraki adım ise kısa ve özlü bir program üretimidir. Bu özlü program aşağıda görülmektedir. Dizideki noktalı virgül işareti satır sonunu göstermektedir.
Begin int x; x:=3; writeln(x); end;
Bir sonraki sentaks (syntax-yazılım hatası) analiz adımında, her Pascal satırındaki tipler belirlenir ve düzeltmeler yapılır. Sentaks analizinde ise program yazımı sırasında yazım hataları yapıldığında bu adımda düzeltilir. Mesela Pascal dilinde satırdaki ; işareti unutulur ya da yazılmazsa yazı yazdırılmaz ve bir sentaks hatası ortaya çıkar, veya writeln(x); satırındaki x yazılmazsa yine buna benzer eksik yazılım olursa sentaks hatası ortaya çıkar. Programdaki her satırın formatı, komut ve işlenenden oluşur. Bu satırlar kontrol edilerek herhangi bir hata kodu ekranda görüntülenir. Programdaki değişkenler Assembly dilinde daha sonra değişken olarak listelenir. Her değişken, sembolik adresleri ve uzunluklarıyla verilir. Talimatlar listesine girilecek sayıların durumuna göre bayt olarak direktifler eklenir (yuvarlanmış bir sayı için gerekli olan yerin beş bayt olarak ayrılması gibi). Sembolik adreslerin tipleri, bazı adresler satır numarası olacak şekilde, bazıları da bir, iki veya üç karakterlik kareler kodu olacak şekilde kaydedilir. Her talimat, veriler için ayrılmış RAM alanında adres olarak atanır ve derlenen listenin sembolik adresi, sembol tipi ve mutlak adresi RAM’de depolanır. Bu listeye genel olarak Dictionary denir. Yukarıda yazılan basit PASCAL programı derlendiğinde, derleyici, bir satırdaki komuta Assembly dilinde bazen birkaç adet komut üretir. Yine bazı PASCAL ifadeleri, talimatlarda listelendiği gibi programda gözükmez. Bundan dolayı, Assembly dilinde yazılan bir programın karşılığı olan PASCAL dilindeki program çok daha uzun olacaktır. Assembly dilinde üretilen program, belki gerekenden fazla uzun olabilir, fakat derleyici, PASCAL dilindeki ifadeleri çevirmek için standart bir teknik kullanmaktadır. Birçok derleyici, programı gereksiz işlemlerden arındırmak ve çevirme işlemindeki verimi yükseltmek için ilave optimizasyon programları kullanırlar ki; bunlar sonuca hızlı ulaşılmasını sağlar. Benzer programlar derleyicinin büyüklüğünü ve karmaşıklığını artırırlar.
Bütün bu işlemlerden sonra assembly dilindeki program, son olarak makine koduna çevrilerek amaç kodu üretilir. Bazen derleyicideki assembler gerekli olmayabilir. Derleyici, makine kodunun bulunduğu bir derleyici dili veya MIB’in (Mikroişlemci Biriminin) üzerinde çalışabileceği kodlar üretebilir. Bu dile taban (base) dili denilir.
Bazı derleyiciler, PASCAL programını değiştirerek makine kodu üretebilirler. Komutlar bir anda verilir, tüm program bir anda makine diline çevrilir. Yani iş bir anda hızlı bir şekilde yapılır. Sonuç olarak derleyicinin amacı, RAM’da depolanmış PASCAL programından bilgisayarda çalışabilecek mutlak adresli bir makine kodunun üretilmesidir.
2.2 Yorumlayıcılar (Interpreter) Çoğu bilgisayarlar, derleyici yerine bir yorumlayıcıya (interpreter) sahip olmayı isterler. Daha önceleri bazı büyük bilgisayarlarda ve çok büyük bilgisayarlarda daha çok derleyiciler kullanılmaktaydı, diğer bilgisayarlarda daha çok yorumlayıcılar kullanılmaktaydı. Fakat günümüzde, PC tipi bilgisayarların hızının eski tip büyük bilgisayarların hızını geçmesi derleyicilerin bunlarda da kullanımını mümkün kılmaktadır. Yorumlayıcı, bir programdaki satırı bir anda bir satır işlemiyle yorumlar. Yani satırlar tek tek yorumlanarak amaç programa erişilir. Bir satır başarılmadan sonraki satıra geçilmez. Yorumlayıcı, değişkenler kütüphanesini ve onların adreslerini derler ve çevrilmiş program satırının gerekli olduğu yerlere mutlak adresi sıkıştırır. Yorumlayıcı tarafından ele alınmış bir program, derlenmiş bir programdan daha yavaş çalışır ve optimizasyon mümkün değildir. Bu özellik, hızlı etkileşimli uygulamalarda ve debug işlemlerinde faydalıdır. Bununla birlikte, yorumlanmış bir program, derlenmiş bir programdan daha kısa olmasına rağmen bellekte daha az yer kaplar. Bu faktör, sınırlı belleklerle çalışan ve genişletilmesi öngörülen bilgisayarların tasarımında önemli bir yer tutar. Benzer olarak hata ayıklamalarında yorumlayıcı , derleyiciden daha az başarılıdır. Yorumlayıcı, her ifadeyi bellekte yerini alacak makine dili kodlarına çevirmez ve bundan dolayı da amaç program üretmez. Program satırlarının çevrilmesi sırasında üretilen makine kodu silinirken satır ifadeleri işletilir. Yorumlayıcıda, bir satırdaki hata düzeltilmeden diğer program satırına geçilmez. Bu durum aşağıdaki şekilde detaylı olarak gösterilmiştir. Ayrıca yorumlayıcı, üst düzey komutları alarak her bir ifadeyi çalıştıracak ön tanımlamalı makine komutları dizisine referanslar. Bu dizi, sadece okunan veya gelişi güzel erişimli bellek tiplerinde depolanmalıdır. Bütün diziler ve bakış tabloları, RAM’deyken, yorumlama işi disk veya disketten RAM’de yazılım yüklemeli olarak yürütülür.
ROM
Çevirme
RAM RAM
Sonraki Satır
Şekil 2.3 Basit Bir Yorumlayıcının Yapısı
Yorumlayıcı, bir çok endüstriyel üretimde kullanıldığından, ROM’da monitör program (firmware) olarak tutulur. Üst düzey diller, genellikle derleyici kullanırken Basic gibi diller yorumlayıcı kullanırlar. Yorumlayıcının ifadeleri ve kaynak kodlarının makine diline tek tek çevrilmesi, etkileşimli kullanım için en uygun yoldur. Fakat benzer uygulamalarda, hata mesajlarını çözmek programcıya düşerken, ,iş de yavaşlar. Eğer hata mesajı kriptik ise bu tip hatalar aşağıdaki örneğe yakın bir şekilde ortaya çıkar. Syntax error 40, line 20 yani hatanın hangi satırda olduğunu belirtir ve kürsör gidip o satırın başında bekler. yukarıdaki hataya bakılarak çevirme işi sırasında sonraki satırın yorumlanmasına geçmeden önce, satır numarası ve hata kodu verilen bu hata programcı tarafından giderilir. Hatanın olduğu kısma kadar çalıştığı kesindir.
Yorumlayıcı kullanıldığı zaman istenilen değişiklik program üzerinde yapılabilir ve program derlenmeden çalıştırılabiliyor. Bu yüzden program geliştirme esnasında çok kullanışlıdır. Turbo Pascal’da hem yorumlayıcı hem de derleyici mevcuttur.
2.2 Derleyici ile Yorumlayıcı Arasındaki Farklar Yorumlayıcı da satırlar tek tek yorumlanarak amaç programa erişilir. Mikroişlemci hızı düşük bilgisayarlarda, genelde yorumlayıcılar kullanılır. Çalışma hızı yavaştır. Bir satırdaki hata düzeltilmeden, diğer satırın yorumlanması işemi yapılmaz. Yorumlanmış bir program, bellekte daha az yer işgal eder. Satırlar tek tek yorumlanarak amaç programa erişilir. Program geliştirmede çok kullanışlıdır. Derleyici de satırlar bir anda yorumlanarak amaç programa erişim sağlanır. Tüm program bir anda derlenebilir. Mikroişlemci hızı yüksek bilgisayarlarda daha çok derleyici kullanılır. (Günü-müz PC’lerinde işlemci hızı yüksek olduğundan, artık hem derleyici hem de yo-rumlayıcısı olan programlar kullanılmaktadır.) Hata ayıklamalarında derleyici daha başarılıdır. Derleme işi çok hızlı gerçekleşir. Derlenmiş program, bellekte daha fazla yer kaplar.
Aşağıda, derlenmiş ve yorumlanmış program akışları arasındaki farkı anlatan algoritmalar verilmiştir.
Problem
Algoritma Geliştirme
Program
Bilgisayara Gir Düzeltme Yap
Evet Hata Var Mı? Hayır
Tamamla
Şekil 2.4 Yorumlanmış Program Akışı
Problem
Algoritma Geliştirme
Program Yaz
Bilgisayara Gir Düzeltme Yap
Derle
Evet Hata Var Mı? Hayır Evet Hayır Amaç Kodu Yükle Sentaks Hatası
Çalıştırmaya Başla
Evet Hata Var Mı? Hayır
Tamamla
Şekil 2.5 Derlenmiş Program Akışı
2.4 Derleyiciyi Oluşturan Unsurlar
Şekil 2.6 Derleyiciyi oluşturan unsurlar
Entry program: Herhangi bir programlama dilinde yazılmış olan programın, herhangi bir işleme tabi tutulmadan önceki durumudur. Yani yazılan programın, çalışabilir hale gelmesi için derlenmeye hazır durumudur.
Look-up table: Değişken türlerinin yazıldığı tablodur. Örneğin, tamsayı tanımladığımız bir değişkeni ilerde kesirli sayı olarak kullanmak istersek program hata verir. Hata mesajınıda bu tabloya bakıp verir.
Lexical Analysis: Derleyicinin dikkate almayacağı gereksiz karakterlerden, programı ayırma işlemidir(Boşluk, kullanılan programa dilinin tanımadığı özel karakterler gibi).
Code Generator: Kullanılan makinaya alt kodları üretir, 8086 kodu gibi.
Sentaks (syntax): Bir dilin sentaksı, o dil içerisinde yer alabilecek harflerin oluşturduğu sonlu sayıdaki kelimeler diye tanımlanabilir. (Eğer sınırlama getirdiysek sonlu sayıda olur). Eğer bir dil sonlu bir dilse, yani sonlu karakterlerden oluşuyorsa, mesela AAA 3 tane A ile sınırlandırılmıştır.
Ayrıca, burada kullanılan kelimelerin gramer hatasının olup olmadığının kontrolünün yapı-ldığı bir bölümdür. Grammer: Bir dilde cümleler oluşturabilmek için ortaya konulan kural-lardır.
Semantic: Bir dile ait olan cümlelerin anlamlı olup olmadıkları o dilin semantic açıdan incelenmesi ile anlaşılır. Mantıksal hataların arandığı bölümdür. Programlama dili tasarımcının uygun gördüğü bir mantıkla yazıldığından bu mantık kurallarına göre işler.bu açıdan, bir programlama dilinden her zaman semantic olması beklenemez.
Yazılan programın sentaks ve semantik (anlam) olarak analiz edilmesi gerekir. Bu iş-ler bütününe derleme denir.
2.4.1 Küme Teorisi (Set Theory)
A= {1,2,3,4} B= {2,5,7,9} gibi iki küme olsun. A U B= {1,2,3,4,5,7,9} A B = {2} {1,2} {3,4,5}= (Boş küme) A= {2,4,9,8} B= {X X є A ve X çift sayı} B= {2,4,8} Alfabe: (A*) A içerisinde yer alan tüm karakter dizisi kümelerini oluşturan ve A’da yer alan semboller topluluğudur (Türkçe Pascalda windows bir Q klavyede bulunan tüm karakterler gibi., boş küme de ile gösterilen bir karakter dizisi olarak bu kümeye dahildir.).
Alfabemizse A* bizim bu alfabeyle ulaşabileceğimiz tüm semboller, A+ ise A*’da bulunan değerlerin olduğu fakat boş kümenin olmadığı bir kümedir. A= {0,1,2,3,4,5,6,7,8,9} (alfabe) A*= { 333 , 225 , 713 … } (alfabe ile oluşturulan kelime grupları) A+= A* - L={a*b*c*/x,*0} gibi bir alfabe sınırlandırmamız varsa
Kümede var diye tüm harfleri kullanmak zorunda değiliz, Aab gibi. 2.4.2 Dillerin Sentaks Tanımlamaları
2.4.2.1 Backus- Naur Form (BNF) En çok kullanılan sentaks tanımlama yöntemidir. Önce Algol dilinde kullanılmıştır, daha sonra standart kabul edilmiştir. Bu dile özgü kurallarsa aşağıdaki gibidir: <cümle> <özne> <yüklem> <cümle> <isim> / <tamlama> <cümle> <isim> <cümle> <tamlama> <yüklem> <etken fiil> <nesne> / <edilgen fiil> <isim> cats / dogs / sheep <özne> I / we / you / they <etken fiil> like / hate / eat <nesne> biscuits / grass / sunshine <edilgen fiil> sleep / talk / run <cümle> <cümle> <tamlama> <isim> <yüklem> sheep <yüklem> sheep <etken fiil> <nesne> sheep eat <object> sheep eat biscuits
Çünkü, programda kullanılan cümlelerdeki kelimelerin, karakterlerin belirli bir sırası olmalı ve gerekli mekanizmaya bunlar tanıtılmış olmalıdır.
I sleep Dogs hate grass sentax olarak hepsi doğru bir cümlelerdir. Cats eat sunshine
Semantik olarak yanlış bir cümledir.
Bir dilin gramerini incelerken terminal ve nonterminal sembolleri iyi tanımak ve ayırt etmek gerekir. < > bizim için ayıraç oluyor.
S S+T / T S ve T nonterminal sembol S-cümle / veya
T a / b a , b , + terminal sembol
Yukarıdaki cümleyi açıklarsak ; S S + T ( S S + T ) S + T + T ( S S + T ) T + T + T ( S T) b + T + T ( T b ) b + a + T ( T a ) b + a + a ( T a )
Bu konu daha matematiksel olarak incelenirse ; <ifade> <terim> / <ifade> + <terim> <terim> <değişken> / <terim> * <değişken> <değişken> a / b / c
a + b * c ‘yi yukarıdaki kurallara uygulayacak olursak ; <ifade> <ifade> + <terim> <terim> + <terim> <değişken> + <terim> a + <terim> a + <terim> * <değişken> a + <değişken> * <değişken> a + b * <değişken> a + b * c 2.4.2.2 EBNF (Extended Backus Naur Form) Genişletilmiş sentaks tanımlama yöntemidir. Atama komutu := (değişken / fonksiyon / kimlik tanımlama) (EBNF) Kimlik Tanımlama harf {harf / rakam} (BNF) <kimlik tanımlama> := <harf> <kimlik tanımlama> <harf> <kimlik tanımlama> <rakam> Kimlik tanımlama harf ile başlayan daha sonrası harf veya rakamların tekrarından oluşan kelime grubudur. Bu tekrar eğer bir sınır varsa bu sınıra gelene kadar devam eder. Sınır aşılırsa hata mesajı verir. Pascal derleyicisinde kullanılan yötemdir.
2.4.2.3 Gramer Aşağıda, bir derleyicide ki kısmende olsa gramer tanımı verilmiştir. G=( N , T , S , P ) N : Sınırlı Sayıdaki Terminal Olmayan Sembol Kümesi T : Sınırlı Sayıdaki Terminal Semboller S : Semboller Başlangıcı P : Sınırlı Üretilen Kelime Grupları α β (α kümesinden β üretilebiliyorsa) N ={ cümle, özne,yüklem,isim…} T ={cats,dogs,sheep,hate, eat, biscuits…} S ={cümle} α ve β için herhangi bir kısıtlama yoksa ; “Chomsky Type ” veya “Free Grammer” olarak adlandırılır. Eğer bir kısıtlama varsa ; α A β α λ β (λ: terminal olmayan sembol) U= N U T U* U α , β ve U A ve β, U nun elemanı λ boş olmayacak A tek terminal olmayan sembol ise; bu kural geçerlidir. 2.5 Derlemenin Aşamaları
Derleme iş iki aşamadan oluşur. 1. Ayrıştırma(Analiz) 2. Birleştirme(Sentez) Ayrıştırma işlemi birleştirmeden mutlaka önce yapılmalıdır.Fakat pratikte bunlar nere-deyse paralel olarak yapılır. Ayrıştırma işlemi derleme sırasında tarama ağcı ile temsil e-dilebilir.
Begin int x; x:=3; writeln(x); end.
(Ağaç) Program
begin tanımlama kısmı ; atama yapma ; çağırı yapma end . int x x := 3 writeln ( x )
Derleyiciler bu konuda ikiye ayrılırlar. Single Pass Compiler: Tüm text bir defada ele alınır. Bütün işlemler tek bir geçişte yapılır. Komplekstirler, kısa zamanda işlemlerini bitirirler ve makine kodu üreterek iş bitirirler. Multi Pass Compiler: Derleme aşamalara ayrılır. Bütün işlemler basitleştirilerek yapılmaya çalışılır. Pass işlemi Program çalışırken üzerinde yapılan her bir işleme pass denir. Pass işleminde ise sırayla şu kurallar uygulanır. İlk pass işlemi sonunda, tüm gereksiz karakterlerin atılması sağlanır, boşluk gibi. Böylelikle tüm karakterler yan yana gelirler. Daha sonra her bir harf tek tek ele alınır. Farzedelim ki karşımıza ilk olarak başla komutu çıktı. Bu durumda, önce b harfi ele alınır, b ile başlayan tüm komutlar göz önüne alınır, sonra a sonra ş sonra l en sonda a harfi eğer yana yana gelir ve bu karşımıza çıkan ilk boşluk karakterine kadar devam eder. Başla karakter grubu derleyicini reserver word dediğimiz kısmında var ise derleyici bunu algılar ve komut komple tek olarak işlem görür. Bu süreç, boşluk haricindeki tüm karakterlerin aynı şekilde iş görmesi ile sonlanır. Tarayıcı bu şekilde çalışmakla program işleniş basamaklarını basitleştirilmiş hale getirir.
2.6 Derleyici Dizayninda Göz Önünde Bulundurulacak Hususlar
2.6.1 Kaynak Programın Özellikleri 1. İfade Ve Atama Komutları 2. Şart Cümleleri 3. Döngüler 4. Giriş-Çıkış Komutları 5. Alt Programlar Ve Fonksiyonel Alt Programlar 6. Veri Türleri
2.6.2 Hedef Programın Yürütüleceği Makinenin Özellikleri 1. Ardışık bellek miktarı: Yükleyici program mutlaka bilgisayarda vardır, çünkü yükleyici program bellek özelliklerine göre programı, program belleğine atar bellek 2Yazmaçlar: Pprogramın Assembly’e çevrilmesi işlemin de kullanılırlar. Bilgisayarda varolan veri yolunun genişliğine göre programın işleniş hızı artar. 3 .Kullanılan İşlemcinin Komut Kümesi 4. Kontrol Ünitesi 5. Aritmetik Ünitesi
2.7 İyi Bir Derleyicini Özellikleri 1. Etkin bir object kodu üretmek (işe yaramayan satır olmadan, mümkün olduğu kadar kısa program üretmek). 2. Mümkün mertebe, küçük object programları üretmek. 3. Programların derlenmesi için harcanan zamanın en aza indirilmesi derleme, link gibi işlemlerin hızlı olacak şekilde yazılması, kısaca derleyici dizaynı. 4. Derleyici mümkün mertebe küçük olmalı, Pascal’da ki crt gibi arşiv programlarında olduğu gibi. 5. Derleyici hataları iyi teşhis edebilmeli ve kullanıcının bunları ortadan kaldırması için yol gösterici olmalıdır. Örneğin, derleyici ilk hatada takılıp kalmamalı hata olan programı sonuna kadar işleyebilmeli tüm hataları sıra no ve çeşidi ile kullanıcıya sunmalı, 6. Güvenilir bir derleyici olmadır, eksik çalışmamalı, kullanıcının ortaya çıkarabileceği tüm hata kombineleri daha önceden hesaplanmış ve ona göre bir dizayn yapılmış olmalıdır.
BÖLÜM III
TÜRKÇE PASCAL İÇİN SENTAKS DİYAGRAMLARI (SÖZ DİZİMLERİ)
Türkçe, sınırlı sayıda komut kümeli Pascal için sentaks düzenlemesi ve algoritma çık-arımı
program çalıştırma kısmı paragraf bölgesi paragraf komutu işaretsiz tamsayı sabit bölgesi sabit tanımlama sabit çeşidini tanımlama sabit çeşidi sabit dizi ünite program başlığı ünite başlığı kimliği tanımlanan dosya listesi kullanılacak arşiv bölümleri (kob) tanımlama kısmı ara yüz kısmı sabit kayıt sabit küme tip bölümü tip basit tip dosya listesi değişken bölgesi alt program bölgesi (ap) fonksiyonel alt program tanımı (fap) fonksiyonel alt program başlığı parametre listesi alt program tanımı alt program başlığı komut kısmı başlama bölümü komut atama komutu değişken kimliği tanımlananın çeşidi işlem basit işlem terim etken işaretsiz sabit işaretsiz numara durum komutu birleştirme komutu döngü komutu git komutu eğer komutu alt program referans komutu şart sağlanmıyorsa tekrar komutu şart sağlanıyorsa tekrar komutu ile komutu
Aşağıdaki şekillerde verilen oval ve yuvarlak bölümler içindeki ifadeler sentakslarda kalıp olarak değiştirilmeden yazılması gereken kısımları, kare ve dikdörtgen içindeki ifadeler ise kullanıcının isteği doğrultusunda, kalıplara sadık kalmak suretiyle değişken getirilebilecek kısımları ifade etmektedir.
toplam ünite
Şekil 3.1 toplam ünite
program
Şekil 3.2 Program
ünite Şekil 3.3 Ünite
program başlığı Şekli 3.4 Program Başlığı
ünite başlığı Şekil 3.5 Ünite Başlığı
kimliği tanımlanan
Şekil 3.6 Kimliği Tanımlanan
dosya listesi
Şekil 3.7 Dosya Listesi
kullanılacak arşiv bölümleri
Şekil 3.8 Kullanılacak Arşiv Bölümleri
tanımlama kısmı
Şekil 3.9 Tanımlama kısmı
ara yüz kısmı
Şekil 3.10 Ara Yüz Kısmı çalıştırma kısmı
Şekil 3.11 Çalıştırma Kısmı
paragraf bölgesi
Şekil 3.12 Paragraf Bölgesi
paragraf komutu
Şekil 3.13 Paragraf Komutu
işaretsiz tamsayı
Şekil 3.14 İşaretsiz Tamsayı
sabit bölgesi
Şekil 3.15 Sabit Bölgesi
sabit tanımlama
Şekil 3.16 Sabit Tanımlama
sabit çeşidini tanımlama
Şekil 3.17 Sabit Çeşidini Tanımlama
sabit çeşidi
Şekil 3.18 Sabit Çeşidi
sabit dizi
Şekil 3.19 Sabit Dizi
sabit kayıt
Şekil 3.20 Sabit Kayıt
sabit küme
Şekil 3.21 Sabit Küme
tip bölümü Şekil 3.22 Tip Bölümü
tip
Şekil 3.23 Tip
basit tip
Şekil 3.24 Basit Tip
dosya listesi
Şekil 3.25 Dosya Listesi
değişken bölgesi
Şekil 3.26 Değişken Bölgesi
alt program bölgesi
Şekil 3.27 Alt Program Bölgesi
fonksiyonel alt program tanımı Şekil 3.28 Fonksiyonel Alt Program Tanımı
fonksiyonel alt program başlığı
Şekil 3.29 Fonksiyonel Alt Program Başlığı
parametre listesi
Şekil 3.30 Parametre Listesi
alt program tanımı Şekil 3.31 Alt Program Tanımı
alt program başlığı Şekil 3.32 Alt Program Başlığı
komut kısmı Şekil 3.33 Komut Kısmı
başlama bölümü
Şekil 3.34 Başlama Bölümü
komut
Şekil 3.35 Komut
atama komutu &n |