bedava ödev indir
*
Hoşgeldiniz, Ziyaretçi.Lütfen giriş yapın veya kayıt olun. Kasım 20, 2008, 17:08:25 ÖS


Kullanıcı adınızı, parolanızı ve aktif kalma süresini giriniz



Reklamlar

Sayfa: 1
  Yazdır  
Gönderen Konu: PASCAL PROGRAMLAMA  (Okunma Sayısı 166 defa)
Abruzzi
Çalışkan öğrenci
****
Mesaj Sayısı: 1031



Üyelik Bilgileri
« : 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