Derleyiciler

Pompalama Önsavı (Pumping Lemma)

Yazan : Şadi Evren ŞEKER Bilgisayar bilimlerinde dil tasarımı (language design, compiler design) konusunda önemli araçlardan birisidir. Bu önsava (lemma) göre şayet bir dil, bir herhangi bir gruba ( içerik bağımsız dil (context free language) veya düzenli ifadeler (Regular expression) yada farklı bir dil grubu ) dahil olarak kabul ediliyorsa, bu dil ne kadar pompalanırsa [...]

İçerikten Bağımsız Gramer (context free grammer, CFG)

Yazan : Şadi Evren ŞEKER Bilgisayar bilimlerinde, dil tasarımı sırasında kullanılan bir gramer tipidir. Basitçe bir dilin kurallarını (dilbilgisini, grammer) tanımlamak için kullanılır. Örneğin: S -> a Yukarıdaki dil tanımında bir büyük harfle gösterilen (S) bir de küçük harfle gösterilen (a) sembolleri bulunmaktadır. Bu satır, S devamlısının(nonterminal) a sonuncusuna(terminal) dönüştüğünü göstermektedir. Kısaca dildeki kuralları ifade [...]

İçerikten bağımsız dil (Context Free Language, CFL)

Yazan : Şadi Evren ŞEKER Bilgisayar bilimlerinde bir dilin tasarımı sırasında, içerik bağımsız bir gramer ile oluşturulması durumudur. Basitçe bir aşağı sürüklemeli otomat (push down automata) tarafından kabul edilen dil çeşididir. Bazı kaynaklarda bağlamdan bağımsız dil olarak da geçmektedir. Örneğin çok meşhur L= {anbn , n>0} dilini ele alalım. Bu dil örneğinin bu kadar meşhur [...]

EBNF (Uzatılmış BNF, Extended Backus Normal Form)

Yazan : Şadi Evren ŞEKER Bilgisayar bilimlerinde dil tasarımı konusunda kullanılan backus normal şeklinin (backus normal form) özel bir halidir. Basitçe standart BNF’te yazılan kuralların birleştirilerek daha sade yazılmasını hedefler. Bu durumu aşağıdaki örnek üzerinden görebiliriz: Örneğin BNF olarak yazılan dilimize göre: <EGER> ::= if( <KOSUL>) | if( <KOSUL>) else şeklinde bir satırımız bulunsun. Bu [...]

SableCC

Yazan : Şadi Evren ŞEKER SableCC 1998 yılında Étienne Gagnon tarafından bir yüksek lisans tezi olarak hazırlanmış ve dil geliştirmekte kullanılan, JAVA üzerinde çalışan, nesne yönelimli bir geliştirme ortamıdır. Temel olarak SableCC üzerinde bir dil geliştirmek için aşağıdaki adımların takip edilmesi gerekir: Dilde bulunacak olan kelimeler (lexicons) için bir kelime tanımı (lexical definition) yapılmalıdır. Tanım [...]

Backus Normal Form (BNF)

Yazan : Şadi Evren ŞEKER Bilgisayar bilimlerilnde genellikle bir dil tanımlamada ve bu dilin gramerini (Dil bilgisini) belirlemekte kullanılan gösterim biçimidir. Basitçe dil bir dil tanımında başlayarak Terminal (sonuncu) ve Non-Terminal (Devamlı) terimler kullanarak tanılmanmaktadır. Örneğin aşağıda basit bir örneği verilmiştir: <dil> ::= <harf>|<imla> <harf> ::= a|b|…|z <imla> ::= .| |,|? Yukarıda bir dil tanımı [...]

Tek Geçişli Çevirici (One Pass Assembler)

Yazan : Şadi Evren ŞEKER Tek geçişli bir çeviricinin (assembler) karşılaştığı en büyük problem çeviricinin kaynak koddaki (Assembly dilindeki koddaki)  değişken ve etiketlerin kodun ilerleyen kısımlarında tanımlanma ihtimalidir. Bu durumda kodun geri dönerek daha sonradan tanımlanan bilgilerin önceki adreslere yazılması mümkün olmaz. Tek geçişli çeviricilerde bu problemi çözmek için iki farklı yöntem kulllanılabilir: 1. İleride [...]

Çevirici (Assembler)

Yazan : Şadi Evren ŞEKER Bilgisayar bilimlerinde iki farklı kavram için assembler kelimesi kullanılmaktadır. Birincisi Assembly dili adı verilen ve makine diline (machine language) çok yakın düşük seviyeli (low level language) için kullanılan ve nesne kodunu (object code) makine koduna (machine code) çeviren dildir. İkincisi ise birleştirmek, monte etmek anlamında örneğin nesne yönelimli dillerde nesnelerin [...]

NFA’den DFA’e çevirim (Converting NFA to DFA)

Yazan : Şadi Evren ŞEKER Bu yazıda belirsiz sonlu otomattan(NFA) Belirli sonlu otomata (gerekirci sonlu otomat, nedensel sonlu otomat, deterministic finite automata) dönüştürmenin nasıl yapıldığı anlatılmaktadır. Basitçe bir iki adımlık işlemler izlenerek bu dönüşüm gerçekleştirilebilir: Öncelikle gerekircilik (determinism) açısından birbiri ile özdeş olan kümler çıkarılmalıdır (subset construction) Bu kümelerin diğer kümler ile olan ilişkisi çıkarılmalıdır. [...]

Şadi Evren ŞEKER tarafından, 11/11/2008 tarihinde yazıldı. | Automata (otomatlar, özdevinirler), Derleyiciler | 6 yorum var

Belirsiz Sonlu Otomat (Nondeterministic Finite Automat, NFA)

Yazan : Şadi Evren ŞEKER DFA (deterministic finite automat) belirli sonlu otomatların (özdevinirlerin) tersine her durumdan gidişin karışık olduğu ve her durum için bir sonraki kelimede nereye gidileceğinin belirli olmadığı otomatlardır. Basitçe DFA kurallarına uymayan bütün otomatlar NFA olarak adlandırılabilir. Aşağıda bir örnek üzerinde durumu incleyelim: yukarıdaki örnekte belirsiz durumlar bulunmaktadır. Örneğin b durumunda iken [...]

Belirli Sonlu Otomat (Deterministic Finite Automat, DFA)

Yazan : Şadi Evren ŞEKER Sonlu otomatların özel bir halidir. Bu özel hal aşağıdaki 3 durumu içermelidir: Her durumdan (State) gidilecek koşulun tek bir durum göstermesi. Yani bir durumda başka duruma geçerken bir kelime ile sadece bir duruma gidilebilmesi Tek bitiş durumunun bulunması (final state) Lambda (veya epsilon) kelimesinin durumlar arası geçişte yer almaması Örneğin [...]

Dinamik Bağlantı Kütüphaneleri (Dynamic Link Library (.dll))

Yazan : Şadi Evren ŞEKER Microsoft tarafından windows işletim sistemi üzerinde kullanıma açılan ve çalışma sırasında bağlanmaya izin verilen kütüphane yaklaşımıdır. Basitçe Linux ortamlarındaki .o (object file (nesne dosyası)) benzetilebilir. Bu dosyaların amacı birden fazla program tarafından kullanılan kütüphaneleri içermeleri ve her programın gerekli oldukça ilgili kütüphaneden dosyayı okumasıdır. Windows öncesi microsoft işletim sisteminde (windows [...]

Şadi Evren ŞEKER tarafından, 07/11/2008 tarihinde yazıldı. | Derleyiciler, işletim sistemleri | 5 yorum var

XML (extensible markup language , genişletilebilir işaretleme dili)

yazan: Şadi Evren ŞEKER XML dilinin çıkış amacı makinelerin birbiri ile konuşurken kategorize olmuş bir dil (veya prtokol) üzerinden konuşmalarını sağlamaktır. Aslında XML’in çıktığı yıllara bakıldığında verilerin çok çeşitli şekillerde bir standarda uymaksızın saklandığını ve işlendiğini görmek mümkündür. Gelişen İnternet teknolojisinin de etkisiyle birden fazla bilgisayarın (veya programın) birbiri ile bir standart üzerinde anlaşarak konuşmaları [...]

Yorumlayıcı (Interpreter)

Yazan: Şadi Evren ŞEKER Bilgisayar dünyasında yorumlayıcı terimi bir programı veya bir komutu çalıştırmaya yarayan programlar için kullanılır. Genellikle derleyiciler ile karışan ve çoğu zaman aynı görevi icra eden yorumlayıcılar da derleyiciler gibi kodu bir dilden başka bir dile çevirme işlemini yerine getirirler. Basitçe görevleri ve tipleri aşağıdaki şekilde listelenebilir: 1. Kaynak kodu çalıştırmak 2. [...]

Şadi Evren ŞEKER tarafından, 04/01/2008 tarihinde yazıldı. | Bilgisayar Kavramları, Derleyiciler, JAVA, Programlama Dilleri | A yorum var

Bağlayıcı (linker)

yazan: Şadi Evren ŞEKER Bir derleyici tarafından üretilmiş olan kodları bağlayarak işletim sisteminin çalıştırabileceği tek bir kod üreten programdır. Günümüzde hızla gelişen programlama ihtiyaçları sonucunda programlamada modüler yaklaşıma geçilmiştir. Buna göre büyük bir yazılım küçük alt parçalara bölünmekte ve her parça ayrı ayrı işlenerek büyük program elde edilmektedir. Yapısal programlamanın da çıkış sebeplerinden birisi olan [...]

Şadi Evren ŞEKER tarafından, 03/01/2008 tarihinde yazıldı. | Bilgisayar Kavramları, C/C++, Derleyiciler, işletim sistemleri, Programlama Dilleri | A yorum var

Derleyici (compiler)

Yazan: Şadi Evren ŞEKER Basitçe bir dilde yazılmış olan kodu (kaynak kodu yada source code) istenilen başka bir kod haline dönüştüren programdır. Genelde üretilen bu kod ortama göre çalıştırılabilir kod (executable code) olarak üretilmektedir. Ancak bir derleyicinin daha doğru tanımı bir dildeki kodu başka dile çeviren program olarak yapılabilir. Örneğin C dilinde yazılan bir programı [...]

alt program (subprogram, subroutine)

yazan: Şadi Evren ŞEKER bir programın herhangi bir alt parçasına verilen isimdir. Daha resmî tanımı için ilave olarak bu alt parçanın belirli bir amaca yönelik olması gerektiği söylenebilir. Yani programın herhangi bir alt parçası olmasının yanında bir amaç için bölünmüş parça’ya alt program diyebiliriz. Basitçe dilde bulunan fonksiyon (function), prosedür (procedure) , metod(method) veya herhangi [...]

fonksiyon göstericileri (function pointer)

yazan: Şadi Evren ŞEKER fonksiyon göstericilerinin amacı, programlama dilinde bulunan fonksiyonları gösteren birer referans bilgisi tutmaktır. Bu sayede gösterilmekte olan fonksiyon için hafızada ayrılmış olan yere erişmek ve dolayısıyla örneğin fonksiyonun yerel değişkenlerine ulaşmak mümkündür. Aşağıda C dilinde yazılmış bir fonksiyon göstericisi kullanan kod örneği verilmiştir: #include #include void func(int); main(){ void (*fp)(int); fp = [...]

otomat yönelimli programlama (automata based programming)

yazan : Şadi Evren ŞEKER otomat yönelimli programlama yaklaşımı, kaynağını otomatlar (automata)’dan alır ve sonlu durum makinaları (finite state machine, FSM) ile tasarlanan bir makinanın kodlanmasını hedefler. Basitçe C dilindeki switch komutlarının dallanmasına benzer bir şekilde her durumdan bir sonraki duruma geçiş yapan bu programlama yaklaşımında amaç durumlar arası geçişin tasarıma uygun olarak kolay bir [...]

üst programlama yaklaşımı (metaprogramming)

yazan: Şadi Evren ŞEKER Üst programlama, mevcut programlama yaklaşımlarının üzerinde yeni bir yaklaşım geliştirerek programlama yapan programlama yapma anlamına gelir. Yani üst programlama ile bir program geliştirilirken, alt programlama yöntemleri harmanlanır ve kod üretilir. Bu yaklaşımın ilginç kullanımlarından birisi de kendi kendini programlayan programların üretilmesidir. Yani üretilen kod, başka bir programa ait olmayıp bizzat üreticinin [...]

Şadi Evren ŞEKER tarafından, tarihinde yazıldı. | bilgisayar felsefesi, Bilgisayar Kavramları, Derleyiciler, Programlama Dilleri | A yorum var

fonksiyonel programlama (functional programming)

yazan : Şadi Evren ŞEKER Programlama yaklaşımlarından birisi olan fonksiyonel programlama günümüz dillerinin neredeyse tamamında kullanılmaktadır. Bu yaklaşımda matematik fonksiyonlarında olduğuna benzer bir şekilde alt programlar tanımlanmakta ve bu alt programların değişik argümanlar ile çalışması sağlanmaktadır. Bu yaklaşım basitçe: Kod tekrarını engellemekte ve aynı kodun farklı şartlar için tekrar tekrar çalışmasını sağlamaktadır Kodun okunaibilirliğini arttırmakta [...]

yapısal programlama (structured programming)

yazan: Şadi Evren ŞEKER yapısal programlama 1900lü yılların ortalarında programlama taleplerinin artması ile gelişen bir programlama felsefesidir. Buna göre programların analizi, tasarımları, kodlaması ve testleri arasındaki mantık uyumunu sağlamak amacıyla bir standarda gidilmiş ve aşağıdaki yapı çıkmıştır. Yapısal programlama amaç problemi alt parçalara bölerek bu parçaların çözümlerinin birleştirilmesidir. Bu yönüyle parçala fethet (Divide and conquere) [...]

kapsülleme (encapsulation)

yazan: Şadi Evren ŞEKER genel olarak bir bilginin soyut bir yapı içerisine konulmasına verilen isimdir. En çok ağ teknolojilerinde ve nesne yönelimli programlama dünyasında kullanılır. Nesne Yönelimli Programlama için anlamı bir sınıfın (class) bilgilerinin dışarıya kapalı olması ve bu sınıfın her türlü veri iletişiminin kontrol altındaki metodlar ile yapılmasıdır. Ağ teknolojileri için anlamı, katmanlı mimaride [...]

Şadi Evren ŞEKER tarafından, 17/12/2007 tarihinde yazıldı. | Bilgisayar Kavramları, C/C++, Derleyiciler, Nesne Yönelimli Programlama, Network(Ağ), Programlama Dilleri, veri yapıları | A yorum var

bit (ikil)

yazan: Şadi Evren ŞEKER Bilgisayar dünyasında ikili tabandaki (binary) tek haneli bir sayıyı ifade eder. Yani bir bit değeri 1 veya 0 olabilir. Bu aslında elektronik sinyali olarak yüksek (1) veya düşük (0) gerilimde akım demektir. bir bit, 1 veya 0 değeri alabildiğine göre her bit değerinin 2 farklı değer alması mümkündür. Bu durumda örneğin [...]

İşlem (Process)

Yazan: Şadi Evren ŞEKER Bir işletim sistemi üzerinde herhangi bir dil ile kodlanmış ve bir compiler (derleyici) ile derlenmiş ve daha sonra hafızaya yüklenerek işlemcide çalıştırılan programlara verilen isimdir. Genel anlamda her program bir process olarak düşünülebilir, ancak bir programın birden fazla processi olabileceği gibi her process, yeni başka processlerde üretebilir (fork) . İşletim sisteminin [...]