1.1.1 Makine Koduna Çevrime Olan İhtiyaç

Ebat: px
Şu sayfadan göstermeyi başlat:

Download "1.1.1 Makine Koduna Çevrime Olan İhtiyaç"

Transkript

1 1 1 DERLEYİCİLER 1.1 Giriş Bir programlama dilinde yazılmış olan bir programı -ki buna kaynak dil de denmektedir-, yine başka bir dilde ona karşılık olan programa çeviren programa Derleyici denir. Genellikle kaynak dil Fortran, Pascal veya C gibi programlardır. Hedef dilde hdef makinede kullanılan makine dilidir. Derleyici genellikle derlenen kaynak program hakkında hata ve tanımlamalarla ilgili mesajları da içinde barındırır Makine Koduna Çevrime Olan İhtiyaç İlk kuşak bilgisayarlar çok basit ve kavramsal olarak çok küçüktü. Örneğin Manchester Mark yılında yedi tane işlem kodu ve 64 byte lık ana bellekle doğdu. Böyle bir bilgisayarda program yazarken işlem kodlarını program yazarken bu kodları klavyeden binary kodlar halinde sıralanmış olarak girmek hiçte zor değildi. Bununla beraber programı önceden hazırlarken bu kodları binary olarak değil de kısaltmalar veya simgeler şeklinde yazmak daha uygundu. Tablo 1.1 de bu bilgisayar için kullanılan işlem kodlarının kısaltmalarından birkaç örnek verilmiştir. Daha karmaşık bilgisayarlar ve daha uzun programlar ortaya çıktıkça bu kısaltmaları programcının binary koda çevirmesi oldukça yorucu ve içinden çıkılmaz bir hale geldi ların sonunda bu çevirme işinin pekala bilgisayarın kendisi tarafından yapılabileceği konusuna işaret edildi ve bu yönde çalışmalar başlatıldı. Bu işi yapmak üzere assembler olarak tanıdığımız program ortaya çıktı. Bu programın kodlarından oluşan dil de assembly dili olarak adlandırıldı. Programlar karmaşıklaştıkça, assembly dilinin makine koduna çevirmedeki birebir çevirme yöntemi oldukça sıradan ve yavaş bir hal almaya başladı. Karmaşık diller (otomatik kodlar) programları daha kısa şekilde tanımlıyorlardı. Bu programlarda yazılan bütün bir kod assembly dilinde birden fazla işlem yapılarak gerçekleştirilebiliyordu. İşte yüksek

2 2 seviyeli diller olarak adlandırılan bu dillerde yazılan programları makine koduna çevirmek için derleyici ( compiler ) adını verdiğimiz programlar ortaya çıktı lerde yüksek seviyeli diller karşılaşılan problemleri herhangi bir makineye özgü dilden bağımsız olarak çözmeye başladılar. Fortran bu ilk kuşak dillere örnektir yılında piyasaya çıkan Algol 60 yüksek seviyeli dillere yeni bir yaklaşım getirdi. Makine koduna çevrimde şu ana kadar kullanılan yöntemler hakkında sorular ve problemin nasıl çözüleceği konularındaki düşüncelerden ortaya çıkmıştır. Mesela yerel değişken tanımlamalarına ve tekrarlanan rutin yapısına izin veriyordu. Peki ama bütün bunlar sadece bir adres boşluğu ve alt rutinler konusunda sadece bir işlem koduna sahip makinelerde nasıl makine koduna çevrilecekti? Pascal, Ada, C++ gibi daha modern programlar işte bu kısıtlamadan kurtulup hedef makinenin mimarisinden bağımsız olmaya çalışmışlardır. Artık derleme işleminden geçen programlar hatasız çalışıyordu. Bu yönde avantajları vardı. Programcıların yapımlarını düzeltiyor, mantıksal hataları azaltmak için biçimsel kısıtlamalar yapıyor ve debug işlemini kolaylaştırıyorlardı. Dezavantajları ise hem derleyicinin hem de derlenmiş programın daha çok yer kaplaması ve daha yavaş çalışmasıydı. Derleyici teorisi dilleri de etkilemişti. Daha kolay derlenen diller oluşturma yolunda çalışmalar başlamıştı. İşlemlerin çoğunu otomatikleştirmek için çeşitli araçlar geliştirildi. İlk Fortran derleyicisini yapmak insanlığın 18 yılını aldı, oysa şimdi bu konuda eğitim alan bir öğrenci için bu bir dönemde bitirebilen bir iş... Yüksek seviyeli bir dilde yazılmış bir programı çalıştırmak için iki yol vardı. Birisi programı makine kodunda kendisine denk olan bir programa çevirmek ki buna derleme olayı demiş ve bahsetmiştik. Diğeri de yüksek seviyeli dilde yazılan programda kullanılan ifadeleri sırayla yorumlayabilen bir program yazmaktır. Bu programlara da interpreters ( yorumlayıcı ) denir. Derlemenin avantajı zaman harcayan bir işlem olduğu halde programı sadece bir kere analiz etmesi ve çevirme işlemini yapmasıdır. Daha sonra da derlenmiş programı çalıştırabiliriz. Dezavantajı ise makine koduna çevrilmiş programda eğer bir hatayla karşılaşırsak bu hatayı programı yazdığımız dile dönüp orada düzeltmek zorunda kalmamızdır. Yorumlama karşılaşılan ifadenin her defasında tekrar bütün dil yapısı içinden bulunup analiz edilmesi gerektiğinden dolayı derlemeden çok daha yavaştır. Bununla birlikte eğer bir hatayla karşılaşırsak daha kaynak program üzerinde çalışıyor olmamızdan dolayı hatanın yerini kolayca

3 3 tespit edebiliriz. Bu da program geliştirme de çok büyük bir yardımdır. Bunlar iki ayrı uçta bulunan yaklaşımlardır. Ama çoğu programlarda her ikisinden de biraz vardır. Esas yaklaşım ise programı doğrudan doğruya hedef makinenin koduna çevirmek değil daha orta seviyede bir koda dönüştürerek orada yorumlanmasını sağlamaktır. Bu bahsettiğimiz orta seviyeli dil hem makine koduna hem de yüksek seviyeli dile yakındır. Bunun en güzel örneği yorumlanması için PCODE adlı orta seviyeli bir kod üreten UCSD Pascal derleyicisidir. Derleyici veya yorumlayıcı arasında seçim yapmayı kullanılan çevre birimleri ve yüksek seviyeli dilin yapısı etkiler. Fortran diğerlerine nazaran makine koduna çevrilmeye yatkın, oldukça basit yapılı ve hızlıdır ve bu yüzden büyük sistemlerde karşılaşılan çok büyük sayısal problemleri çözmek için kullanılır. Kesinlikle derleme yöntemini kullanır. Diğer taraftan Basic ise daha çok PC lerde, işlem gücünün eksik olduğu, belleğin yavaş çalıştığı yerlerde kullanılır ve yorumlama yöntemiyle çalıştırılır. LISP programı ise hem derleme hem de yorumlama kullanan bir programdır. Programlar zaman alan derleme işinden kaçmak ve programı daha yazarken yorumlama yapılmasından dolayı yorumlanmayı kullanırlar Derleyicilerin Daha Yaygın Kullanımı Bilinen en temel derleme teknikleri yüksek seviyeli dillerin makine koduna çevrilmesi esasına dayanır. Bununla birlikte yazılım mühendisliği ile de ilgilidir. Uygulama yazılımı derleme tekniklerinin esas olduğu komut dilleri arabirimini kullanır. Aynı teknikler modern sistemlerin kullandığı karmaşık konfigürasyon dosyaları için de gereklidir. Bunun en iyi örnekleri Windows un.ini dosyalarıdır. Diğer bir taraftan kaynak programların dilleri TeX gibi kelime işlem programları veya İngilizce gibi doğal diller de olabilir ve hedef programların aynı şekilde dilleri değişik türlerden olabilir. Son olarak bilgisayar dillerinin kapsamları ve bu dilleri diğer dillere çevirmek oldukça önemli bir olaydır.

4 Derleyici Yapısı Bir programlama dilinin tercüme edilmesinin elbette ki birkaç mantıksal evresi vardır. Bu evreler eşzamanlı ve ardışık zamanlı olarak çalışabilirler. İlk adım olarak bir derleyiciyi kaynak metinin anlamını ve yapısını analiz etmekten sorumlu bir ön-bölüm ve hedef programın kodlarını oluşturan bir son-bölüm şeklinde ikiye ayırmak mümkündür. Bu bölümler yine kendi içlerinde mantıksal bloklara ayrılırlar. Ön bölüm dediğimiz bölüm lexical analiz, syntax analiz ve semantic analizden oluşur. Lexical analize scanner da denir. Derlemenin ilk evresidir ve tek başına metin içerisinde anlamı olmayan karakterleri mantıksal olarak grup yapar. Örneğin W, H, I, L ve E harflerinin WHILE kelimesini oluşturabileceği açıktır. Syntax analiz bütün programı analiz eder ve lexical analiz de yapılanın bir üst evresini yapar yani scanner ın oluşturduğu küçük grupları -ki bunlar kelimeler diyebilirizdaha büyük gruplara dönüştürür. Mesela ifadeler, döngüler, altprogramlar gibi...bunlar ana programı oluşturur. Bilgisayar programlarının yapısını belirlemek için İngilizce metin yapısını anlamamız gerekmektedir. Zira İngilizce dilbilgisi yapısından alıntılar vardır. Şu ana kadar programın yapısını analiz ettik şimdi anlamsal olarak analize başlayabiliriz demektir.(semantic analyse)yani hangi değişkenler integer sayıyı tutar hangi değişkenler büyük numerik sayıları tutar, gibi olayları belirleyebiliriz. Bu bölümde kaynak dili hedef dile dönüştürme konusuna değineceğiz. Şu ana kadar orijinal programdaki birçok bilgiyi işledik, burada programı basit bir yolla ifade etmeye çalışacağız. Derleyicinin son bölümü dediğimiz bölüm kaynak programın yapısal ve anlamsal özelliklerini alarak bunu hedef dile çevirir. Bu işlem hedef dile çevrimin etkili olması için çoğunlukla birden fazla adımda yapılır. Intermediate Code Optimizer adı verilen program kaynak kodu daha etkili olan ama kendisine karşılık gelen koda dönüştürür. Sonra Code Generator gelir ve bu kodlarla hedef makine için aynı işi yapan programın kodlarını oluşturur daha sonra da hedef makinedeki bu kodlar optimize edilerek kullanılır.

5 5 Kodları düzenleme işini iyi yapan programlar çok zaman harcarlar. Bu aslında kod düzenleme programlarının program geliştirilirken kullanılamayacakları anlamına gelmez. Bu işlemlerin bitmesi derleme işleminin bittiğini göstermez. Çünkü derlenen programı destekleyecek çalışan bir sistem gereklidir. Bazı yüksek seviyeli dil yapıları temelde karmaşıktır. (giriş,çıkış ve kesme istemleri gibi...) Dolayısıyla bu dillerden derlenen programlarda birden fazla kullanılan alt programların her karşılaşıldığında derlenmesi gerekirse oldukça geniş bir alan kapladıkları görülmüştür. Bu alt programlar yürütme süresince kütüphanede bulunurlar. Sistemde bazı extra kodlar vardır bunlar sistemin açılışını sağlayan bazı kodlar ve derlenmiş program çalıştıktan sonra onu tekrar geri gönderen bazı kodlardır bunlar Derleyiciler Hangi Dilde Yazılır? Derleyiciler çok fazla program bilgisi ve tekniği gerektiren oldukça geniş programlardır. Ama ideal olan en az yer kaplamaları ve az zaman almalarıdır. Derleyicinin ilk kısmı çoğunluk bilgisayarlarda değişmez ama son kısım olarak adlandırdığımız kısım değişiklik gösterir. En iyi derleyiciyi yazmak için hangi dili kullanmalıyız? Makine kodunun her zaman uygun olmasından dolayı avantajları vardır. İlk kuşak bilgisayarlar için de değişmez bir dildir makine kodu. Fakat eğer yaptığımız derleyici sadece bir makinede çalışabilecekse bu en az istenen bir olaydır. Ama makine koduyla büyük bir derleyici yazmak da çok zor olduğu için pek istenmeyen bir olaydır. Bir alternatifte bu şu an uygun olan yüksek seviyeli bir dilde uygulamaya koymaktır..böylece derleyicimiz hem bu dilin yüklü olduğu tüm makinelere yüklenebilecek hem de bu yüksek seviyeli dilin programlama gücünden yararlanabilecektir. Bu bize en geniş programlama imkanlarını vermez. Bu yüzden dünyanın en o zamanlar en çok kullanılan dilleri olan Fortran ve Cobol un ideal derleyici yazabilmek için uygun olmadıkları anlaşılmıştır. Bu dezavantajlardan yola çıkarak Unix altında çalışan C programlama dilinde yazılan derleyiciler en geniş kullanıma ulaştı. Bu yaklaşımın yaygınlaşmasındaki en büyük pay C programlama dilinin programcıya derleme yazarken çok fazla esneklik sağlamasıdır. Bir uzlaşma yaklaşımı olarak da derleyiciyi geleneksel assembly yi kullanarak yazmak oldu. Yalnız assembler konusundaki geleneksellik kavramı yani her tarafta aynı olma

6 6 olayı pek uygulanmıyordu, dolayısıyla assembler da yazdığımız derleyici de yine hedef makinenin kullandığı biçime çevirme zorunluluğu doğuyordu. Bu yaklaşımın en iyi örneklerinden birisi bir metin işlemci dil olan SNOBOL4 için yazılan derleyici Macro-SPITBOL dur. Bu derleyici gelenekselleştirilmiş bir assembler olan MINIMAL assembly dilinde yazılmıştır. Bir diğer derleyici yazma tekniği de -ki bu çok büyük esneklik sağlar- derleyiciyi kendi kaynak dilinde yazmaktır. Mesela standart BCPL derleyicisi BCPL dilinde yazılmıştır, bunun gibi Unix altında çalışan C derleyicisi yine C de yazılmıştır. Bu yaklaşımla derleyicilerde istenen taşınabilirlik sağlanmış oldu ve bu yaklaşım crosscompilation adını aldı. Bu bölümde derleyicinin tanımı tarihsel ilişkileriyle birlikte açıklığa kavuşturulmuştur. Bir bilgisayar programcısının program yazarken çok çeşitli seçenekleri vardır. Çok çeşitli program yazma dilleri vardır. Ama bu diller doğrudan bilgisayarlarla iletişim kuramazlar. Makinenin yapılan programı çalıştırabilmesi için arada köprü vazifesi gören bir yazılımın olması gerekir. İşte bu yazılım derleyicidir. Derleyici sihirli bir şey yapmaz. Pascal, C vb., dillerde yazılır ve yazılan programı işlenecek veri olarak algılar ve bu verilerin yazıldığı dilin kurallara uyup uymadığını kontrol ederek hataları ortaya çıkarır ve son olarak da bu verileri genellikle yazıldığı dilden daha alt seviyede olan başka bir dildeki karşılık gelen ifadelere dönüştürür. Yani bir anlamda tercümanlık yapar. Bir tercümanın işi bir dildeki ifadeleri başka bir dildeki aynı anlamı veren kelimelere dönüştürmek olduğuna göre derleyici de bir tercümandır. Yalnız derleme işini doğal dilleri tercüme etmekten farklıdır. Bilgisayar programlama dillerindeki tercüme işlemi doğal dilleri tercümeden iki temel etkenden dolayı daha basittir. Bu etkenlerin birincisi şudur : Derleme işleminde her iki dil de (kaynak dil ve amaç dil ) özel olarak bazı kurallarla dizayn edilmiştir ve bu dillerde eşanlamlı kelime olayı yoktur ve doğru olan program sadece bir şeyi ifade eder, yanlış olan ise kabul edilmez ve işlem yapılmaz. İkinci etken ise kaynak dil yani derlenecek olan dil amaç dilden daha karmaşık bir yapıya sahiptir ve daha üst seviyededir. Bu seviye makine daha kolay anlayabileceği kodlardan insanın daha kolay anlayabileceği dillere doğru artmaktadır. Yani bir bakıma derleme bir analiz, bir ayrışmadır.

7 7 Makinenin anlayabileceği kodlar ikilik düzende kodlanmış sayılardır. Bir üst seviye ise bu ikilik kodların düzenlenmesiyle oluşan assembly dilidir. Ve bundan itibaren insanların anlayabileceği ifadelere doğru bir seviye ilişkisi vardır. Assembler assembly kodlarını bir haritalama işlemiyle makineye anlatmaktır. Birebir eşleştirme yapılır. Birebir eşleştirmeden kasıt bir assembly komutunun bir işlem yaptırmasıdır. Daha üst seviyeli dillerde ise bir komut birden fazla işlem yaptırabilmekte ve bir komut içinde birden fazla ifade olabilmektedir. Derleme teorisi makinelerin daha fazla sayıda dille iletişim kurabilmesi ve bu dillerde yazılan programları daha doğru bir şekilde işletmesi fikrinden doğmuştur. Boş bir bilgisayar sadece ikilik düzende kodlanmış verileri işleyebilir, oysa çeşitli derleyiciler yüklü olan bir bilgisayar çok çeşitli işler yapabilmekte ve kullanıcının donanıma hükmetmesine olanak verebilmektedir. Yazılımlar çok geniş bir yelpazeye sahip olan değişik dillerde yazılır. Geleneksel diller; COBOL, FORTRAN, Pascal veya C gibi, Nesne yönelimli diller; C++, Smalltalk veya Java, Fonksiyonel ve Mantıksal diller; LISP veya Prolog gibi, 4.kuşak diller ve görsel diller ; Visual Basic veya Delphi gibi olabilir... Derleyicinin görevi bu kullanıcıya yakın olan yazılımların çalışmaları için makinenin anlayacağı biçime dönüştürmektir. Derleyiciler için metin işlemciler denebilir Yani kullanıcının elle yazdığı veya 4.kuşak dillerde olduğu gibi yarı otomatik yazılan kodları ince düşünülmüş bir şekilde düzene sokan ve makinenin anlayacağı dile çeviren kelime işlemciler demek de mümkündür. Derleme işlemi aşağıda gösterildiği gibi iki aşamada yapılır. 1. Verilen metinin analiz edildiği Analiz Evresi 2. Makinenin anlayabileceği şekle dönüştürüldüğü Sentez Evresi Analiz evresine gelen metine genelde kaynak kod, sentez evresinden çıkan metine de amaç kod denir. Ve bu dönüştürme derleyici tarafından yapılır ve buna derleme işlemi denir. Bir dil derleyicisi genellikle o dilin yüyürlüğe konmasıdır. Derleyicinin meydana getirdiği amaç programın kodları genellikle makine kodu olur veya daha sonra makine koduna çevrilen assembly kodu veya uygun bir ara kod olur. Burada kullanılan ara kod makine koduna çoğunlukla yorumlayıcılar tarafından çevrilir.

8 8 Derleyici teknolojileri ilk bilgisayarlar çıktığından bu yana oldukça gelişmişlerdir.artık derleyicileri otomatik kod üreteçleri yardımıyla yazabilmekteyiz. İlerleyen kısımlarda Lex ve YACC isimli otomatik analizcilerden bahsedilecektir. Lex ve YACC yardımıyla compiler yazarken C mantığı kullanılır. Derleme işleminin aşağıdaki adımlarla ifade etmek mümkündür : Kullanıcı tarafından oluşturulan kaynak programı okuma işlemi, Programın kullanılan dilin kurallarına göre doğruluğunu kontrol etmek, Eğer yanlışlar varsa kullanıcıyı haberdar etmek, Programa karşılık gelen alt seviye bir program kodu ortaya çıkarmak. Bu işlemlerin yapılmasının ardından oluşturulan program çalışabilmekte ve kullanıcının istekleri cevaplandırılmaktadır. Derleyicinin dizaynı ve yapısı diğer yazılımlardan farklı değildir. Derleyicileri 4 aşamada tanımlamak mümkündür: Çözümüm istenen problemin belirlenmesi ve analiz edilmesi, Çözümün tasarlanması, Tasarlanan yapıya uygun olarak çözümün inşa edilmesi, Bitmiş olan ürünün test edilmesi ve onaylanması. 1.2 Basit Bir Dil Ve Program Bu bölümde Pascal üzerinde uygulanan basit bir derleyici aracılığıyla derleyicilerin yapısı hakkında temel bazı kavramların anlaşılması amaç edinilmiştir P Programlama Dili Pascal da uygulanan ve programları işlemek için yazılmış olan derleyici P kodda yazılmıştır. Bu derleyici M makinesi diye adlandırılan bir bilgisayara kod üretmektedir. Syntax ve semantic yapısıyla P kodu ve derleyici için gerekli bilgileri ve şartları bulunduran M makinesi birlikte derleyici yapısını oluştururlar. Aşağıda eğitim amaçlı oluşturulmuş bir P dili ( dilbilgisi anlambilgisi

9 9 ile birlikte), bir M komut kümesi ve derlenmiş haliyle örnek bir program yeralmaktadır. Şekil 1.1 Sıfır olmayan integer tipli sayıları okuyan ve çıkışta bunların sayısını veren kümede sıfır yoksa ortalamalarını alan fakat sıfıra rastlarsa programı bitiren basit bir Pascal procedür ü... VAR S,N,T ; BEGIN S := 0 ; N := 0 ; T := READ; WHILE T <> 0 DO BEGIN S := S + T ; N := N + 1 ; T := READ ; END ; WRITE (N) ; WRITE (S) ; IF N <> 0 THEN WRITE (S/N) ; END. Şekil 1.1 P dilinde küçük bir program.

10 10 VAR Tanım listesi blok İfade BEGIN blok END Tanımlayıcı tanımlayıcı WRITE : = ifade ifade IF karşılaştırma THEN blok WHILE karşılaştırma DO blok ifade relop ifade dönem dönem addop

11 11 factor factor mulop tanımlayıcı sabit Okuma İfade < <= <> > >= = Büyük harfle alfabetik karakter Onluk düzende rakam } hariç herhangi bir karakter Şekil 1.2 P dilinin syntax (sözdizimi) yapısı.

12 Alt Seviyeli M Komut Kümesi Varsayılan bir M makinesi tasarlandı. Bu bilgisayarın çok basit bir komut kümesi var. M komut kümesinde bir fonksiyon bölümü, bir işlenen bölümü ve bir de adres bölümü olsun. Fonksiyon ve işlenen tipleri Şekil 1.3 de gösterilmiştir.m bilgisayarının hesaplamalrın yapıldığı ve hareketlerin gerçekleştiği sadece bir akümülatör register ı(acc), 4 adet veri tipi: Constant : Sabit değer, Variable : Adres tutmak için kullanılır, Special : Yığın için kullanılır, Label : Ofset değerler içindir. Fonksiyon acc= acc=> >acc= acc+ acc- -acc acc* acc/ /acc accom Fonksiyonun Anlamı akümülatörü yükle akümülatörü sakla akümülatörü yığına at ve yükle acc := acc + işlenen acc := acc - işlenen acc := işlenen acc acc := acc * işlenen acc := acc / işlenen acc := işlenen / acc akümülatör ve işleneni karşılaştır Yukarıda verilen komutlarla kullanılan işlenenler sabitler, değişkenler ve özel tipli verilerdir. br breq brne brlt brle brge brgt call etiket değere dal acc = işlenen ise etiket değere dal acc <> işlenen ise etiket değere dal acc < işlenen ise etiket değere dal acc <= işlenen ise etiket değere dal acc >= işlenen ise etiket değere dal acc > işlenen ise etiket değere dal etiket ismindeki prosedürü çağır Yukarıda verilen komutlarla kullanılan işlenenler etiket tipli verilerdir. stop programın çalışmasını durdur

13 13 İşlenen Tipi Ayrıntılar constant integer sabitin değeri variable data alanında integer değişkenin değeri special yığına atılan veya yığından çekilen değer label prosedür çağırma veya dallanma komutlarının adresleri Şekil 1.3 M bilgisayarında kullanılan fonksiyonlar ve işlenen değer tipleri Örnek M Programı Şimdi de Şekil 1.1 de verilen P programının karşılığı M programını inceleyeceğiz. Bu program örnek olarak verilmiştir ve ilerde bahsedilecek olan P derleyicisinin yaptığı işi göstermektedir. Daha P kodunda verilen program işte bizim hayali makinemiz için kod üretseydi aşağıda Şekil 1.4 de gösterilen programı ortaya çıkaracaktı. 0: acc= constant 0 1: acc=> variable 1(S) 2: acc= constant 0 3: acc=> variable 2(T) 4: call read 5: acc=> variable 3(T) 6: acc= variable 3(T) 7: accom constant 0 8: breq 18 9: acc= variable 1(S) 10: acc+ variable 3(T) 11: acc=> variable 1(S) 12: acc= variable 2(N) 13: acc+ constant 1 14: acc=> variable 2(N) 15: call read 16: acc=> variable 3(T) 17: br 6 18: acc= variable 2(N) 19: acc=> stack 20: call write 21: acc= variable 1(S) 22: acc=> stack, 23: call write 24: acc= variable 2(N) 25: accom constant 0 26: breq 31 27: acc= variable 1(S)

14 14 28: acc/ variable 2(N) 29: acc=> stack 30: call write 31: stop ( En sol sütundaki numaralar komut adresini göstermektedir. İlk komut belleği sıfır(0) a konumlamaktadır. P programdaki ifadelerin başlangıcını gösteren komutların adresleri italik yazılmıştır.) Şekil 1.4 Programın M koddaki karşılığı. 1.3 Derleyici Düzeni Bu konuda derleme işleminin ilkeleri ve işlemin nasıl parçalara ayrılarak analiz edildiği anlatılacaktır. Pascal veya P dilinde yazılan bir program çalışmadan önce bağlantı-yükleme (link-loading) ve derleme işlemlerine ihtiyaç duyar. Derleme yapılırken kaynak metin amaç metine dönüştürülür. Link- Load yapılırken de bu amaç kod matematiksel fonksiyonlar vb. gibi kod için gerekli diğer parçalarla birleştirilir ve birbirlerine bağlanır. Çalışma zamanında da elimizdeki kaynak metinin eşdeğeri olan ikilik kodlar çalışır, bilgi okurlar, sonuçları yazarlar vs...şekil 1.5 de derleme, link-load, ve çalışma zamanlarıyla ilgili bir akış şeması vardır. Burada bir programın derlenirken bir programda aslında çalışmaktadır. Yani bizim hazırladığımız kaynak metin derlenirken derleyici de çalışma zamanı içindedir. Derlenme esnasında yapılan işlemler parçalara ayrılabilir. İlk önce belirli bir yapısı olmayan bu kaynak metin anlamsal olarak bazı şeyler ifade eden kelimelere ve sembollere dönüşür. Bu safhaya Lexical analiz denir. İkinci olarak bu anlamlı fakat rasgele durmakta olan semboller belirli bir yapıya kavuşturulur. Bu işlem daha önce verilmiş dilbilgisi yapısıyla kaynak metinin dilbilgisi yapısı karşılaştırılarak yerine getirilir. Ardında da amaç programa dönüştürülecek olan programın anlamının oluşturulması ve onaylanması, test edilmesi için Semantic Analiz safhası uygulanır.

15 15 Kullanıcının programı P DEN M YE DERLEYİCİ Hata mesajları M amaç kod programı Diğer M Modülleri LINK-LOADER Kullanıcının verileri P PROGRAMINA KARŞILIK M BINARY KODU Şekil 1.5 Derleme işleminde bilgi akışı Lexical Analiz İlk safha Lexical Analiz dir. Bu aşamanın işleyeceği veriler kullanıcının yazmış olduğu programdaki şu an için bir anlam ifade etmeyen karakter topluluğudur. Bu safha Tarama (Scanning) adıyla da anılır. Bu aşamada programda yer alan açıklamalar, gereksiz boşluklar ve satırlar atılır.geride kalan ve derleyicinin işine yarayacak olan karakterler sayılar, isimler, anahtar kelimeler, komutlar ve noktalama işaretleri gibi gruplara ayrılırlar. Bu gruplamalar yapılırken aslında isimler, numaralar tek tek karakter olarak algılanırlar aradaki boşluğun kontrol edilmesiyle kelime oluşur. Lexical analiz için programda bulunan açıklamaları, boşlukları ve gereksiz satırları egale ederek geride kalan kelimeleri analiz edip gruplayan adım demek mümkündür. Bu arada lexical analiz in bir diğer özellik de grubun başlangıç karakterinin biçiminden bir sonraki karakter için olasılıklar üretmesidir. Mesela eğer ilk karakter alfabetik ise o ifade ya bir anahtar kelime ya da tanımlayıcı olabilir şeklinde varsayımlar yapar. Mesela bir komut, eğer o harfle başlayan başka komut

16 16 yoksa hemen zaten komut ortaya çıkmıştır. Diğer karakterleri de karşılaştırarak doğruluğunu kontrol etmiş olur. Bu konuda bir sonraki karakteri çağırma işlemi basitçe Şekil 1.6 de gösterilmiştir. Bu algoritma P kod veya Pascal içindir. PROCEDURE getlexeme ; BEGIN WHILE NOT useful input character DO skip character; CASE input character OF Digit :recognise numreic lexeme; Alphabetic :recognise identifier or keyword lexeme; :recognise string lexeme; other :recognise operator or punctutaion lexeme; END; return lexeme; END; Şekil 1.6 Karakter çağırma procedür ü Bu bölümde yapılan bir diğer işlem de hata mesajı verme işlemidir. Eğer bir hat ortaya çıkarsa o hataya ilişkin mesaj ekrana gelecektir. Hatanın hangi satırda olduğu da mesajda belirtilir. Genellikle derleyiciler kaynak metini analiz ederken işlenen satırın bir kopyasını bir tampona atarak herhangi bir hata anında oradan çağırırlar. Daha karmaşık derleyicilerde ise programın hepsinin bu tampona atılması ve daha sonraki aşamalarda meydana gelen hatalar için de buradan gerekirse programın hepsinin ekrana getirilmesi sözkonusu olmaktadır. Bir lexical analiz için basit bir yaklaşımın nasıl yapılandırıldığını gördük. Daha karmaşık yapılarda lexical analiz aşamasını yapılandırmak için bazı yardımcı yazılımlar kullanılmaktadır. Mesela UNIX ortamında bir analizci yaratmak için LEX isimli bir yazılım kullanılmaktadır. Bunun gibi daha pek çok yazılımlar mevcuttur Syntax Analiz Bu bölüm lexical analizin incelediği cümleleri giriş verisi olarak kabul eder ve bu cümlelerin kaynak dilin kurallarına uyup uymadığını test eder. Syntax analiz

17 17 Parsing olarak da adlandırılır. Zaten kullanılan dilin sözdizimi yapısı önceden belirlenmiştir ve bu belirlenmiş yapıya göre karşılaştırma yapılır. Bu arada parser programın yapısını tanımaya çalışır. Örneğin hangi tip veriler sunulmuş, kaç tane vs. gibi...bu yapısal bilgiler derleyicinin geri kalan bölümünde lazım olmaktadır. Bu şekilde program incelendikçe ortaya bir veri yapısı çıkar. Buna parse tree denir. Örneğin A : = B + C * D ifadesi aşağıdaki şekilde görülen ağaç yapısı ile ifade edilebilir. ifade tanımlayıcı toplama işlemi B tanımlayıcısı çarpma işlemi C tanımlayıcısı D tanımlayıcısı Şekil 1.7 İşlem yapısının gösterilmesi Eğer kaynak yapı sözdizimi açısından doğru değilse parser bir hata belirleyecektir. Mesela aşağıdaki ifade P kodun sözdizimi yapısına göre hatalıdır. A := B + C := D + E Ve bu satırda parser ın vereceği hata işlemden sonra := ifadesinin kullanılamacağı şeklinde olacaktır. Doğru ifade belki aşağıdaki satır gibi olabilir : A := B ; C : = D + E Burada parser ile ilgili önemli bir problem ortaya çıkıyor. Demek ki parser bir hataya rastladığında burada kullanıcının neyi kastettiği tanımlanamayabiliyor ve hatanın nerden kaynaklandığı kesin bilinmiyor sadece hataya neden olan ilk ifade gösteriliyor Semantic Analiz Semantic analiz parser ın anlamlı kıldığı ifadeleri dilbilgisi olarak düzgün bir şekilde yapılandırarak kaynak programın statik analizini yapar. Mesela Pascal daki ifadelerin sözdizimi yapısında tanımlayıcıların eğer bunalr

18 18 değişkense declare edilmesi gerekmeyebilir. İşte bu inceleme işi semantic analizci tarafından yapılır. Kısaca semantic analizde deklarasyonlar işlenir ve özellik bilgisi olarak tanımlanan bilgi oluştutulur. Bu bilgiler de özellik listesinde saklanır ve bu liste lexical analizde oluşturulan sembol tablosuyla ilişkilendirilir. Ve herhangi bir hata anında bu listeden faydalanılır. İfadeleri anlamlandırmak için çalışan tüm yapılarda işlenmekte olan aşama bir sonraki aşamanın kullanması için işlem bilgilerini yapısal bilgiye eklerler.örneğin Pascal daki + işlemi integer, real tipli sayılar için kullanılır diyelim. Bu doğru olan işlemdir. P koddaki değişkenler de bu doğru olan işleme göre bu işareti sadece bu amaç için kullanabilirler gibi... Sözdizimi yapısından farklı olarak programlama dilinin semantic yapısı kesin olarak belirlenemez. Ve genellikle geçici olarak veya eksik olarak belirlenir. Bundan dolayı da bu aşamada derlemeye yardımcı olacak etkenler azdır Kod Oluşturma ( Code Generation ) Programın bir kısmının veya tamamının analiz aşaması bittiğinde sentez aşaması başlar. Bu evre kendine işlenecek veri olarak syntax analizin oluşturduğu ve semantic analiz analizin daha kolay anlaşılır hale getirdiği yapıyı alır ve amaç kodda karşılıklarını oluşturur. İfadeler ve atamalar için derlenmiş olan kod yığını olabildiğince çok kullanacaktır. Genel bir eğilim eğer derleyici bir değişken veya sabite rastlarsa onun hemen yığına atılması yönündedir. Bu stilde kod kullanmayan bir M makinesinde bu genellikle iki tür bilgi gerektirir. Biri akümülatörü (acc) yüklemek için diğeri de içeriğini yığına atmak için.. Buna rağmen yaygın kullanım akümülatörün yığının birinci elemanı olarak düşünülmesidir. Bunu yaparsak derleyici kodu önce akümülatöre yükler, eğer akümülatör kullanımdaysa yığını kullanır. Derleyici toplama(addop) veya çapma(mulop) işlemi görürse işlemi değerlendirmek için akümülatörü kullanacak, işleneni yığına atacak ve sonuçla birlikte tekrar akümülatöre dönecektir. Buna örnek olarak aşağıdaki işlem verilmiştir: M dilinde oluşturulan bilgi ; A:= B + C ;

19 19 := ile oluşan ifade ; acc=b + ile oluşan ifade ; >acc= C {akümülatörü yığına at ve C ile birlikte yükle} + ile oluşan ifade ; acc+ unstack A:= ifade genel sonuç yapısı ; acc=> A Bu işlem sıralamanın avantajı çok kolay oluşturulmasıdır. Dezavantajı ise ; M makinesi için uygun bir yöntem olmayışı, hangi bellek bölgelerinin işlenene ayrıldığının gösterilmesi konusunda bir elemanın olmamasıdır. Yığının kullanılması konusunda küçük bir karışıklık vardır. Çıkarma ve bölme işlemleri yanlış değerleri çekmektedirler. Burada ters işlem yapma zorunluluğu vardır Kod Optimizasyonu Genel olarak kod oluşturma algoritmaları en iyi kod düzenini oluşturmazlar. Bu yüzden uzun bir zaman tekrar tekrar çalıştırılacak olan bu kodları düzenlemek için biraz çaba harcamak yerinde olacaktır. Bu da derleyiciye bir veya daha fazla kod optimizasyon evresi eklemekle mümkün olacaktır. Bu olay çalışma zamanından kar etmek konusunda derlemeye eklediği zamandan dolayı her zaman faydalı değildir. Çünkü bir programın yapılış amaçlarından birisi de programın diğer eşdeğerlerinden daha hızlı çalışmasıdır. Kod optimizasyonu bütün programa uygulanabildiği ( Global Optimisation ) gibi sadece birkaç yapı veya ifade üzerine de uygulanabilmektedir.(peephole Optimisation-Kısmi Optimizasyon) Kod optimizasyonları makineye göre yani fonksiyonların, kodların ve register ların en iyi şekilde kullanılması yoluyla olabildiği gibi,makineden bağımsız olarak yani ifadeleri tekrar düzenleme, birden fazla kullanılan ifadeleri belirleme ve bunları geçici değişkenler de saklama yoluyla da olabilmektedir. Kısmi optimizasyona bir örnek vermek gerekirse aşağıdaki ifadenin derlenişini göz önüne getirebiliriz: A := B * C ; E := A / F ;

20 20 Bu ifade aşağıdaki gibi derlenecektir : acc= B acc* C acc=> A acc= A acc/ F acc=> E Burada dördüncü ifade yani akümülatörün A nın içeriğiyle yüklendiği satır fazladır ve ihmal edilebilir. Global optimizasyon çalışamaz kodların silinmesi ve tekrarlanan alt ifadelerin elenmesi yoluyla olmaktadır. Tekrar çalışan döngülerin optimizasyonu çok zaman kazandırmaktadır. Mesela döngü her çalıştığında aynı değeri döndüren değişmeyen ifadelerin kaldırılması buna bir örnektir. Çoğu global optimizasyonlar kod oluşturma evresinden önce syntax analiz esnasında oluşturulur. Oysa kısmi optimizasyonlar kod oluşturulduktan sonra yapılır Evreler ve Geçişler Bundan önceki bölümlerde bir derleyicinin Şekil 1.8 de gösterilen birbirinden farklı bölümleri üzerinde durduk. Bu gösterilen yolların doğru olduğunu söylemek veya sadece bu şekilde derlemenin mümkün olacağını söylemek yanlış olacaktır. Fakat bu evrelerin de içerdiği gibi derleme yapmak için dilbilgisinin bilinmesi ve derlenecek metinin iyi anlaşılmasının önemli olduğu gerçeklerini bilmekte yarar vardır. Farklı bir analizi, Algol 68 de olduğu gibi işin çoğunu semantic analiz kısmında gerçekleştirerek değişken tiplerini ve ifadeleri uzatılmış bir syntax evresinde test edebiliriz. Alternatif bir analiz de kodların test edilmesinin lexical ve syntax analiz arasında dağıtılarak bu evrelerin içiçe yapılmasını sağlamakla yapılabilir. Fakat derleyicinin yapısal olarak kolay anlaşılması için bu evreleri içiçe gerçekleştirmek yanlış olacaktır. Genellikle tüm derleyiciler bölümlere, evrelere ayrılmışlardır. Bu yüzden bu şekilde bölümleme sistematik derleyici yapısını bozacaktır.

21 21 Özetlemek gerekirse, Şekil 1.8 de gösterilen derleme evreleri kendinden önceki evrenin işlediğini kendinden sonraki evreye işleyerek verirler. Bu tip derleyicilere Single Pass Compiler denmektedir. Dildeki kurallardan dolayı, bilgisayarın kapasitesinden dolayı, optimizasyonların önceden yapılmış olmasından dolayı veya derleyicinin diğer evreleri için yardım oluşturma araçlarının kullanımından dolayı derleyiciler Multiple passes compiler olarak anılır. Yani evreler arası geçişler tek yönlü olmayabilir. LEXICAL ANALİZ Giriş metininin en küçük parçaya ayrılması Örnek : isimler, sayılar, kodlar SYNTATIC ANALİZ Kelimelerin ifadelere ve yapılara dönüşmesi SEMANTIC ANALİZ Anlamın onaylanması KOD OLUŞTURMA VE OPTİMİZASYONU Ara kodun üretilmesi S E M B O L V E Ö Z E L L İ K T A B L O L A R I Şekil 1.8 Derleme evreleri.

22 22 2 P DERLEYİCİSİ Bu bölümde örnek bir P derleyicisi verilmiştir. Ve gerekli yerlerde açıklamalarla desteklenerek anlam kazanması sağlanmıştır. Derleyicilerin dizayn aşamalarını daha önceki konuda incelemiştik. Burada da yine bu aşamalara göre derleyici parçalara ayrılmıştır. Aslında verilen bütün örnek programlar bir bütündür. 2.1 Lexical Analiz Lexical analizci programın genel formu Şekil 2.1 de verilmiştir. Bu program düzensiz metin dizilerini okuyarak onlara düzenli kelimelere ayrıştırır ve bu arada gereksiz karakterleri de safdışı bırakır.şekil 2.2 de bu aşamada kullnılan tanımlamalar verilmiştir. Program lex ( input,output) ; {Şekil 2.2 deki lexical deklarasyonlar vardır} procedure error (n:integer); {Şekil 2.5} procedure {Şekil 2.3} function nextch ; {Şekil 2.4} function getch ; {Şekil 2.4} procedure init ; {Şekil 2.6} init; while not(eof) do write (ord(lexeme)); if lexeme in [constant,identifier,addop,mulop,relop] then case lexeme of constant : writeln (lexemeval.constval); identifier: writeln (lexemeval.idval); addop : writeln (ord(lexemeval.addval)); mulop : writeln (ord(lexemeval.mulval)); relop : writeln (ord(lexemeval.relval)); else writeln; end. Şekil 2.1 Lexical analiz aşamasının genel formu.

23 23 Labek 999; Const linewidth = 256; namechars = 6 ; Type lexemetype = (dot, constant, identifier, comma, assign, semicolon, lbracket, rbracket, addop, mulop, relop, lexeme, readlexeme, writelexeme, iflexeme, thenlexeme, whilelexeme, dolexeme, varlexeme, endlexeme, unknown ); addvaltype = (add, sub); mulvaltype = (mul, div); relvaltype = (eq, ne, gt, lt, ge, le); nametype = packed array [1..namechars] of char; lexemevaltype = record case lexemetype of constant : (constval :integer); identifier : (idval : char); addop : (addval : addvaltype); mulop : (mulval : mulvaltype); relop : (relval : relvaltype); var linesize : 0..linewidth ; {bir satırdaki karakter sayısı} linepos :integer;{sonraki satırdaki karakterin pozisyonu} line : array[1..linewidth] of char; lexeme, firstlexeme, lastlexeme : lexemetype ; lexemeval : lexemevaltype ; errors : boolean ; lexemes : array[lexemetype] of nametype ; Şekil 2.2 Lexical analiz aşamasında kullanılan tanımlamalar. Getlexeme prosedürü lexical analiz aşamasının en önemli parçasıdır. Burada önce boşluklar ve açıklama kısımları safdışı bırakılır. Daha sonra karakterleri tek tek tarayarak onları sınıflandırır. Procedure getlexeme ; var ch : char; name : nametype; charno : integer ; { getlexeme } {boşlukları ve açıklamaları egale etme aşaması} while nextch in [, { ] do ch := getch;

24 24 bulunması} if cd = { then repeat until getch = } ; ch :=getch; if ch in [ ] then {sabitlerin bulunması} lexeme := constant ; lexemeval.constval := ord(ch) ord( 0 ); end else if ch in [ A.. Z ] then {tanımlayıcıların ve anahtar kelimelerin if not (nextch in [ A.. Z ]) then lexeme := identifier; lexemeval.idval := ch; end else {read,write,if, then, var, veya end sözcüklerinin aranması} for charno := 2 to namechars do name[charno] := ; charno := 2; name[1] := ch; while nextch in [ A.. Z ] do if charno <= namechars then name[charno] : getch; charno := charno + 1; end else ch := getch; lexeme := lexeme; while (lexem<=endlexeme;) and (name <> lexemes[lexeme]) do lexeme := succ (lexeme); if exeme > endlexeme then lexeme := unknown ; error(6) ; {bilinmeyen isim} end else { : -, ; := ( ) + - * / <=> sembollerinin incelenmesi} if ch in [,, ;, :, (, ), +, -, *, /, <, =, >,. ] then case ch of. :lexeme := dot ;, :lexeme := comma; ; :lexeme := semicolon; : :if nextch = = then ch := getch; lexeme := assign; end else error(5); { : den sonra = gelmezse} lexeme := unknown;

25 25 ( :lexeme := lbracket ; ) :lexeme := rbracket ; + : lexeme := addop ; lexemeval.addval :=add - : lexeme := addop ; lexemeval.addval :=sub * : lexeme := mulop ; lexemeval.mulval :=mul / : lexeme :=mulop ; lexemeval.mulval :=divd < : lexeme := relop; ch := nextch ; if ch = = then ch := getch ; lexemeval.relval := le; end else if ch = > then ch := getch ; lexemeval.relval := ne; end else lexemeval.relval := lt ; = : lexeme := relop;lexemeval.relval:=eq > : lexeme := relop; ch := nextch ; if ch = = then ch := getch ; lexemeval.relval := ge; end else lexemeval.relval := gt ; end else lexeme := unknown ; error(4) ; {bilinmeyen karakter} {getlexeme} Şekil 2.3 Getlexeme prosedürü. Getlexeme prosedürü iki yardımcı fonksiyon kullanır. Bunlar nextch ve getch fonksiyonlarıdır. Nextch fonksiyonu sıradaki karakteri döndürür ama işlem sayacını ilerletmez. Getch ise mevcut karakteri döndürür.

26 26 Function nextch : cahr ; if linepos>linesize then if eof then error(1) ; {dosya sonu} goto 999 ; {önemli hata} end else linesize :=1; while (not eoln) and (linesize<linewidth] do read(line[linesize]); write(line[linesize]); linesize := linesize +1; end ; writeln; if eoln then line[linesize] := ; readln ; end else line[linesize] := linesize 1; error(2); {satır çok uzun} linepos := 1; nextch := line[linepos]; function getch :char ; getch := nextch ; linepos := linepos + 1 Şekil 2.4 Nextch ve Getch fonksiyonları. Lexical analizin bir diğer önemli prosedürü de hata tespiti yapan modüldür. Bu kısım hataya rastlandığında hatanın koduna göre uygun bir mesaj gönderir. Procedure error ( n: integer) ; write ( :linepos 1); case n of 1 : writeln ( Dosya sonu ); 2 : writeln ( satır çok uzun,max uz.=,linewidth ); 3 : {beklenmedik sembol}; 4 : writeln ( tanımlanamayan karakter ); 5 : writeln ( : den sonra = olması gerekir. ); 6 : writeln ( tanımlanamayan madde ); 7 : writeln ( hatalı kelime yapısı ); 8 : writeln ( değişken daha önce tanımlandı. ); 9 : writeln ( değişken tanımlı değil );

27 27 10 : writeln ( çok fazla kod ); errors := true; Şekil 2.5 Hata raporlama. Init prosedürü ilk değer atama prosedürüdür. Procedure init; ; linesize := 0; linepos := 1; errors := false; firstlexeme := dot; lexemes[dot] :=. ; lexemes[constant] := rakam ; lexemes[identifier] := isim ; lexemes[comma] :=, ; lexemes[assign] := := ; lexemes[semicolon] := ; ; lexemes[lbracket] := ( ; lexemes[rbracket] := ) ; lexemes[addop] := + veya ; lexemes[mulop] := * veya / ; lexemes[relop] := < = > ; lexemes[lexeme] := BEGIN ; lexemes[readlexeme] := READ ; lexemes[writelexeme] := WRITE ; lexemes[iflexeme] := IF ; lexemes[thenlexeme] := THEN ; lexemes[whilelexeme] := WHILE ; lexemes[dolexeme] := DO ; lexemes[varlexeme] := VAR ; lexemes[endlexeme] := END ; lexemes[unknown] :=? ; lastlexeme := unknown ; end ; Şekil 2.6 İlk değer atama prosedürü. 2.2 Syntax Analiz Bu aşamanın sonunda kesin ve açık bir çıktı alınmaz. Çünkü derleme işleminin geri kalan bölümleri syntax analiz aşaması ile birleştirilir ve uygulanır.bu bölümde kullanılan tek y ardımcı fonksiyon checkorskip mantıksal fonksiyonudur.

28 28 Procedure expression; term(stopset + [addop]); while lexeme = addop do term(stopset + [addop]); Function checkorskip (okset, stopset : lexemetype):boolean; var alexeme : lexemetype; orflag : boolean; if lexeme in okset then checkorskip := true; else checkorskip := false; error(3); orflag := false; for alexeme := firstlexeme to lastlexeme do if alexeme in okset then if orflag yhen write( veya ); orflag := true; write(lexemes[alexeme]); writeln( expected ); if stopset <> [] then while not ( lexeme in stopset) do error(7); Şekil 2.7 İlk değer atama. Syntax analizin genel formu genelde aşağıda görüldüğü gibi oluşturulur. Program syntax (input,output); {Daha önce tanımlanan; prosedürleri,fonksiyon hatalarını, karakter çağırmayı, kelimeleri birleştirmeyi ve sıradaki karakteri belirlemeyi içeren lexical tanımlamalar bu programı tamamlamak için de kullanılır.} type lexemesettype = set of lexemetype; var startexp, startblock : lexemesettype; procedure idlist (stopset: lexemesettype); var ignore, finish : boolean; repeat if checkorskip([identifier], stopset + [semicolon, comma]) then {semantic analiz evresindeli declid prosedürü çağrılır.}

29 29 ignore := checkorskip([semicolon, comma]), stopset + [comma, identifier]); finish := not ( lexeme in [comma, identifier]); if lexeme = comma then until finish; if lexeme = semicolon then procedure expression (stopset : lexemesettype) ; forward; procedure factor (stopset : lexemesettype); if checkorskip(startexp, stopset) yhen if lexeme = identifier then {semantic analizdeki checkid prosedürü çağrılır.} end else if lexeme = constant then end else if lexeme = lbracket then expression(stopset + [rbracket]); if checkorskip([rbracket], stopset) then end else if lexeme = readlexeme then procedure term (stopset : lexemesettype); factor(stopset + [mulop]); while lexeme = mulop do factor(stopset + [mulop]); procedure expression ; term(stopset + [addop]); while lexeme = addop do term(stopset + [addop9); procedure block (stopset : lexemesettype); forward;

30 30 procedure comparison (stopset :lexemesettype); expression(stopset + [relop]); if checkorskip 8[relop], stopset + startexp) then expression(stopset + startblock [identifier]); procedure statement (stopset :lexemesettype); if checkorskip(stopset+ startblock, stopset) then if lexeme = identifier then {semantic analizdeki checkid prosedürü çağrılır.} if checkorskip([assign],stopset + startexp) then expresiion(stopset); end else if lexeme = iflexeme then comparison(stopset + [thenlexeme]+ startblock [identifier]); if checkorskip([thenlexeme], stopset + startblock) then block(stopset); end else if lexeme = whilelexeme then comparison(stopset + [dolexeme] + startblock [identifier]); if checkorskip([dolexeme],stopset+startblock) then block(stopset); end else if lexeme = writelexeme then if checkorskip([lbracket],stopset + [rbracket] + startexp) then expression(stopset + [rbracket]); if checkorskip([rbracket], stopset) then procedure block ; var ignore : boolean;

31 31 ignore := checkorskip(stopset + startblock, stopset + startblock); if lexeme = lexeme then block(stopset+ [semicolon, endlexeme]); ignore := checkorskip([semicolon,endlexeme], stopset + [semicolon]+ startblock); while lexeme in ([semicolon] startblock) do if lexeme = semicolon then block(stopset + [semicolon,endlexeme]); ignore:= checkorskip([semicolon,endlexeme], topset + [semicolon] +startblock ); if lexeme = endlexeme then end else statement(stopset); procedure prog; if lexeme = varlexeme then idlist([lexeme,semicolon,dot]); repeat block([dot]); until checkorskip([dot],[]); procedure init ; {Şekil 4.6 daki lexical ilkdeğer atamaya benzer.} startexp := [rbracket, identifier, constant, readlexeme]; startblock :=[lexeme,identifier, iflexeme, whilelexeme, writelexeme]; init; prog; 999; end. Şekil 2.8 Syntax analiz aşaması.

32 Semantic Analiz Semantic analiz aşaması genel olarak iki temel prosedürden oluşur. Bunlar declid ve checkid rutinleridir. declid prosedürü bir tanımlayıcı listeye eklenince çağrılır. Eğer tanımlayıcı ilk kez deklare ediliyorsa o zaman bu çağrım gerçekleşir. checkid ise tanımlayıcının her kullanılışında çağrılır. Program semantics (input,output); {Daha önceki bölümlerde tanımlanan tüm fonsiyonlar, prosedürler bu programın tamamlanması için de geçerlidir.} var variables :array[ A.. Z ] of 1..maxint; {-1 = tanımlı değil, 0 = kullanılmıyor, >0= adresler} nextvariable :1..maxint; procedure declid ; if variables[lexemeval.idval] > 0 then error(8) else variables[lexemeval.idval] := nextvariable ; nextvariable := nextvariable +1; procedure checkid; if variables[lexemeval.idval] = 0 then error(9); variables[lexemeval.idval] := -1; procedure init ; var ch : char ; nextvariable := 1; for ch := A to Z do variable[ch] := 0; init; prog; 999; end. Şekil 2.9 Semantic analiz için ek kod.

33 Kod Oluşturma Bu aşamada genelde syntax analiz tarafından çağrılan ve kullanılan prosedürler vardır. Bunlar plant, plantaccload, savelabel, saveforwardlabel ve, plantforwardlabel prosedür ve fonksiyonlarıdır. Bu fonksiyonlar şekil 4.10 da gösterilmiştir. Procedure plant(fn : functiontype; optype: optypetype; opval : integer); if codepos >= maxcodethen error(10); codepos := 0; with store [codepos] do funct := fn; case optype of specialop: accmode := specialop; accval := opval; labelop: if fn = call then callval := opval; else brval := opval; constop : accval := opval; accmode := constop; varop : accval := opval; accmode := varop; procedure plantforwardlabel (pos :integer); writeln( label :used form,pos); store[pos].brval := codepos; function saveforwardlabel : integer; writeln( label used ); saveforwardlabel := codepos ;

34 34 function savelabel : integer ; writeln ( label: ); savelabel := codepos ; procedure plantaccload (optype :optypetype ; opval:integer); if optype <> specialop then if accinuse then plant(stackaccload,optype, opval) else plant ( accload, optype, opval); accinuse := true; Şekil 2.10 Kod oluşturma rutinleri. Kod oluşturma programı ise aşağıda görüldüğü gibidir. Bu program bir bellek yerleştirme tablosu olarak da düşünülebilir. Program code (input,output); {Daha önce yapılan tüm tanımlamalar, prosedürler,fonksiyonlar bu programın tamamlanması için de geçerlidir.} const nulop = 0; readproc = 1 ; writeproc = 2 ; stack = 1 ; unstack = 2 ; nooperand = 3 ; maxcode = 500 ; type functiontype = (accload, accstore, stackaccload, accplus, accminus, minusacc, acctimes, accdiv, divacc, stop, call, acccompare, br, breq, brne, brlt, brle, brge, brgt); optypetype = ( specialop, constop, varop, labelop); calltype = readproc..writeproc; mode = specialop..varop; data = integer; address = 0..maxcode; inst = record case funct : functiontype of accload, accstore, stackaccload, accplus, accminus, minusacc, acctimes, accdiv, divacc, acccompare: (accmode : mode; accval : data); br, breq, brne, brlt, brle, brge, brgt : (brval : address); call : (callval : calltype); stop : () ;

35 35 var accinuse : boolean ; codepos : 0..maxint ; {işlenecek olan yeni kod parçasının pozisyonu} forwardadd,reverseadd:array [addvaltype] of functiontype; forwardmul,reversemul:array [mulvaltype] of functiontype; normalskip,reverseskip:array[relvaltype] of functiontype; fnnames : array [functiontype] of nametype ; store : array [address] of inst ; procedure expression (stopset:lexemesettype; var optype :optypetype; var opval:integer);forward; procedure block(stopset :lexemesettype); forward ; procedure factor (stopset:lexemesettype; var optype: optypetype; var opval :integer); optype := specialop; if checkorskip(startexp, stopset) then if lexeme = identifier then checkid; optype := varop; opval := variables[lexemeval.idval]; end else if lexeme = constant then optype := constop ; opval := lexemeval.constval; end else if lexeme = lbracket then expression(stopset + [rbracket], optype, opval); if checkorskip([rbracket], stopset) then end else if lexeme = readlexeme then if accinuse then plant(accstore, specialop, stack); plant(call, labelop, readproc); accinuse := true ; optype := specialop; procedure term(stopset: lexemesettype; var optype:optypetype; var opval : integer);

36 36 var operator : mulvaltype; roptype : optypetype; ropval :integer; factor(stopset + [mulop], optype, opval); while lexeme = mulop do plantaccload (optype, opval); optype := specialop; operator := lexemeval.mulval; factor(stopset + [mulop], roptype, ropval ); if roptype = specialop then plant(reversemul[operator],specialop,unstack); else plant (forwardmul[operator],roptype, ropval); procedure expression; var operator : addvaltype; roptype : optypetype; ropval : integer; term(stopset + [addop], optype, opval); while lexeme = addop do plantaccload(optype, opval); optype := specialop; operator := lexemeval.addval; term(stopset + [addop], roptype, ropval); if roptype = specialop then plant(reverseadd[operator],specialop,unstack); else plant(forwardadd[operator],roptype,ropval); procedure comparison(stopset : lexemesettype; var iflabel : integer); var compareop : relvaltype; optype : optypetype; opval : integer; expression(stopset + [relop], optype, opval); plantaccload(optype, opval); if checkorskip([relop],stopset + startexp) then compareop := lexemeval.relval; end else compareop := eq; expression(stopset + startblock [identifier],optype, opval); if optype <> specialop then plant(acccompare, optype, opval);

37 37 iflabel := saveforwardlabel ; plant(normalskip[compareop],labelop,nulop); end else plant(accompare, specialop, unstack); iflabel := saveforwaqrdlabel; palnt(reverseskip[compareop], labelop, nulop); procedure statement (stopset : lexemesettype); var assignto : integer; optype : optypetype ; opval, iflabel, whilelabel :integer; accinuse := false; if checkorskip(stopset + startblock, stopset) then if lexeme = identifier then checkid; assignto := variables[lexemeval.idval]; if checkorskip([assign],stopset + astartexp) then expression(stopset, optype, opval) ; plantaccload( optype, opval ) ; plant ( accstore, varop, assignto); end else if lexeme = iflexeme then comparison(stopset + [thenlexeme] + startblock- [identifier], iflabel); if checkorskip([thenlexeme],stopset+startblock) then block(stopset); plantforwardlabel(iflabel); end else if lexeme = whilelexeme then whilelabel := savelabel ; comparison(stopset + [dolexeme] + startblock - [identifier], iflabel); if checkorskip([dolexeme],stopset + startblock) then block(stopset); plant(br, labelop, whilelabel); plantforwardlabel(iflabel); end else if lexeme = writelexeme then

Bilgisayarda Programlama. Temel Kavramlar

Bilgisayarda Programlama. Temel Kavramlar Bilgisayarda Programlama Temel Kavramlar KAVRAMLAR Programlama, yaşadığımız gerçek dünyadaki problemlere ilişkin çözümlerin bilgisayarın anlayabileceği bir biçime dönüştürülmesi / ifade edilmesidir. Bunu

Detaylı

4- Turbo Pascal Bilgisayar Programlamada Kullanılan Şart Yapıları

4- Turbo Pascal Bilgisayar Programlamada Kullanılan Şart Yapıları 4- Turbo Pascal Bilgisayar Programlamada Kullanılan Şart Yapıları Şart yapıları bir bilgisayar programının olmazsa olmazlarındandır. Şart yapıları günlük hayatımızda da çok fazla karşılaştığımız belirli

Detaylı

Günümüz bilgi toplumunda bilgisayar, her alanda kendine yer edinmiş ve insana, bir çok işlemde yardımcı olarak büyük kolaylık sağlamaktadır.

Günümüz bilgi toplumunda bilgisayar, her alanda kendine yer edinmiş ve insana, bir çok işlemde yardımcı olarak büyük kolaylık sağlamaktadır. I. GİRİŞ Günümüz bilgi toplumunda bilgisayar, her alanda kendine yer edinmiş ve insana, bir çok işlemde yardımcı olarak büyük kolaylık sağlamaktadır. İnsanların elle yaptığı ve yapmakta olduğu bir çok

Detaylı

Dr. Fatih AY Tel: 0 388 225 22 55 fatihay@fatihay.net www.fatihay.net

Dr. Fatih AY Tel: 0 388 225 22 55 fatihay@fatihay.net www.fatihay.net Bilgisayar Programlama Ders 1 Dr. Fatih AY Tel: 0 388 225 22 55 fatihay@fatihay.net www.fatihay.net Bilgisayar Programlamaya C ile Programlamaya Yazılım: Bilgisayarın işlemler yapması ve karar vermesi

Detaylı

PROGRAMLAMAYA GİRİŞ. Öğr. Gör. Ayhan KOÇ. Kaynak: Algoritma Geliştirme ve Programlamaya Giriş, Dr. Fahri VATANSEVER, Seçkin Yay.

PROGRAMLAMAYA GİRİŞ. Öğr. Gör. Ayhan KOÇ. Kaynak: Algoritma Geliştirme ve Programlamaya Giriş, Dr. Fahri VATANSEVER, Seçkin Yay. PROGRAMLAMAYA GİRİŞ Öğr. Gör. Ayhan KOÇ Kaynak: Algoritma Geliştirme ve Programlamaya Giriş, Dr. Fahri VATANSEVER, Seçkin Yay., 2007 Algoritma ve Programlamaya Giriş, Ebubekir YAŞAR, Murathan Yay., 2011

Detaylı

Bilgi ve İletişim Teknolojileri (JFM 102) Ders 10. LINUX OS (Programlama) BİLGİ & İLETİŞİM TEKNOLOJİLERİ GENEL BAKIŞ

Bilgi ve İletişim Teknolojileri (JFM 102) Ders 10. LINUX OS (Programlama) BİLGİ & İLETİŞİM TEKNOLOJİLERİ GENEL BAKIŞ Ders 10 LINUX OS (Programlama) BİLGİ & İLETİŞİM TEKNOLOJİLERİ GENEL BAKIŞ LINUX de Programlama LINUX işletim sistemi zengin bir programlama ortamı sağlar. Kullanıcılara sistemi geliştirme olanağı sağlar.

Detaylı

PASCAL PROGRAMLAMA DİLİ YAPISI

PASCAL PROGRAMLAMA DİLİ YAPISI BÖLÜM 3 PASCAL PROGRAMLAMA DİLİ YAPISI 3.1. Giriş Bir Pascal programı en genel anlamda üç ayrı kısımdan oluşmuştur. Bu kısımlar bulunmaları gereken sıraya göre aşağıda verilmiştir. Program Başlığı; Tanımlama

Detaylı

ALGORİTMA VE PROGRAMLAMA I

ALGORİTMA VE PROGRAMLAMA I ALGORİTMA VE PROGRAMLAMA I YZM 1101 Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi 2. BÖLÜM 2 PROGRAMLAMAYA GİRİŞ Programlama Terimleri ve Programlama Ortamı 3 Program Programlama IDE

Detaylı

1.1. Yazılım Geliştirme Süreci

1.1. Yazılım Geliştirme Süreci Kazanımlar Bu bolümde; Yazılım geliştirme sureci konusunda bilgi sahibi olacak, Yazılım geliştirme surecinde gerekli olan araçları tanıyacak, Python dilinde program geliştirme ortamlarını inceleyebileceksiniz.

Detaylı

Algoritmalar ve Programlama. Algoritma

Algoritmalar ve Programlama. Algoritma Algoritmalar ve Programlama Algoritma Algoritma Bir sorunu / problemi çözmek veya belirli bir amaca ulaşmak için gerekli olan sıralı mantıksal adımların tümüne algoritma denir. Algoritma bir sorunun çözümü

Detaylı

Pascal Programlama Dili

Pascal Programlama Dili Pascal Programlama Dili Öğr. Gör. Özgür ZEYDAN Z.K.Ü. Çevre Müh. Bölümü Pascal Programlarının Yapısı Program program_adı; Uses unitler type Özel veri tipleri Const Sabitler Label etiketler var değişken

Detaylı

Yazılım Mühendisliğine Giriş 4. Hafta 2016 GÜZ

Yazılım Mühendisliğine Giriş 4. Hafta 2016 GÜZ Yazılım Mühendisliğine Giriş 4. Hafta 2016 GÜZ 1 İkinci Kuşak Bilgisayarlar 1956-1963: Transistor Transistor 1947 yılında keşfedilmiştir. 50 li yılların sonuna kadar bilgisayarlarda yaygın kullanımı görülmez.

Detaylı

ELN1001 BİLGİSAYAR PROGRAMLAMA I

ELN1001 BİLGİSAYAR PROGRAMLAMA I ELN1001 BİLGİSAYAR PROGRAMLAMA I DEPOLAMA SINIFLARI DEĞİŞKEN MENZİLLERİ YİNELEMELİ FONKSİYONLAR Depolama Sınıfları Tanıtıcılar için şu ana kadar görülmüş olan özellikler: Ad Tip Boyut Değer Bunlara ilave

Detaylı

5. PROGRAMLA DİLLERİ. 5.1 Giriş

5. PROGRAMLA DİLLERİ. 5.1 Giriş 5. PROGRAMLA DİLLERİ 8.1 Giriş 8.2 Yazılım Geliştirme Süreci 8.3 Yazılım Geliştirme Sürecinde Programlama Dilinin Önemi 8.4 Programlama Dillerinin Tarihçesi 8.5 Programlama Dillerinin Sınıflandırılması

Detaylı

Pascalda oluşturulacak dosyalar değişkenler gibi programın başında tanımlanır.

Pascalda oluşturulacak dosyalar değişkenler gibi programın başında tanımlanır. DOSYALAMALAR Programlama bilgilerin her zaman ekrana yazdırılması veya değişkenlerde tutulması yeterli olmayabilir. Programın çalışması sonucu girilen yada hesaplanan her bilgi manyetik ortama programda

Detaylı

Yazılım Çeşitleri. Uygulama Yazılımları. İşletim Sistemleri. Donanım

Yazılım Çeşitleri. Uygulama Yazılımları. İşletim Sistemleri. Donanım Yazılım Yazılım Bilgisayarlar üretildikleri anda içlerinde herhangi bir bilgi barındırmadıkları için bir işlevleri yoktur. Bilgisayarlara belirli yazılımlar yüklenerek işlem yapabilecek hale getirilirler.

Detaylı

Algoritma ve Akış Diyagramları

Algoritma ve Akış Diyagramları Algoritma ve Akış Diyagramları Bir problemin çözümüne ulaşabilmek için izlenecek ardışık mantık ve işlem dizisine ALGORİTMA, algoritmanın çizimsel gösterimine ise AKIŞ DİYAGRAMI adı verilir 1 Akış diyagramları

Detaylı

BİLGİSAYAR BİLİMİ DERSİ (KUR 1) PYTHON PROGRAMLAMA DİLİ ÇALIŞMA KÂĞIDI - 1

BİLGİSAYAR BİLİMİ DERSİ (KUR 1) PYTHON PROGRAMLAMA DİLİ ÇALIŞMA KÂĞIDI - 1 BİLGİSAYAR BİLİMİ DERSİ (KUR 1) PYTHON PROGRAMLAMA DİLİ ÇALIŞMA KÂĞIDI - 1 Ekrana Metin Yazdırmak Ekranda metin yazdırmak istendiğinde print komutu kullanılır. Kullanımı aşağıda verilmiştir. Parantez içinde

Detaylı

PROGRAMLAMAYA GİRİŞ DERS 2

PROGRAMLAMAYA GİRİŞ DERS 2 PROGRAMLAMAYA GİRİŞ DERS 2 Program editörde oluşturulur ve diske kaydedilir Tipik Bir C Programı Geliştirme Ortamının Temelleri 1. Edit 2. Preprocess 3. Compile 4. Link 5. Load 6. Execute Önişlemci programı

Detaylı

PROGRAMLAMA TEMELLERİ

PROGRAMLAMA TEMELLERİ PROGRAMLAMA TEMELLERİ 2.HAFTA Yazılım Yazılım, elektronik aygıtların belirli bir işi yapmasını sağlayan programların tümüne verilen isimdir. Bir başka deyişle var olan bir problemi çözmek amacıyla bilgisayar

Detaylı

TEMEL BİLGİSAYAR BİLİMLERİ. Programcılık, problem çözme ve algoritma oluşturma

TEMEL BİLGİSAYAR BİLİMLERİ. Programcılık, problem çözme ve algoritma oluşturma TEMEL BİLGİSAYAR BİLİMLERİ Programcılık, problem çözme ve algoritma oluşturma Programcılık, program çözme ve algoritma Program: Bilgisayara bir işlemi yaptırmak için yazılan komutlar dizisinin bütünü veya

Detaylı

C# Programlama Dili. İlk programımız Tür dönüşümü Yorum ekleme Operatörler

C# Programlama Dili. İlk programımız Tür dönüşümü Yorum ekleme Operatörler C# Programlama Dili İlk programımız Tür dönüşümü Yorum ekleme Operatörler 1 İlk Programımız Bu program konsol ekranına Merhaba dünya! yazıp kapanır. Programı geçen derste anlatıldığı gibi derleyin, sonra

Detaylı

BLGM BÖLÜM. Problem Çözme Kavramları (Algoritma ve Akış Şemaları)

BLGM BÖLÜM. Problem Çözme Kavramları (Algoritma ve Akış Şemaları) BLGM108 1. BÖLÜM Problem Çözme Kavramları (Algoritma ve Akış Şemaları) 1 Yazılım Geliştirme Adımları 1. Gereksinimlerin belirlenmesi Problemin ne olduğunu anlama: sorunu çözmek için ne gereklidir, çözüm

Detaylı

ALGORİTMALAR. Turbo C Bilgisayarda Problem Çözme Adımları. Bilgisayarda Problem Çözme Adımları.

ALGORİTMALAR. Turbo C Bilgisayarda Problem Çözme Adımları. Bilgisayarda Problem Çözme Adımları. Turbo C ++ 3.0 ALGORİTMALAR http://vaibhavweb.tripod.com/others/tc3.zip http://www.top4download.com/turbo-c- /aklqwuba.html 1 2 Bilgisayarda Problem Çözme Adımları Bilgisayarda Problem Çözme Adımları 1-Problemi

Detaylı

C Programlama Dilininin Basit Yapıları

C Programlama Dilininin Basit Yapıları Bölüm 2 C Programlama Dilininin Basit Yapıları İçindekiler 2.1 Sabitler ve Değişkenler......................... 13 2.2 Açıklamalar (Expresions)........................ 14 2.3 İfadeler (Statements) ve İfade

Detaylı

BIL1202 ALGORİTMA VE PROGRAMLAMAYA GİRİŞ (Algoritma Geliştirmek, Satır Kod)

BIL1202 ALGORİTMA VE PROGRAMLAMAYA GİRİŞ (Algoritma Geliştirmek, Satır Kod) 2017-2018 BaharYarıyılı Balıkesir Üniversitesi Endüstri Mühendisliği Bölümü 3 BIL1202 ALGORİTMA VE PROGRAMLAMAYA GİRİŞ (Algoritma Geliştirmek, Satır Kod) Yrd. Doç. Dr. İbrahim Küçükkoç Web: ikucukkoc.baun.edu.tr

Detaylı

Bölüm1. İlk Bilgiler ISBN 0-321-49362-1

Bölüm1. İlk Bilgiler ISBN 0-321-49362-1 Bölüm1 İlk Bilgiler ISBN 0-321-49362-1 Bölüm 1 Konuları Niye Programlama Dilleri prensiplerini öğreniyoruz? Programlama alanları Dil değerlendirme kriterleri Dit tasarımına etkiler Dil kategorileri Dil

Detaylı

Program Nedir? Program, bir problemin çözümü için herhangi bir programlama dilinin kuralları ile oluşturulmuş komut kümesidir.

Program Nedir? Program, bir problemin çözümü için herhangi bir programlama dilinin kuralları ile oluşturulmuş komut kümesidir. PROGRAMLAMAYA GİRİŞ Program Nedir? Program, bir problemin çözümü için herhangi bir programlama dilinin kuralları ile oluşturulmuş komut kümesidir. C de yazılan bir programın çalışması için çoğunlukla aşağıdaki

Detaylı

Görsel Programlama DERS 03. Görsel Programlama - Ders03/ 1

Görsel Programlama DERS 03. Görsel Programlama - Ders03/ 1 Görsel Programlama DERS 03 Görsel Programlama - Ders03/ 1 Java Dili, Veri Tipleri ve Operatörleri İlkel(primitive) Veri Tipleri İLKEL TİP boolean byte short int long float double char void BOYUTU 1 bit

Detaylı

PROGRAMLAMA TEMELLER. C Program Yap s

PROGRAMLAMA TEMELLER. C Program Yap s PROGRAMLAMA TEMELLER 1 C Program Yap s 2 Aç klama sat r Program kodlar n makine diline çeviren C dili derleyicisi /* ve */ karakterleri aras nda kalan bölümleri ihmal eder. /* Aç klama Sat r */ Sadece

Detaylı

Konular. Hafta 5 Veri Tipleri (Devam) BLG339 PROGRAMLAMA DİLLERİ KAVRAMI

Konular. Hafta 5 Veri Tipleri (Devam) BLG339 PROGRAMLAMA DİLLERİ KAVRAMI BLG339 PROGRAMLAMA DİLLERİ KAVRAMI Hafta 5 Veri Tipleri (Devam) Yrd. Doç. Dr. Melike Şah Direkoğlu Konular Dizi Tipleri Kayıt Tipleri Birleşik Tipler Küme Tipleri İşaretçi ve Referans Tipleri Alındığı

Detaylı

BİLGİSAYAR ORGANİZASYONU

BİLGİSAYAR ORGANİZASYONU BİLGİSAYAR ORGANİZASYONU Donanım Bilgisayarın fiziksel bölümü Monitor, klavye, fare Entegreler, kartlar Kablolar Yazılım: Bilgisayarın mantıksal bölümü Programlar: Bilgisayarın gerçekleştireceği komutlar

Detaylı

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Uzaktan Eğitim Uygulama ve Araştırma Merkezi JAVA PROGRAMLAMA Öğr. Gör. Utku SOBUTAY İÇERİK 2 Java da Fonksiyon Tanımlamak Java da Döngüler Java da Şart İfadeleri Uygulamalar Java da Fonksiyon Tanımlamak JAVA DA FONKSİYON TANIMLAMAK 4 Fonksiyonlar;

Detaylı

HSancak Nesne Tabanlı Programlama I Ders Notları

HSancak Nesne Tabanlı Programlama I Ders Notları DİZİLER Bellekte ard arda yer alan aynı türden nesneler kümesine dizi (array) denilir. Bir dizi içerisindeki bütün elemanlara aynı isimle ulaşılır. Yani dizideki bütün elemanların isimleri ortaktır. Elemanlar

Detaylı

Program Nedir?(1) Programlamaya Giriş

Program Nedir?(1) Programlamaya Giriş Programlamaya Giriş Arş. Gör. Muhammet BAYKARA Program Nedir?(1) Bir program bilgisayara ne yapması gerektiğini söyleyen bir dizi komuttur. Bilgisayarlar işlemlerin kendi anlayacağı dilde (makine dili)

Detaylı

İsimler ve Kapsam. 24 Şubat 2011. Programlama Dilleri - Pamukkale Üniversitesi 1

İsimler ve Kapsam. 24 Şubat 2011. Programlama Dilleri - Pamukkale Üniversitesi 1 İsimler ve Kapsam Tanım: Bir değişkenin kapsamı (scope) değişkenin görülebilir olduğu komutların alanıdır. Görülebilir olduğu alan, bir komut içinde belirlenen değerle kullanılabildiği alandır. Tanım:

Detaylı

Bilgisayar Programlama Dilleri

Bilgisayar Programlama Dilleri Bilgisayar Programlama Dilleri Ömer YÜCEL 13253072 1/32 Sunum İçeriği 1. Program ve Programlama Dili Nedir? 2. Programlama Dillerinin Tarihçesi 3. Programlama Dillerinin Sınıflandırılması 4. Programlama

Detaylı

Algoritmik Program Tasarımı, Akış Şemaları ve Programlama. Bilgisayar Mühendisliğine Giriş 1

Algoritmik Program Tasarımı, Akış Şemaları ve Programlama. Bilgisayar Mühendisliğine Giriş 1 Algoritmik Program Tasarımı, Akış Şemaları ve Programlama Bilgisayar Mühendisliğine Giriş 1 I) Algoritmik Program Tasarımı, Akış Şemaları Algoritmik program tasarımı, verilen bir problemin bilgisayar ortamında

Detaylı

Ünite-3 Bilgisayar Yazılımı. www.cengizcetin.net

Ünite-3 Bilgisayar Yazılımı. www.cengizcetin.net Ünite-3 Bilgisayar Yazılımı Yazılım Kavramı Bilgisayarın belirli bir işi gerçekleştirebilmesi için kullanıcı tarafından her adımda ne yapacağı tarif edilmiş olmalıdır. Yani kullanıcı bilgisayara uygun

Detaylı

VERİ YAPILARI VE PROGRAMLAMA (BTP104)

VERİ YAPILARI VE PROGRAMLAMA (BTP104) VERİ YAPILARI VE PROGRAMLAMA (BTP104) Yazar: Doç.Dr. İ. Hakkı CEDİMOĞLU S1 SAKARYA ÜNİVERSİTESİ Adapazarı Meslek Yüksekokulu Bu ders içeriğinin basım, yayım ve satış hakları Sakarya Üniversitesi ne aittir.

Detaylı

10.DERS Yazılım Gerçekleştirme

10.DERS Yazılım Gerçekleştirme 10.DERS Yazılım Gerçekleştirme 1 Giriş: Bilgisayarlara yaptırılmak istenenleri, anlatabilmek için programlama dilleri kullanılır. Bir ihtiyaç veya konu doğrultusunda meydana getirilen tasarım önce programlama

Detaylı

BİLGİSAYAR PROGRAMLAMAYA GİRİŞ

BİLGİSAYAR PROGRAMLAMAYA GİRİŞ BİLGİSAYAR PROGRAMLAMAYA GİRİŞ 5. ders notu Örnek program yazılımları İlişkisel operatörler Mantıksal operatörler Şartlı deyimler İf deyimi Kaynak: Dr.Deniz DAL ders sunumları Örnek : Dışarıdan girilen

Detaylı

BMÜ-111 ALGORİTMA VE PROGRAMLAMA AKIŞ KONTROLÜ YRD. DOÇ. DR. İLHAN AYDIN

BMÜ-111 ALGORİTMA VE PROGRAMLAMA AKIŞ KONTROLÜ YRD. DOÇ. DR. İLHAN AYDIN BMÜ-111 ALGORİTMA VE PROGRAMLAMA AKIŞ KONTROLÜ YRD. DOÇ. DR. İLHAN AYDIN TEMEL AMAÇLAR Bir dairenin yarıçapını kullanıcıdan alarak dairenin alanını hesaplamak istediğimizi düşünelim. Eğer girilen değer

Detaylı

BMT 101 Algoritma ve Programlama I Güz Dönemi. Yük. Müh. Köksal Gündoğdu 1

BMT 101 Algoritma ve Programlama I Güz Dönemi. Yük. Müh. Köksal Gündoğdu 1 BMT 101 Algoritma ve Programlama I 2016 2017 Güz Dönemi Yük. Müh. Köksal Gündoğdu 1 Elektrik Elektronik ve Bilgisayar Yük. Müh. Köksal Gündoğdu koksalgundogdu@ekargemuhendislik.com Yük. Müh. Köksal Gündoğdu

Detaylı

PROGRAMLAMAYA GİRİŞ FONKSİYONLAR

PROGRAMLAMAYA GİRİŞ FONKSİYONLAR PROGRAMLAMAYA GİRİŞ FONKSİYONLAR Fonksiyonlar C programlama dili fonksiyon olarak adlandırılan alt programların birleştirilmesi kavramına dayanır. Bir C programı bir ya da daha çok fonksiyonun bir araya

Detaylı

Java da Program Denetimi ve Operatörler

Java da Program Denetimi ve Operatörler Java da Program Denetimi ve Operatörler 1 Atamalar int a ; a=4 ; // doğru bir atama 4=a ; // yanlış bir atama! 2 Temel (Primitive) Tiplerde Atama int a, b ; a=4 ; b=5 ; a=b ; Sonuç : a=5, b=5 3 Nesneler

Detaylı

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Uzaktan Eğitim Uygulama ve Araştırma Merkezi JAVA PROGRAMLAMA Öğr. Gör. Utku SOBUTAY İÇERİK 2 Java Veri Tipleri ve Özelilkleri Değişken Tanımlama Kuralları Değişken Veri Tipi Değiştirme (Type Casting) Örnek Kodlar Java Veri Tipleri ve Özelilkleri

Detaylı

ALGORİTMA VE PROGRAMLAMA I

ALGORİTMA VE PROGRAMLAMA I ALGORİTMA VE PROGRAMLAMA I Yrd. Doç. Dr. Deniz KILINÇ deniz.kilinc@cbu.edu.tr YZM 1101 Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi Genel Bakış 2 Koşul Karşılaştırma Operatörleri Mantıksal

Detaylı

BİLGİSAYAR PROGRAMLAMA. Algoritma ve Akış Şemaları

BİLGİSAYAR PROGRAMLAMA. Algoritma ve Akış Şemaları BİLGİSAYAR PROGRAMLAMA Algoritma ve Akış Şemaları Algoritma tanımı Algoritma özellikleri Algoritma tasarımı Akış şemaları Dallanma simgeleri Döngü simgeleri Akış şeması tasarımı Akış şeması örnekleri Konu

Detaylı

mustafacosar@hitit.edu.tr http://web.hitit.edu.tr/mustafacosar

mustafacosar@hitit.edu.tr http://web.hitit.edu.tr/mustafacosar Algoritma ve Programlamaya Giriş mustafacosar@hitit.edu.tr http://web.hitit.edu.tr/mustafacosar İçerik Algoritma Akış Diyagramları Programlamada İşlemler o o o Matematiksel Karşılaştırma Mantıksal Programlama

Detaylı

Çoktan Seçmeli Değerlendirme Soruları Akış Şemaları İle Algoritma Geliştirme Örnekleri Giriş 39 1.Gündelik Hayattan Algoritma Örnekleri 39 2.Say

Çoktan Seçmeli Değerlendirme Soruları Akış Şemaları İle Algoritma Geliştirme Örnekleri Giriş 39 1.Gündelik Hayattan Algoritma Örnekleri 39 2.Say İÇİNDEKİLER 1. Bilgisayarın Yapısı Ve Programlama Dilleri Giriş 1 Bilgisayar ve Programlamanın Kısa Bir Tarihçesi 2 Donanım ve Yazılım Kavramları 3 Bilgisayarın Donanımsal yapısı 4 Giriş Birimi (Input

Detaylı

Diziler İndisli Değişkenler

Diziler İndisli Değişkenler Diziler İndisli Değişkenler Aynı tür bilgileri (öğrenci isimleri, şehir isimleri, kapı numaraları, fakülteler vbg.) bellekte tutmak için kullanabileceğimiz listelere dizi adı verilir. Dizi kullanmanın

Detaylı

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Uzaktan Eğitim Uygulama ve Araştırma Merkezi JAVA PROGRAMLAMA Öğr. Gör. Utku SOBUTAY İÇERİK 2 Java Kodlarına Yorum Satırı Eklemek Java Paket Kavramı Java Kütüphane Kavramı Konsoldan Veri Çıkışı ve JOPtionPane Kütüphanesi JOptionPane Kütüphanesi Kullanarak

Detaylı

ELN1002 BİLGİSAYAR PROGRAMLAMA 2

ELN1002 BİLGİSAYAR PROGRAMLAMA 2 ELN1002 BİLGİSAYAR PROGRAMLAMA 2 DOSYALAMA Sunu Planı Veri Hiyerarşisi Dosyalar ve Akımlar(streams) Sıralı Erişim (Sequential Access) dosyalarının oluşturulması Sıralı Erişim Dosyalarından Veri Okuma Rasgele

Detaylı

ALGORİTMA VE PROGRAMLAMA II

ALGORİTMA VE PROGRAMLAMA II ALGORİTMA VE PROGRAMLAMA II Yrd. Doç. Dr. Deniz KILINÇ deniz.kilinc@cbu.edu.tr YZM 1102 Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi Genel Bakış 2 Veri Hiyerarşisi Dosyalara Giriş

Detaylı

Sınav tarihi : Süre : 60 dak. a) ABCDE b) BCDE c) ABCD d) kod hatalı e) BCD

Sınav tarihi : Süre : 60 dak. a) ABCDE b) BCDE c) ABCD d) kod hatalı e) BCD Selçuk Üniversitesi, Mühendislik Fakültesi, Harita Mühendisliği Bölümü Yıliçi Sınavı Test Soruları Adı soyadı : Öğrenci no : Sınav tarihi : 13.04.2015 Süre : 60 dak. 1. Hangisi gerçek sayı değişmezi değildir?

Detaylı

Programlama Dilleri. C Dili. Programlama Dilleri-ders02/ 1

Programlama Dilleri. C Dili. Programlama Dilleri-ders02/ 1 Programlama Dilleri C Dili Programlama Dilleri-ders02/ 1 Değişkenler, Sabitler ve Operatörler Değişkenler (variables) bellekte bilginin saklandığı gözlere verilen simgesel isimlerdir. Sabitler (constants)

Detaylı

3/7/2011. ENF-102 Jeoloji 1. Tekrar -- Değişken Tanımlamaları (Definition) ve Veri Türleri (Data Type) Veri Tanımları ve Mantıksal Đşlemler

3/7/2011. ENF-102 Jeoloji 1. Tekrar -- Değişken Tanımlamaları (Definition) ve Veri Türleri (Data Type) Veri Tanımları ve Mantıksal Đşlemler Veri Tanımları ve Mantıksal Đşlemler Tekrar -- Değişken Tanımlamaları (Definition) ve Veri Türleri (Data Type) Kullanılacak bütün değişkenlerin kullanılmadan önce C derleyicisine bildirilmeleri gerekir.

Detaylı

C# nedir,.net Framework nedir?

C# nedir,.net Framework nedir? 1 C# nedir,.net Framework nedir? C# nedir? C#, C/C++ ve Java dillerinde türetilmiş,bu dillerin dezavantajlarının elenip iyi yönlerinin alındığı, güçlü basit, esnek, tip-güvenli(typesafe,tür dönüşümlerindeki

Detaylı

FONKSİYONLAR. Gerçek hayattaki problemlerin çözümü için geliştirilen programlar çok büyük boyutlardadır.

FONKSİYONLAR. Gerçek hayattaki problemlerin çözümü için geliştirilen programlar çok büyük boyutlardadır. C PROGRAMLAMA FONKSİYONLAR Gerçek hayattaki problemlerin çözümü için geliştirilen programlar çok büyük boyutlardadır. Daha büyük programlar yazmanın en kolay yolu onları küçük parçalar halinde yazıp sonra

Detaylı

Sunum İçeriği. Programlamaya Giriş 22.03.2011

Sunum İçeriği. Programlamaya Giriş 22.03.2011 Programlamaya Giriş Nesne Tabanlı Programlamaya Giriş ve FONKSİYONLAR Sunum İçeriği Nesne Tabanlı Programlama Kavramı Fonksiyon tanımlama ve kullanma Formal Parametre nedir? Gerçel Parametre nedir? Fonksiyon

Detaylı

Java Temel Özellikleri

Java Temel Özellikleri Java Temel Özellikleri Java Programlama Dili Java programlama dili şu anda dünyadaki en popüler programlama dillerinden biri haline gelmiştir. Java SUN bilgisayar şirketince elektrikli ev aletlerinin birbiriyle

Detaylı

Özyineleme (Recursion)

Özyineleme (Recursion) C PROGRAMLAMA Özyineleme (Recursion) Bir fonksiyonun kendisini çağırarak çözüme gitmesine özyineleme (recursion), böyle çalışan fonksiyonlara da özyinelemeli (recursive) fonksiyonlar denilir. Özyineleme,

Detaylı

BİLGİSAYAR TEMELLERİ VE PROGRAMLAMAYA GİRİŞ

BİLGİSAYAR TEMELLERİ VE PROGRAMLAMAYA GİRİŞ BİLGİSAYAR TEMELLERİ VE PROGRAMLAMAYA GİRİŞ Yrd.Doç.Dr. Emel ARSLAN earslan@istanbul.edu.tr C Program Akış Kontrol Yapıları Kontrol Komutları Normal şartlarda C dilinde bir programın çalışması, komutların

Detaylı

Bölüm 7. İfadeler ve atamalar ISBN

Bölüm 7. İfadeler ve atamalar ISBN Bölüm 7 İfadeler ve atamalar ISBN 0-321-49362-1 7. Bölüm konuları Giriş Aritmetik ifadeler Çok anlamlı (overloaded) operatörler Tip dönüşümleri (conversions) İlişkisel ve Boolean İfadeler Kısa-devre hesaplama

Detaylı

Endüstri Mühendisliği Bölümü Bilgisayar Programlama Ders Notları

Endüstri Mühendisliği Bölümü Bilgisayar Programlama Ders Notları 2. Veri Tipleri Turbo Pascal bilgisayar programlama dili ile programlama yapabilmek için bilgisayara işlem yapacağımız verilerin tiplerini bildirmemiz gereklidir. Veri tipleri değişken olabileceği gibi

Detaylı

Endüstri Mühendisliği Bölümü Bilgisayar Programlama Ders Notları

Endüstri Mühendisliği Bölümü Bilgisayar Programlama Ders Notları 1. Giriş Turbo Pascal bilgisayar programlama dili DOS işletim sistemi altında çalışan bilgisayar programlama dili aracıdır. Genel amaçlı bir programlama dili ve aynı zamanda gerekli operatör komutları

Detaylı

Endüstri Mühendisliği Bölümü Bilgisayar Programlama Ders Notları

Endüstri Mühendisliği Bölümü Bilgisayar Programlama Ders Notları 8- Turbo Pascal Programlama İle Dosya İşlemleri Dosya işlemleri bilgisayar programlamada verilerin tekrar kullanılması açısından çok önemlidir. Yazılan bilgisayar programlarında elde edilen sonuçlar eğer

Detaylı

PIC ASSEMBLY VE MAKROLAR

PIC ASSEMBLY VE MAKROLAR PIC ASSEMBLY VE MAKROLAR Abdullah UNUTMAZ Ağustos 2009 Pic Assembly ve Makrolar H U N R O B O T X M A K A L E L E R #DEFI E #DEFINE anahtar sözcüğü ile kendi tanımladığımız değişkenler, yada include dosyalarında

Detaylı

Doğu Akdeniz Üniversitesi Bilgisayar Mühendisliği Bölümü. BLGM 318 Ara Sınavı 2012 2013 Đlkbahar Dönemi 13 Nisan 2013. Ad, Soyad Öğrenci No.

Doğu Akdeniz Üniversitesi Bilgisayar Mühendisliği Bölümü. BLGM 318 Ara Sınavı 2012 2013 Đlkbahar Dönemi 13 Nisan 2013. Ad, Soyad Öğrenci No. Doğu Akdeniz Üniversitesi Bilgisayar Mühendisliği Bölümü BLGM 318 Ara Sınavı 2012 2013 Đlkbahar Dönemi 13 Nisan 2013 Ad, Soyad Öğrenci No. : : Öğretim Üyesi: Doç. Dr. Zeki BAYRAM Süre: 100 dakika Talimatlar:

Detaylı

PHP, nesne-yönelimli (object-oriented) bir dil olduğu için, nesne oluşturma imkânına ve bunların kullanılmasını sağlayan metodlara da sahiptir.

PHP, nesne-yönelimli (object-oriented) bir dil olduğu için, nesne oluşturma imkânına ve bunların kullanılmasını sağlayan metodlara da sahiptir. PHP'nin Temelleri PHP Nedir? PHP, bir programlama dili olarak, değişkenler, değişkenlerin değerleriyle bir işlem yapmayı sağlayan işlemciler (operatörler), işlemcilerle oluşturulan deyimler ve nihayet

Detaylı

İÇERİK PROGRAMLAMAYA GİRİŞ ALGORİTMA AKIŞ DİYAGRAMLARI PROGRAMLAMA DİLLERİ JAVA DİLİNİN YAPISI JAVA DA KULLANILAN VERİ TİPLERİ JAVA DA PROGRAM YAZMA

İÇERİK PROGRAMLAMAYA GİRİŞ ALGORİTMA AKIŞ DİYAGRAMLARI PROGRAMLAMA DİLLERİ JAVA DİLİNİN YAPISI JAVA DA KULLANILAN VERİ TİPLERİ JAVA DA PROGRAM YAZMA İÇERİK PROGRAMLAMAYA GİRİŞ ALGORİTMA AKIŞ DİYAGRAMLARI PROGRAMLAMA DİLLERİ JAVA DİLİNİN YAPISI JAVA DA KULLANILAN VERİ TİPLERİ JAVA DA PROGRAM YAZMA BÖLÜM-II ALGORİTMA I. GİRİŞ Bilgisayar dünyasında, insanın

Detaylı

İfadeler bir programlama dilinde hesaplamaları belirtmede temel araçtır. İfadelerin değerlendirmesini anlamak için,

İfadeler bir programlama dilinde hesaplamaları belirtmede temel araçtır. İfadelerin değerlendirmesini anlamak için, PDP 7 1 İfadeler bir programlama dilinde hesaplamaları belirtmede temel araçtır. İfadelerin değerlendirmesini anlamak için, operatörlerin sırası ve İşlenenlerin (operant) değerlendirmesine aşina olmamız

Detaylı

Merkezi İşlem Birimi MİKROİŞLEMCİ SİSTEMLERİ. MİB Yapısı. MİB in İç Yapısı. MİB Altbirimleri. MİB in İç Yapısı

Merkezi İşlem Birimi MİKROİŞLEMCİ SİSTEMLERİ. MİB Yapısı. MİB in İç Yapısı. MİB Altbirimleri. MİB in İç Yapısı Merkezi İşlem Birimi MİKROİŞLEMCİ SİSTEMLERİ Doç. Dr. Şule Gündüz Öğüdücü http://ninova.itu.edu.tr/tr/dersler/bilgisayar-bilisim-fakultesi/0/blg-1/ Merkezi İşlem Birimi (MİB): Bilgisayarın temel birimi

Detaylı

Programlama Giriş. 17 Ekim 2015 Cumartesi Yrd. Doç. Dr. Mustafa YANARTAŞ 1

Programlama Giriş. 17 Ekim 2015 Cumartesi Yrd. Doç. Dr. Mustafa YANARTAŞ 1 17 Ekim 2015 Cumartesi Yrd. Doç. Dr. Mustafa YANARTAŞ 1 Ders Not Sistemi Vize : % 40 Final : % 60 Kaynaklar Kitap : Algoritma Geliştirme ve Programlama Giriş Yazar: Dr. Fahri VATANSEVER Konularla ilgili

Detaylı

Bilgisayar Teknolojileri Bölümü Bilgisayar Programcılığı Programı. Öğr. Gör. Cansu AYVAZ GÜVEN

Bilgisayar Teknolojileri Bölümü Bilgisayar Programcılığı Programı. Öğr. Gör. Cansu AYVAZ GÜVEN Bilgisayar Teknolojileri Bölümü Bilgisayar Programcılığı Programı Öğr. Gör. Cansu AYVAZ GÜVEN NESNE TABANLI PROGRAMLAMA Java Değişkenler ve Veri Tipleri Operatörler JAVA Java Java SUN bilgisayar şirketince

Detaylı

TEMEL BİLGİSAYAR BİLİMLERİ

TEMEL BİLGİSAYAR BİLİMLERİ TEMEL BİLGİSAYAR BİLİMLERİ Doç. Dr. M.Ümit GÜMÜŞAY YTÜ - 2012 2 PROGRAMLAMA MANTIĞI Herhangi bir amaç için hazırlanan programın mantık hataları içermesi durumunda, alınacak sonucunda yanlış olacağı aşikardır.

Detaylı

BLG 1306 Temel Bilgisayar Programlama

BLG 1306 Temel Bilgisayar Programlama BLG 1306 Temel Bilgisayar Programlama Öğr. Grv. M. Mustafa BAHŞI WEB : mustafabahsi.cbu.edu.tr E-MAIL : mustafa.bahsi@cbu.edu.tr Bilgisayar ile Problem Çözüm Aşamaları Programlama Problem 1- Problemin

Detaylı

-A Grubu- MKT103 Görsel Programlama 2015/2016 Güz Dönemi Final Sınavı

-A Grubu- MKT103 Görsel Programlama 2015/2016 Güz Dönemi Final Sınavı KOCAELİ ÜNİVERSİTESİ 14.10.2016 MÜHENDİSLİK FAKÜLTESİ MEKATRONİK MÜHENDİSLİĞİ MKT103 Görsel Programlama 2015/2016 Güz Dönemi Final Sınavı Öğretim Üyesi: Prof. Dr. Hasan OCAK Sınav Süresi: 80 dakika. Her

Detaylı

Bölüm 1 PROGRAMLAMAYA GİRİŞ. Bölüm 2 ALGORİTMA

Bölüm 1 PROGRAMLAMAYA GİRİŞ. Bölüm 2 ALGORİTMA İçindekiler Önsöz... 5 Bölüm 1 PROGRAMLAMAYA GİRİŞ I. GİRİŞ... 17 II. PROGRAMLAMA DİLLERİ... 19 III. İŞLEMLER... 20 A. Matematiksel İşlemler... 21 B. Karşılaştırma İşlemleri... 26 C. Mantıksal İşlemler...

Detaylı

Programlama Temelleri. Ders notları. Öğr.Gör. Hüseyin Bilal MACİT 2017

Programlama Temelleri. Ders notları. Öğr.Gör. Hüseyin Bilal MACİT 2017 Programlama Temelleri Ders notları Öğr.Gör. Hüseyin Bilal MACİT 2017 İkili (binary) sayı sistemi Bilgisayarın bizim kullandığımız onlu sayı sistemini (decimal) işlemesi mümkün değildir. İkili sayı sistemi

Detaylı

Bilgisayar Mimarisi Nedir?

Bilgisayar Mimarisi Nedir? BİLGİSAYAR MİMARİSİ Bilgisayar Mimarisi Nedir? Bilgisayar mimarisi, diğer mimariler gibi, bir yapı kullanıcısının ihtiyaçlarını belirleme ve bu ihtiyaçları ekonomik ve teknolojik kısıtlamalar dahilinde

Detaylı

C Dersleri Bölüm 3 : Program akışı

C Dersleri Bölüm 3 : Program akışı İzmir Ekonomi Üniversitesi Bilgisayar Topluluğu www.ieubt.org C Dersleri Bölüm 3 : Program akışı Sorularınız için : programlama@ieubt.org Hazırlayan : Görkem PAÇACI (gorkem.pacaci@std.ieu.edu.tr) C Program

Detaylı

Üst düzey dillerden biri ile yazılmış olan bir programı, makine diline çeviren programa derleyici denir. C++ da böyle bir derleyicidir.

Üst düzey dillerden biri ile yazılmış olan bir programı, makine diline çeviren programa derleyici denir. C++ da böyle bir derleyicidir. İST 205 Bilgisayar Programlama III C Programlamaya Giriş ve Matematiksel-İstatistiksel Uygulamalar Y.Doç.Dr. Levent Özbek Ankara Üniversitesi Fen Fakültesi İstatistik Bölümü Tel: 0.312.2126720/1420 ozbek@science.ankara.edu.tr

Detaylı

10 LU SAYISAL SİSTEMİ İLE 2 Lİ SAYISAL SİSTEMİ ARASINDA ÇEVİRİM UYGULAMASI

10 LU SAYISAL SİSTEMİ İLE 2 Lİ SAYISAL SİSTEMİ ARASINDA ÇEVİRİM UYGULAMASI 10 LU SAYISAL SİSTEMİ İLE 2 Lİ SAYISAL SİSTEMİ ARASINDA ÇEVİRİM UYGULAMASI Sayısal Sistemler Sayısal sistem, sayıları temsil eden simgeler için bir yazma sistemi yani matematiksel bir gösterim sistemidir.

Detaylı

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 2

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 2 NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 2 JAVA DA PROGRAM DENETİMİ VE OPERATÖRLER Java programlama dilinde temel tipleri ve nesneleri yönlendirmek ve değiştirmek için operatörler kullanılır. Atamalar sağ taraftaki

Detaylı

EGE ÜNİVERSİTESİ EGE MYO MEKATRONİK PROGRAMI

EGE ÜNİVERSİTESİ EGE MYO MEKATRONİK PROGRAMI EGE ÜNİVERSİTESİ EGE MYO MEKATRONİK PROGRAMI 23.02.2015 Yrd.Doç.Dr. Dilşad Engin PLC Ders Notları 2 PROGRAMLANABİLİR DENETLEYİCİLER NÜMERİK İŞLEME 23.02.2015 Yrd.Doç.Dr. Dilşad Engin PLC Ders Notları 3

Detaylı

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-12 Fonksiyonlar. Yrd. Doç. Dr. Ümit ATİLA

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-12 Fonksiyonlar. Yrd. Doç. Dr. Ümit ATİLA BLM-111 PROGRAMLAMA DİLLERİ I Ders-12 Fonksiyonlar Yrd. Doç. Dr. Ümit ATİLA umitatila@karabuk.edu.tr http://web.karabuk.edu.tr/umitatilla/ Fonksiyonlar Fonksiyonlar C de modüller Programlar kullanıcı tanımlı

Detaylı

Öğr. Gör. Serkan AKSU http://www.serkanaksu.net. http://www.serkanaksu.net/ 1

Öğr. Gör. Serkan AKSU http://www.serkanaksu.net. http://www.serkanaksu.net/ 1 Öğr. Gör. Serkan AKSU http://www.serkanaksu.net http://www.serkanaksu.net/ 1 JavaScript JavaScript Nedir? Nestcape firması tarafından C dilinden esinlenerek yazılmış, Netscape Navigator 2.0 ile birlikte

Detaylı

2013-14 GÜZ YY. - MKT103 - GÖRSEL PROGRAMLAMA DERSİ - ARA SINAVI

2013-14 GÜZ YY. - MKT103 - GÖRSEL PROGRAMLAMA DERSİ - ARA SINAVI 2013-14 GÜZ YY. - MKT103 - GÖRSEL PROGRAMLAMA DERSİ - ARA SINAVI KOÜ Mekatronik Mühendisliği Bölümü/MKT-103-Görsel Programlama Dersi - Ara Sınav J-grubu Ad-Soyad:...No:... J GRUBU-süre:70dk 1.) Aşağıdaki

Detaylı

Yrd. Doç. Dr. Caner ÖZCAN

Yrd. Doç. Dr. Caner ÖZCAN Yrd. Doç. Dr. Caner ÖZCAN Diziler ile Pointer Arası İlişki Bir dizi adı sabit bir pointer gibi düşünülebilir. Diziler ile pointer lar yakından ilişkilidir. Pointer lar değişkenleri gösterdikleri gibi,

Detaylı

Bölüm 9. Altprogramlar ISBN

Bölüm 9. Altprogramlar ISBN Bölüm 9 Altprogramlar ISBN 0-321-49362-1 Giriş Bu bölümde, programlarda sıkça kullanılan işlemlerin bir araya gruplanması ile oluşturulan altprogramlar incelenecektir. Altprogramlar sayesinde bir programda

Detaylı

if (ad == "Sabri") Console.WriteLine("Merhaba Sabri. Ne zamandır gözükmüyodun...");

if (ad == Sabri) Console.WriteLine(Merhaba Sabri. Ne zamandır gözükmüyodun...); Koşul İfadeleri ve Akış Kontrolü Koşul ifadeleri ve akış kontrolleri programlama dillerinde her zaman en önemli yeri tutmaktadır. Yazdığımız uygulamanın hangi koşulda nasıl davranacağını belirterek bir

Detaylı

Göstericiler (Pointers)

Göstericiler (Pointers) C PROGRAMLAMA Göstericiler (Pointers) C programlama dilinin en güçlü özelliklerinden biridir. Göstericiler, işaretçiler yada pointer adı da verilmektedir. Gösterici (pointer); içerisinde bellek adresi

Detaylı

Hafta 13 Fonksiyonlar

Hafta 13 Fonksiyonlar BLM111 Programlama Dilleri I Hafta 13 Fonksiyonlar Yrd. Doç. Dr. Caner ÖZCAN Fonksiyonlar Fonksiyonlar C de modüller Programlar kullanıcı tanımlı fonksiyonları ve kütüphane fonksiyonlarını birlikte kullanırlar.

Detaylı

Algoritma Geliştirme ve Veri Yapıları 9 Ağaç Veri Modeli ve Uygulaması. Mustafa Kemal Üniversitesi

Algoritma Geliştirme ve Veri Yapıları 9 Ağaç Veri Modeli ve Uygulaması. Mustafa Kemal Üniversitesi Algoritma Geliştirme ve Veri Yapıları 9 Ağaç Veri Modeli ve Uygulaması Ağaç, verilerin birbirine sanki bir ağaç yapısı oluşturuyormuş gibi sanal olarak bağlanmasıyla elde edilen hiyararşik yapıya sahip

Detaylı

Değişkenler. Geçerli değişken isimleri : baslamazamani, ad_soyad, x5 Geçersiz değişken isimleri : 3x, while

Değişkenler. Geçerli değişken isimleri : baslamazamani, ad_soyad, x5 Geçersiz değişken isimleri : 3x, while Değişkenler Değişkenler bir bilginin bellekteki konumunu temsil eden sembolik isimlerdir. Bilgisayarda hemen hemen tüm işlemler bellekte yapılır. Program çalıştırıldığında değişken ve bu değişkenin türüne

Detaylı

Algoritma ve Akış Diyagramları

Algoritma ve Akış Diyagramları Algoritma ve Akış Diyagramları Bir problemin çözümüne ulaşabilmek için izlenecek ardışık mantık ve işlem dizisine ALGORİTMA, algoritmanın çizimsel gösterimine ise AKIŞ DİYAGRAMI adı verilir. 1 Akış diyagramları

Detaylı

Genel Programlama I

Genel Programlama I Genel Programlama I 30.09.2010 1 Genel Programlama I Ders İçeriği Programlamaya giriş ve algoritma kavramları Basit ve karmaşık veri tipleri Program kontrol komutları (Döngü ve şart yapıları) Diziler ve

Detaylı