Coco/R aracının Temelinde Scanner işlemi yatıyor. Scanner Bufferdaki veriyi byte byte gezerek anlamlı parcacıklar (token) yakalamaya çalışır.Scanneri yonlendiren bu işaretçiler için yazılan herşeye Scanner Specifications denir.
Character Sets:
Scanner’i tokenlar içinde yönlendiren temel tanımlamalardır. Regular Expressiondaki “[ ]” prantezine benzetebiliriz.
“[A-Z]+” ifadesi için “ABCDEFGHIJKLMO” ayrılmaz bir bütündür scanner hiç durmadan bu terimler üzerinde gezip bunu tek parça olarak alır.
Örnek Set Tanımlama:
digit = “0123456789″.
hexDigit = digit + “ABCDEF”.
letter = ‘A’ .. ‘Z’.
noDigit = ANY – digit.
Örnekten anlaşılabileceği gibi token ve set tanımlamaları object oriented yapısını da destekliyor. digit + “ABCDEF” ile hex blocklarını tanımladık. noDigit kısmında kullandığımız COCO Sabiti “ANY” içine herşey girer. bunlardan digit blokunu cıkardıktan sonra geriye kalan karakterler de içinde rakam geçmeyen yapılar olmuş oluyor
Coco/R aracının grameri derledikten sonra oluşturduğu temel sınıflar :
- Buffer – UTF8Buffer
- Errors
- FatalError
- Parser
- Scanner
- Token
Buffer:
V Parse edilecek blockları tutan streamdir. Karakterler byte dizisi (byte[]) olarak tutulur ve Scanner sınıfı bu dizide gezerek Token (Dilin anlamlı en küçük parçası) yakalamaya çalışır. yakaladığı her tokenı Parser sınıfında biriktirir ve her yakalamadan sonra “OPERAND” adını verdikleri ana işlemciye gonderir.ve her Operand işleminde bir sonraki token ile yakalanan token beraber işlem görür. UTF8Buffer aracı sayesinde de unicode destekli parserlar yazabilmemize olanak sağlıyor.
Errors:
Collection tabanlı bu sınıf Scanner tarafından yakalanan syntax hatalarını ve bizim kontrollerimizle oluşan Semantik hataları biriktirir. Sytax hatalarını coco/r çok güzel yazabiliyor. mantıksal hataları da bizim kontrol etmemiz gerekiyor . Dilin yapısını (Gramer) yazıyoruz coco/r aracı dilin mantığını bilmiyor çünkü.
FatalError:
Errors sınıfından farklı olarak Exception türünden bir sınıftır. Bu hatalar Scanner ya da Parser sınıfının devam edemeyeceği durumlarda fırlatılır Errors collection içine birikmez.
Parser:
İlk okunduğunda parcalama işlemini yapan sınıf gibi gelse de değil. Scanner tarafından yakalanan Tokenları anlamlı blocklara dönüştüren sınıftır. Bu blockları da yorumlayan işlemler yine bu sınıf içinde yapılır.
Scanner:
Buffer üzerinde dolaşarak Token yakalamaya çalışan sınıftır. yakaladığı her token için biriktirme yapmadan parsera gönderir. Parser kuyruktaki Token’ları yorumlamak için Scanner’i bekler.
Token:
Uygulama kodlarını oluşturan anlamlı en küçük parcaya denir. birbirinden ayrılabilen her parça bir Token kabul edilirken, Token’ların bir araya gelmesiyle oluşan blocklara da Token denilebilir.
Token Tanımlama ile devam edecektir.. İyi çalışmalar…








güzel bilgiler tşk
You gave great points here. I did some research on the subject and have found nearly all people agree with your blog.
Sent via Blackberry