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…

  • No Related Post

2 Responses to “coco/r scanner specification”

  1. güzel bilgiler tşk

  2. 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

Leave a Reply

(required)

(required)


four × = 28

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">

© 2012 Tufan Suffusion theme by Sayontan Sinha