Evet, askerliktir şudur budur çok zaman oldu. Askerde excel dışında kendimi pek geliştiremedim, o dönemi bu kadar kısa bir özetle geçiştireyim 🙂
Ingenue nedir derseniz, tiyatro vb. de olan saf kız karakterlerine verilen isimmiş.
Aynı zamanda yeni (ve çok eski) projemin şu anki kod adı olarak seçtim, neden derseniz az önce Atoms For Peace – Ingenue dinlemekte idim ve projenin gelişme stili de oradaki dansa benzemekte.
Kendisi bir programlama dili olmakta. Dynamic typing bir dil ve şu anda bir interpreter üzerinden çalışmakta. Syntax olarak C ye baya bir benzer. “E neden yazıyorsun” derseniz çoğunlukla eğlence için. Ama dile yeni özelliklerde getirmek istiyorum.
Dediğim gibi, dil dynamic typing olmakta. Tüm değişkenler operatörlere göre tiplerini değiştirebiliyor. mesele a = b + c;
gibi bir kodda a nın tip i b ve c ye göre belirleniyor. Şu anlık 3 tip var, integer, float ve string. Ve bunların baskınlık sırasıda integer
Ne işe yarayacak derseniz emin değilim 🙂 ama farklı bir programlama stili olacak diye umuyorum.
Nasıl çalışmakta derseniz şu anda 2 aşamadan oluşuyor. Lexer/parser kısmı ve interpreter kısmı. Parsing aşamasında kaynak kodunu alıyorum ve token larına ayırıyorum, bu tokenlarda interpreter tarafından yorumlanıyor ve kod çalışıyor. Mesela
a = 5; b = 3.0; c = a + b; d = a++; if(a > 0) { d = a + b; } else d = 0;
gibi bir kod olsun. Parser bunu şöyle bir şeye çeviriyor.
program statement value assignment variable a value integer 5 /value /assignment /value /statement statement value assignment variable b value float 3.0 /value /assignment /value /statement statement value assignment variable c value variable a operator + variable b /value /assignment /value /statement statement value assignment variable d value variable_withpost variable a singleoperator ++ /variable_withpost /value /assignment /value /statement statement ifcond value variable a operator > integer 0 /value statement statement value assignment variable d value variable a operator + variable b /value /assignment /value /statement /statement else /else statement value assignment variable d value integer 0 /value /assignment /value /statement /ifcond /statement /program
Kodun parse edilmiş hali de interpreter tarafından input olarak alınıyor ve program oluşturuluyor. Interpreter burada biraz tokenların yerlerini ve tree yapısını kendisi için düzenliyor. Interpreter ın yukarıdaki input tan oluşturduğu program şu şekilde.
0 program 1 statement 2 value 3 assignment 4 variable a 5 value 6 integer 5 7 statement 8 value 9 assignment 10 variable b 11 value 12 float 3.000000 13 statement 14 value 15 assignment 16 variable c 17 value 18 variable a 19 variable b 20 operator + 21 statement 22 value 23 assignment 24 variable d 25 value 26 variable a 27 operator post++ 28 statement 29 ifcond 30 value 31 variable a 32 integer 0 33 operator > 34 statement 35 statement 36 value 37 assignment 38 variable d 39 value 40 variable a 41 variable b 42 operator + 43 statement 44 value 45 assignment 46 variable d 47 value 48 integer 0
Buradaki en bariz değişiklik matematik işlemlerinin postfix e çevrilmesi.
İleride daha ayrıntılı olarak anlatmayı planlıyorum, şimdilik github linkini atmakla bırakacağım.