Kendi Türkçe Programlama Dilimi Nasıl Yaptım?
Bu yazımda kendi geliştirdiğim ve aynı zamanda üniversite bitirme projem olan türkçe programlama dilim Sigun’u geliştirirken hangi aşamalardan geçtiğimi size anlatmak istiyorum.

Bu projeden ilk bahsedildiğinde olağandışı bir proje olması gerçekten beni oldukça heyecanlandırmıştı. Tüm proje süresince de motivasyonumu bu heyecanımdan aldım açıkçası.
Sıfırdan öğrenmeye başladığım bir alanda kendimi tabii ilk olarak kitaplara, akademik araştırmalara ve literatür taramalarına verdim. Elde edilen kapsamlı bilgilerden sonra teorik olarak nasıl ilerlemem gerektiği hakkında fikir sahibiydim. Bu süreçte Lexer & Parser isimli iki arkadaşla tanıştım. Kendilerini kısaca tanıtmak gerekirse; Lexer benim için input kodlarını tokenize ediyor, Parser ise kendisine has Abstract Syntax Tree’ler oluşturarak expressionlar ile benim belirlediğim dil kurallarını oluşturuyor. Bunların hepsi kod kısmı için gerekli bilgiler. Bizim için bu lexer ve parser’ları sunan birçok alternatif var, biz Java Parser CUP kullanmayı tercih ettik, çünkü bize yüksek oranda esneklik sağlıyordu.
Yoğun bir kodlama dönemine girmeden önce grammar kurallarını oluşturmamız gerekiyordu. Danışman hocalarım ve ekip arkadaşlarım ile bu alanda titiz bir çalışma gösterdik. Çünkü yapacağımız Türkçe programlama dilinin mevcut olan herhangi bir programlama dilinden sadece çeviri yapılarak oluşturulmasını istemiyorduk. Türkçenin akıcılığını ve doğallığını yansıtabilecek, bugüne kadar kendi kulvarında yapılan diğer çalışmalara kıyasla ortaya konulduğu zaman farkını gösterebilecek bir dil oluşturmamız gerekiyordu.
Bu vesile ile yaptığımız literatür araştırmalarında daha önce bunun denendiğini ancak 1–2 proje haricinde python’ın İngilizce’den Türkçe’ye kopyala yapıştır olarak çevrildiğini ve özgün olmadığını gördük. O 1–2 dilin eksikliği ise içerisinde sunduğu şeylerin fazla olmamasıydı. Bizim görevimiz tüm bu eksiklere sahip olmayan ve şu ana kadar denenen en iyi programlama dilini ortaya koymaktı.
Bir programlama dilinde olması gereken bir çok temel işlev ve expression’a sahip bir programlama dili tasarladık. İçerisinde OOP barındırmayan ancak fonksiyonlara sahip bir Türkçe programlama dilini ortaya koymuş olmaktan gurur duyuyorum. Gelin bu deneyime yakından bir göz atalım…
1 - Değerler
Java CUP Parser & Jflex Flexer kullanarak backend kodlarını Java ile yazabiliyorduk. Bize sağladığı en büyük kolaylık buydu Java CUP’ın. Kendisi yacc kadar duyulmamış bir parser olduğu için takıldığımız konularda araştırma yaparken bunun dezavantajını çok hissettiğimiz oldu. Ancak GitHub dünyayı güzel bir yer haline getirmeye devam ediyor ve daha önce CUP ile denemeler yapan bir kaç kişinin kodlarına göz attık. Temel olarak nasıl çalıştığını kafamızda oturttuktan sonra kodumuzu basit bir şekilde varolan kodların üzerine inşa etmeye karar verdik. Programlama dilimiz aynı Python gibi değişkenlerini dinamik olarak tanımlıyordu. Yani Java’daki gibi integer bir değer atamadan önce variable name’in önüne ‘int’ yazmamıza gerek yoktu. Dilin içerisinde boolean, int ve string değişkenlerinin olmasına karar verdik.

2 - Operatörler
Olmazsa olmaz bir parça olan operatörleri tabii ki de dilimize entegre ettik. Aslında bu noktada en çok kafa karışıklığını assign ile yaşadık diyebiliriz. Bir variable assign etmek bir operatör işi midir diye bir süre durup düşündüğümüzü hatırlıyorum. Her şeyden önce bir dil geliştirebilmek için hesaplama kuramı (Otomata teorisi) dersini almış olmanız gerekli yoksa kilit noktaları kaçırarak sıfırdan kendiniz icat etmeniz gerekir her şeyi. Klasik toplama, çıkarma, çarpma vs. gibi her şey mevcut kısacası. Zaten bunu yapmak zor değildi, bir dil yaratmaya çalışıp pes eden insanların yaptığı basic calculator sample’ları ile dolu github.

3 - Recursive
Burası benim Amerika’yı yeniden keşfettiğim yerdi. Daha önce hesaplama kuramı bilmediğim için burada bir şeyin sürekliliğini nasıl sağlarız diye bir süre kafa patlatmıştım. Cevabı aslında İngilizce halinde saklıymış = recursive. Burada bir şeyi recursive yapmak o döngünün içerisine istediğimiz kadar expression ve instruction eklemek ile alakalıydı en çok. Oluşturduğumuz recursive parser kodu bizim tüm kodumuzun en kilit noktası idi. Bu sayede dilimizin her yerinde sürekliliği sağlayabildik.

4 - Döngüler
Dilimizde 3 farklı döngüye yer verdik, siz bunları orjinal halinden şöyle bilirsiniz: For, For-Each, While. Benim bu noktalar ile en sevdiğim kısım şiir gibi bir syntax’a sahip olmaları. Python’daki range olayına benzer bir kullanımı var for statement’in. Artarken ve azalırken deyip değerin gidiş yönünü belirleyebiliyorsunuz.


5 -Listeler
Aslında Sigun’un en güçlü yanlarından biri de sahip olduğu listeler. Sadece dümdüz konuşurmuş gibi kod yazarak istediğiniz işlemleri rahatlıkla gerçekleştirebiliyorsunuz. Listelerimiz birden fazla veri türünü saklayabilir ve tıpkı python listesi gibi dinamiktir. Bu şekilde, her türün girebileceği, açılabileceği ve algoritmanın farklı varyasyonlarında kullanılabildiği sepete benzer bir liste oluşturmayı umduk. Sigun Programlama Dili’nde liste oluşturmak için “liste” anahtar kelimesi yazılmalı ve parantez içinde o listenin öğeleri eklenmelidir.




6- Koşullar
Her dildeki klasik If-Else ifadesindeki if, “Eğer” şeklinde temsil edilir. Bu kelime, Türkçe dil bilgisi kuralını ihlal etmediği ve gelişigüzel bu şekilde kullanıldığı için cümlenin başına yazılacaktır. Daha sonra gerekli koşulu söylüyoruz ve if ifadesinin gövdesini başlatmak için sonuna “ise” yazıyoruz. İlgili üstteki if ifadesine bir if ifadesi daha eklemek için “ya da” kullanımı gerekmektedir. Burada da “Eğer” den sonra yapılan işlemin aynısı kullanılacak olup, else ifadesi ile bitirilmesi gerekiyorsa “değilse” kullanılır.

7- Break & Continue
Biz bu arkadaşlara kır ve atla demeyi tercih ettik. Aslında her dildeki break & continue ile aynı işlevi görüyorlar; “kır” ifadesi döngü ifadelerini durdurmak için kullanılır. Döngü içindeki “kır” ifadesi, belirli bir koşul sağlandığında döngüyü tamamen sonlandırarak döngüden çıkar. Böylece döngünün geri kalanı atlanır ve program döngüden sonra devam eder. “kır’’ ifadesi, bir döngüyü hızlı bir şekilde sonlandırmak veya belirli bir koşulu karşıladığında döngüde arama yapmak için kullanışlıdır. Öte yandan “atla” ise döngüyü tamamen durdurmayıp sadece mevcut yinelemeyi atlar ve döngünün bir sonraki yenilemesine geçer.

8- Fonksiyonlar
Burası bizim belki de en uzağa gidebildiğimiz nokta şu anlık. Fonksiyon tanımlaması sırasında kullanılan genel yapı şu şekildedir: “… ile … işi”. Atadığınız herhangi bir expression ile fonksiyon yapısından faydalanabilirsiniz. Aşağıdaki örnek kodda “topla” fonksiyonu tanımlıdır ve a ve b argümanlarını toplayıp yazdırır. Sonra yazılan sayılar ve sayıları takip eden fonksiyon adı sayesinde “topla” fonksiyonunda parametrelerin yerine sayılar konulur ve ona göre bir sonuç elde edilir. Aşağıdaki örnek dışında Sigun programlama dilinde bir fonksiyonu tanımlamanın birden fazla yolu vardır. Ayrıca fonksiyon tanımlandıktan sonra çağrılırken “çağır” anahtar kelimesi kullanılarak fonksiyonun sonucunun çağrılabildiği ve döndürülebildiği aşağıdaki gibi bir yapı da bulunmaktadır. Örnekler şu şekilde;


9- Random ve Diğer Özellikler
Yukarıda saydıklarımın dışında Sigun random variable üretebilir, string ve integer değerleri okuyabilir ve boolean değerleri barındırabilir. “Doğru” ve “Yanlış” anahtar kelimeleri ile boolean değerler oluşturulabilir. Sigun’un sahip olduğu “rastgele” anahtar kelimesi ile random bir değer bir variable’a atanabilir ve listeler içerisinden random index’li bir variable seçilebilir. “kelimeyi oku” veya “sayıyı oku” anahtar kelimeleri ile Java’daki Scanner’ın sağladığı özelliklerden faydalanabilirsiniz.




Aslında Sigun saymış olduğumuz bu özellikleri birçok farklı kullanım sunarak kullanıcıya öğrenme kolaylığı sağlıyor. Neredeyse görmüş olduğunuz her özelliğin birden fazla kullanım yöntemi var ve tüm detaylı bilgileri GitHub Wiki sayfasında yer almakta. Bu yazı elinizde bir kahve varken Sigun’a sadece hızlı bir giriş yapmanız niyetiyle yazıldı.
Tüm bu süreç boyunca beni yalnız bırakmayan ve bir takım olmayı en içten duygularla yaşadığımız takım arkadaşlarıma ve proje supervisor’uma proje fikrini bize getirdiği için teşekkürü bir borç biliyorum.
Sigun’un Geleceği
Şu an hocalarımız ile hazırladığımız bir akademik makale var, bununla Sigun’u daha büyük yerlerde görmeyi hedefliyoruz. Aynı zamanda Sigun özellikle programlamaya yeni başlayan kişilerin ve çocukların gelişimi için hazırlandığı için uyguladığımız bir anket ile elde ettiğimiz sonuçları istatiksel verilere döküp Sigun’un ne kadar faydalı olacağı konusunda kesin ve somut sonuçlar görmeyi umuyoruz. Atılacak doğru adımlar ile Sigun daha büyük kitlelerin kullanımı için tanınabilir.
Yardımlara her zaman açığız!
Sigun open source bir programlama dilidir ve destekleriniz ile daha da büyüyebilir. Siz de katkıda bulunmak isterseniz veya projenin diğer özelliklerine & oluşturulma aşamasına tanık olmak isterseniz diye:
GitHub: https://github.com/berkinozturk/Turkish-Programming-Language
GitHub Wiki Page: https://github.com/berkinozturk/Turkish-Programming-Language/wiki
Her şeye hakim olmak istiyorum, daha fazla detay ile ilgileniyorum diyen birileri var ise 55 sayfalık proje raporunu iletmem için her zaman bana ulaşabilir, vakit ayırdığınız için teşekkürler!