Şimdiye kadar Lexer ve Parser’ımızı tamamladık ve sıra veri türlerini tanımlamaya geldi. Parserımız int, string ve boolean türlerini algılayabilecek hale geldi ve şimdi bunları nesne haline getireceğiz.
Önce nesnelerimizi türetmek için işlevlerimizi içeren bir sınıf oluşturuyoruz.
Burada toplama, çıkartma, çarpma, bölme ve çağırma ve toString işlevlerini hata mesajlarını içerecek şekilde tanımladık. Daha sonra ise veri türlerimizi bu sınıftan türetip üzerinde override ile tekrardan yazacağız. İşlemlerimizi RObject üzerinden yapacağımız için override edilen fonksiyona erişim sağlanacak ve hepsi aynı türden türetildiği için farklı sınıf türlerini daha rahat bir şekilde saklayabileceğiz.
Şimdi ilk türümüz olan boolean‘ı tanımlayalım. Boolean sadece bir bool bilgisinden oluştuğu için ve üzerinde hiçbir işlem yapılmadığı için sadece toString üzerine override yapıyoruz ve this fonksiyonu ile bool veriyi alıyoruz.
Şimdi sıra string nesnesinde. Bu sınıf için farklı olarak opAdd tanımladık bu sayede 2 stringi toplayıp yeni bir sınıf oluşturacağız.
Sayı nesnemiz içinde ise 4 matematiksel işlemi tanımladık
Ve son olarak print gibi çağırabileceğimiz fonksiyonları içeren fonksiyon sınıfımız. Buradada farklı olarak opCall tanımladık opCall içerisindede bir dizi içerisinde parametreleri alıp ilgili işleve gönderiyoruz.
Artık temel türlerimiz hazır. Şimdi temel türlerle ilgili birkaç test yapabiliriz.
Bu kodları D üzerinde çalıştırdığınızda aşağıdaki çıktıyı verecektir.
Talha Zekeriya Durmuş
18
true
Şimdi sıra Intermediate Language tasarımını yapmaya geldi. Bir sonraki yazıda bunun üzerinde duracağız.
Not: Burada oluşturulan sınıf nesneleri D dilinin çöp toplayıcısı tarafından otomatik olarak algılanıp süpürülmektedir. Bu yüzden hafıza şişme sorunları ile karşılaşmazsınız.
Written by
Blog Logo
Talha Zekeriya Durmuş
Published
Supported by
Image
Talha Zekeriya Durmuş
Bir bilgisayar sevdalısı, Ankara Üniversiteli ve genç bir hayalperest.