Bilgisayar yazdığımız kodu nasıl anlar ?

Sosyal medyada paylaşın

Yazdığımız kodu bilgisayarın anlayabilip çalıştırması için bir takım işlemler gerçekleşiyor. Burada derleyici büyük rol oynuyor. Derleyici bir programlama dilinde yazılmış programa eş değer makine dilinde yeni bir program oluşturur. Derleme sürecinin başlangıcında derleyiciye verilen yüksek seviyeli programlama dilinin deyimlerini içeren programa kaynak(source) program, derleme sürecinin sonucunda oluşan makine dilindeki programa ise amaç(object) program denir. Derleyicinin çalışması için geçen zamana derleme(compile) zamanı, amaç programların çalışması sırasında geçen zamana ise calışma(runtime) zamanı denir.

Bir programın makine koduna dönüştürülmesi sırasında derleyici 2 aşamadan oluşur. Bunlar Front-End ve Back-End’dir.

Front-End:

Metinsel(Lexical) Analiz:

Derleyicinin ön ucunda yer alan lexical analyzer kaynak programı bir dizi tokene çevirir. Koddaki matematiksel ifade, sembol veya anahtar kelimeler birer token örneğidir. Token belirten her karakter lexeme olarak adlandırılır. Lexical analiz sonrası her tanımlayıcı için bir eleman içeren tablo oluşturulur. Son olarak lexical analizin çıktısı olan tokenler bir sonraki aşama olan sözdizimsel (sentaks) analiz bileşenlerine aktarılır.

Sözdizimsel(Syntax) Çözümleme:

Bir önceki aşamada oluşturulan token dizisini ve dilin gramerini kullanarak ayrıştırma ağacı oluşturmayı amaçlar. Bu aşamada programın sözdizim olarak doğru olup olmadığının kontrolü yapılır. Yani bir deyimi yanlış yazdıysanız bu aşama da hata bulunur ve size bir geri dönüş yapılır. Bu geri dönüş hatanın hangi satırda olduğunu ve belki nasıl çözüleceğini sizlere iletir.


Anlam(Semantic) Çözümleme:

Amacı çnceki aşamada oluşturulan ayrıştırma ağacını kullanarak soyut bir programlama dili oluşturmaktır.


Back-End

Derleyicinin arka ucu soyut dilde ifade edilen kodu alır ve belirli bilgisayar için makine kodunu oluşturur. Derleyicinin ön ucu programlama diline, arka ucu ise bilgisayara bağlıdır. Makine kodu oluşturulurken soyut programdan aldığı kodlara büyük ölçüde optimasyon uygular. Bu optimizasyonlara örnek olarak Ölü kod eliminasyonu, döngü değişmezleri, döngü ayırması, ortak blok, sabit ifadelerin yaydırılması, ortak alt ifadelerin elimine edilmesi gibi örnekler verebilirim. Aşağıda bu optimizasyonlar ile örnek kodlar bulunuyor ordan inceleyebilirsiniz. Son olarak bizim yazdığımız üst düzey koddan eser kalmaz ve görseldeki gibi makine koduna dönüşür.

Derleyicinin arka ucunda yapılan optimizasyonlara örnekler: