İkinci Gün
Özet
Implementing Programming Languages'a başladım. 2 bölüm okudum, ve bir parser bulmak icab etti. (Diğerler bölümleri de bir gözden geçirdim. ) Sırasıyla Cygwin, flex, yacc kurdum. Ortalama 3-3.5 saat çalıştım.Başlarken
Hangi kitaptan okumaya başlayayım derken, hepsinin bir bölümlerine baktım. Hepsinin girişini okurken o kitabın hemen girişinde sihirli kelimelerin sıralandığı bir cümle gördüm.This book aims to make programming language implementation as easy as possible. It will guide you through all the phases of the design and implementation of a compiler or an interpreter. You can learn the material in one or two weeks and then build your own language as a matter of hours or daysImplementing Programming Languages (pg.7)
Kitap
Kitabın ilk bölümünü önce okudum. Sonra bir daha okuyarak notlarımı çıkarttım. Aslında tam emin değilim notlarımı not olarak ayrı mı koymalıyım, ya da bu blog postunun içine mi gömmeliyim diye.Bölüm bir de compilation phases (Derleme bölümleri) den bahsediyor. Ama daha genel bir giriş yapmış. İlk olarak programlama da herşeyin sıfır ve birlerden oluştuğunun altını çizmiş.
1- Sıfır ve birler geyiği
Bilgisayarlar 0 ve 1 lerle çalışır. 1 akım var, 0 akım yok olarak üzerine kurulduğu elektirik devresinden gelir. Bütün bilgiler sıfır ve birlerle ifade edilebilir.
- Tamsayılar ikilik sistemde şöyle ifade edilir.
0 = 0
1 = 1
2 = 10
3 = 11
4 = 100
- Karakterler ASCII koaçımında şöyle ifade edilir.
A = 65 = 1000001
B = 66 = 1000010
5 + 6 = 0001 0000 0000 0101 0001 0000 0000 0110 0110 0000Buradan sonra yavaş yavaş kafamda oturmaya başladı. Uzun bir karakter dizisini alıp onun sıfırlar birler haline getireceğim. Hertürlü veri ve komut ifade edebilek sıfırlar ve birler.
2- Üst seviye dil , Alt seviye dil
Üst seviye programlama dilleri insan diline daha yakın, alt seviyedeki programlama dilleri makine diline daha yakındır. Buda üst seviye bir dilin alt seviye bir dile göre daha anlaşılabilir olduğunu söylüyor.
3- Compilation and interpretation (Derleme ve Yorumlama)
Not: Derleme compilation'ı hiç karşılamıyor diye düşünüyorum. Çevirme daha uygun olabilirmiş gibi geliyor.Derleyici bir bir program kodunu alır, başka bir program koduna çevirir. Çoğunlukla da makine koduna çevirir.
"Yorumlayıcı program kodunu direk çalıştıran program. ", gibi bir şey demiş. Daha güzel bir tanım vardır elbet.
4- Compilation phases (Derlemenin bölümleri )
En önemli olduğunu düşündüğüm bölüm. Bu kısımları aslında genel kültür olarak biliyordum. Ama bir daha bakma iyi geldi.
57+6*result character string
| lexer
v
57 + 6 * result token string
| parser
v
(+ 57 (* 6 result)) syntax tree
| type checker
v
([i+] 57 ([i*] 6 [i result])) annotated syntax tree
| code generator
v
bipush 57 instruction list
bipush 6
iload 8
imul
iaddBunu çizseydim daha iyi olabilirdi. Ama yukarda kimin ne yaptığını gayet açık bir şekilde gösteriyor.
5- Gerisi
- Derleme esnasında oluşan hatalar; imla hataları, tip hataları, çözümleme hataları (lexer, parse, type errors)
- Derleme zamanı hataları, çalışma zamanı hatarlarından daha az sorun yaradır.
phase | theory |
---|---|
lexer | finite automata |
parser | context-free grammars |
type checker | type systems |
interpreter | operational semantics |
code generator | compilation schemes |
Olaylar
Kitabın ikinci bölümünde, BNFC adında bir parser (çözümleyici) dan bahsediyor ve bölüm ikiyi ona göre kurmuş. Neyse okuduktan programı indirip kurmaya gelince sıra biraz tökezledim. Programın Windows executable yoktu. Zaten sanırım Haskell de yazılmış bir program ve sanırım haskell de yorumlanan bir dil. (Bu kısımları çabucak geçelim.)Sonra kitabın devamını da bir gözden geçirdim. Tam okumadın da iyi bir taradım denebilir.
Herneyse, başka çözümleyiciler (parser) aradım. Bir çok program var ama Windows'a yüklenmeleri biraz sıkıntı. Cygwin, Windows için Unix tarzı bir çalışma ortamı. Sonra BNFC ile uğraşmadan flex ve yacc (sırasıyla, lexer ve parser) yükledim. İkisi için de bakacak halim pek kalmadı. Bir iki baktım ama biraz daha ayık uyanık hali vakti yerinde bir kafa istiyorlar.
Linkler
[BNFC][http://bnfc.digitalgrammars.com/][Cygwin][https://cygwin.com/]
TODO
Derleme bölümlerine bir diyagram pls.Phase-Theory turkish pls.
Yorumlar
Yorum Gönder