KANO - Gerçek Zamanlı Kağıt Notu Okuyucusu

Formatlayıcılar ve Lir Dili

KANO format düzenleme ekranı

Programın farklı formlara ve veri formatlarına uyarlanabilmesi için, okuduğu işaretleri ne şekilde yorumlayacağının kullanıcı tarafından belirlenebilmesi sağlanmıştır. Yorumlama biçimi, 'Yapılandırma Düzenleyicisi' penceresindeki 'Format' sekmesinde yer alan numara ve not formatlayıcıları yardımıyla belirlenir. Programın doğru çalışması için formatlayıcıların, aşağıda anlatılan kurallara uyularak Lir dili ile hazırlanması gerekir.


Lir, KANO'nun okuduğu işaretlerin ne şekilde yorumlanacağının kendisine anlatılabilmesi için tasarlanmış minik bir dilidir. Bu dil, aşağıda C++ ve Visual Basic karşılığı verilen basit bir kaç fonksiyonun ve temel işleçlerin işlevlerini taklit ederek çalışır.


Lir ifadeleri, köşeli parantezler ( [ ] ) içerisine yazılmalıdır. Köşeli parantezler dışına yazılan ifadeler sabit kabul edilir ve yorumlanmaz. Lir ifadelerindeki metinler, tek tırnaklar arasında bulunmalıdır (Örnek: 'metin').


KANO, her bir gruba konan işaretlerin sıralarını (kendi gruplarında kaçıcı sırada bulunduklarını) belirleyerek g0, g1, g2, ... şeklinde isimlendirdiği değişkenlere atar. Sıra numaraları sıfırdan başlar. Sıra numaralarından anlamlı bir öğrenci numarası veya notu elde etmek için bu numaraların üzerinde işlemler yapan Lir ifadeleri yazılmalıdır. Yukarıda anlatılan kurallara uyularak bir formatlayıcının nasıl yazılması gerektiği, aşağıda, bir örnek ile açıklanmıştır.

İfadeler ve İşleçlerAnlam
g0, g1, g2, ...Gruplarda okunan işaretin sırasını temsil eder.
+, -, *, /, %Aritmetik işleçler
C++: +, -, *, /, %
VB: +, -, *, /, Mod
ve, veya, değil()Mantıksal işleçler
C++: &&, ||, !()
VB: And, Or, Not()
eğer(koşul, ifade1, ifade2)Test edilen koşul doğruysa ifade1, yanlışsa ifade2 döndürülür.
C++: koşul?ifade1:ifade2
VB: iif(koşul,ifade1,ifade2)
<, >, <=, >=, <>, =Karşılaştırma işleçleri
C++: <, >, <=, >=, !=, ==
VB: <, >, <=, >=, <>, =
parça('metin',n,k)Verilen metinden bir parça döndürür. Parça çekilirken metinde n konumundan başlanır ve k tane karakter dödürülür.
C++: substr()
VB: Mid()
uzunluk('metin')Verilen metindeki karakter sayısını dödürür.
C++: length()
VB: Len()

Örnek

KANO form örneği

yy15o3nnn şeklinde bir öğrenci numarası formatı olsun. yy; öğrencinin giriş yılını, o; 1. örgünler için 0, ikinci örgünler için 2 değerinde olan bir sayıyı, nnn; öğrencinin sırasını temsil etsin (örnek: 081503001). Görüldüğü gibi numaranın elde edilebilmesi için giriş yılının, örgünün ve numaranın son 3 hanesinin bilinmesi yeterlidir. Numara ve notun girilmesi için yandaki gibi bir form tasarlanmış olsun. Bu durumda formun şablonu programa şu şekilde tanıtılmalıdır:

{O O}{O O O O O O O O}

{O O O O O O O O O O}
{O O O O O O O O O O}
{O O O O O O O O O O}

{O O O O O O O O O O}
{O O O O O O O O O O}

Program, küme parantezleri arasına yazılmış 'O' (sıfır değil, büyük o harfi) harflerinin her birini bir işaret alanı olarak değerlendirir. Her bir küme parantezi açma-kapama ikilisi de bir grubu temsil eder. Formda ve şablonda görülebileceği gibi, 7 grup bulunmakta. Demek ki yazacağımız formatlayıcıda kullanabiliceğimiz 7 değişkenimiz var (g0-g6). Şimdi, g0, g1, ..., g6 değişkenlerinin yerine yazılacak numaraların, grupta işaretlenen alanın (şablondaki O harfinin) sıfırdan başlayan sırası olduğunu da hatırlayarak, numaranın oluşmasını sağlayacak Lir ifadelerini yazalım ve böylece 'Öğrenci numarası formatlayıcısı'nı tanımlayalım:

[eğer(g1<2,'0','')+(g1+8)]15[eğer(g0=0,0,2)]3g2g3g4

İfadeleri daha rahat inceleyebilmek için parçalara ayıralım:

  1                   2         3   4                 5  6   7   8
  -----------------   ------    --  ---------------   -  --  --  --
[ eğer(g1<2,'0','') + (g1+8) ]  15  [eğer(g0=0,0,2)]  3  g2  g3  g4

1. parça: g1 grubunda, yani giriş yılının istendiği kısımda işaretlenen alanın sırası 2'den küçükse (8 veya 9 işaretlenirse) sıfır ('0') döndür.

2. parça: g1'e 8 ekle. Böylece örneğin g1 grubunda 8 işaretliyken g1 değeri 0 olacağı için g1+8=8 olur.

3. ve 5. parçalar: Bu değerler [ ] dışında yer aldığı için yorumlanmayıp aynen bırakılır.

4. parça: g0 grubunda, yani örgünün istendiği kısımda 1 işaretliyse (bu durumda g0, sıfıra eşittir) 0, 2 işaretliyse, 2 döndür. Böylece numaranın 5. rakamı, örgüne göre 0 veya 2 olur.

6., 7. ve 8. parçalar: g2, g3 ve g4 gruplarında işaretlenen alanlardaki sayılar, bu alanların sıralarına eşit olduğu için 6., 7. ve 8. parçaların yorumlanmasına gerek yoktur. Direkt olarak yazılabilirler. Örneğin g4'te 0 işaretlendiğinde, 0'ın sırası 0 olduğu için g4 direkt 0 değerine sahip olacaktır.

Anahtar Kelimeler: kano lir, kanoyu özelleştirme, kano yapılandırma, lir dili
© 2017 Hüseyin Atasoy