Alıntı (zekeriyadurmus:1366915978):
> Bu ne zamandır aklımda var, fonksiyon çağırma işlemlerinde düşünüyordum bunu. Hızlı ama özelliksiz ve yavaş ama gelişmiş çağırma diye :) Sizin kafanızdaki fikir tam olarak nasıl hocam açabilir misiniz?
Şöyle düşünüyorum:
Bizim elektronikte, PIC programlarken, başlangıçta bazı compiler parametreleri vardır...
Hemen ilk bulduğum bir örneği yapıştırayım:
'
;Tutorial 1.6 - Nigel Goodwin 2002
LIST p=16F628 ;tell assembler what chip we are using
include "P16F628.inc" ;include the defaults for the chip
__config 0x3D18 ;sets the configuration settings (oscillator type etc.)
cblock 0x20 ;start of general purpose registers
count1 ;used in delay routine
counta ;used in delay routine
countb ;used in delay routine
endc
LEDPORT Equ PORTB ;set constant LEDPORT = 'PORTB'
LEDTRIS Equ TRISB ;set constant for TRIS register
org 0x0000 ;org sets the origin, 0x0000 for the 16F628,
;this is where the program starts running
'
Yukarıda tek PIC assembly komutu var o da org, diğerleri derleyicinin HEX kodu oluştururken kullandığı kolaylıklar. Ayrıca include (bu "inkulud" olarak telafuz ediliyor değil mi?) bizim C'deki gibi D'deki import karşılığı. Ama o bir kütüphane değil ve içinde assembly komutlarından çok equ'da olduğu tanımlamalar var. Örneğin Carry bayrağı için C harfi 0'a eşitlenmiş, Zerro bayrağı için ise Z harfi 2'ye eşitlenmiş. Hepsi bu gayet net ve açık, gerçi her şey bir büyü de neyse...:)
Şimdi... ( yabancılar so veya now diyor değil mi...:) )
Bir de yukarıda __config isminde özel bir değişken var. Bu da aslında bayrakları barındıran bir enum diyebiliriz. İşte tıpkı bu değer gibi ilk satırda bunu (interpret/configuration parameters) yorumlayıcıya bildirelim. Yorumlayıcı, henüz tüm kodu ayrıştırmadan çok çok basit bir şekilde parametreler ışığında 'mode' değiştirsin. Bu modlar:
- Speed Mode
- Classic Mode
- Stretch Mode
Son sözcük "stretch"den emin değilim. Yani demek istediğim, ufak tefek yazım hatalarında bile zart zurt hata veren bir durumdan bahsediyorum. Böylece yüksek doğrulukta ama biraz daha yavaş (çünkü hatalar derinlemesine denetlenecek) yorumlama elde edilir.
Farz edelim noktalama işaretlerinin fazla olmayacağı ve olası kullanıcı hatalarının önemsenmedi bir web sayfası düşünelim. Amaç hızlı bir şekilde sunum yapmak. Örneğin bir çizelge HTML kodlar ile defalarca tekrar içerdiği için yazılması zordur. Sayfanın tamamı statik HTML kodlar ile bezenmiştir ama hızlı bir şekilde bir foreach() döngüsü ile tekrar ifadelerini ekranda görüp tasarımına devam etmek istiyordur. Karşımıza "Speed Mode" çıkacak ve bunu kodun başlangıcında yorumlayıcıya bildireceğiz.
Varsayılan (default mode) ise klasik, yani C'den alıştığımız şekilde olabilir. İşte bu durumda yorumlayıcı eskisi gibi çalışmasına devam eder. Eğer mode değiştirme yönergesi ile karşılaşırsa bu sefer farklı bir sınıfı (parser'ı) çağırır ve her şey yeni düzene göre ayrıştırılır.
Özetle elimizde birden fazla parser sınıfı olması gerekiyor sanırım. Ayrıca henüz parser işlemine başlamadan evvel HTML kodu filitre eden bir regular expression ile en baştaki configuration bit'leri (mode flag) alırız pat diye. Sonrası bir switch case veya if()'e bakıyor zaten.
Biraz uzun ve geç cevap oldu ama n'olur kusura bakma; ancak...
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]