Alisher navoiy nomidagi samarqand davlat universiteti mexanika-matematika fakulteti


Download 1.68 Mb.
Pdf ko'rish
bet2/3
Sana30.11.2020
Hajmi1.68 Mb.
#156543
1   2   3
Bog'liq
c tili kompilyatorlari va ularning xususiyatlari


Kontekst menyu oynasi.

 

 

 



Komponentalar  palitrasini  asosiy  menyu  panelidan  olib  tashlash  mumkin.  Buning 

uchun  sichqonchaning  o’ng  tugmasini  bosish  va  hosil  boigan  menyu  (20.23-

rasm)dagi  Component  Palette  so‘zi  oldidagi  belgini  sichqoncha  tugmasini  ikkita 

bosib, olib tashlash kifoya qiladi. Komponentalar palitrasining o'rni Borland C + + 

Builder  6  interfeysida  qat’iy  tayinlanmagan.  Uni  o'zimiz  xohlagancha 

joylashtirishimiz mumkin. Buning uchun kursorni palitraning chap chekkasiga olib 

borib, sichqonchaning chap tugmasini bosib, qo‘yib yubormagan holda, yangi 

joyga joylashtirish mumkin. Agar palitra asosiy menyudan tashqariga chiqib ketsa, 

yangi  oyna  ochiladi.  Bunda  komponentalar  palitrasiga  qo‘shimcha  buyruqlar 

kiritish uchun sichqonchaning o‘ng tugmasi bosiladi. Bunda kontekst menyu paydo 

boladi  (20.24-rasm).  Bu  oynada  ixtiyoriy  sahifaga  Tabs  vositasida  tez  o’tish 

imkoniyati  mavjud  (20.25-rasm).  ShowHints  tushuntish  ma'lumotlari  beriladi. 



Hide palitrani bekitish, Help ma’lumotlarni olish, yordamni chaqirish, Properties 

xususiyatlarni  o‘rnatish  Bu  oynada  ixtiyoriy  sahifani  qaytadan  ko'rib  chiqish 

mumkin.  Rename  buyrugi  orqali  sahifani  qayta  nomlash  mumkin.  Add  buyrug’i 

orqali yangi sahifa qo‘shish mumkin.  Delete ixtiyoriy sahifani о chirish mumkin. 

Bu  sahifalarning  berilish  ketma-ketligini  o'zgartirish  imkoniga  egamiz.  Masalan, 

System  sahifasi  Standard  sahifasidan  keyin  berilgan  edi,  System  satrini 

aktivlashtiramiz  va  sichqonchaning  chap  tugmasini  bosamiz.  MoveUp  buyrug'i 

orqali  Standard  dan  tepaga  joylashtiramiz  va  OK  ni  bosamiz.  Endi  System 

sahifasi  Standard,  sahifasidan  oldin  joylashgan  boiadi.  Xuddi  shuningdek, 

komponentalarning MoveUp va MoveDown buyruqlari, joylashish ketmaketligini 

o'zgartirish mumkin. 



Forma dizavneri 

Forma  dizayneri  ilovaning  interfeysidagi  vizual  komponentalarni  ifodalash  uchun 

xizmat qiladi (20.26-rasm). 


 

Forma dizayneri. 

Form  dizayner  sarlavhasi  Formaning  chap  yuqori  qismida  (C++Form  1)  berilgan. 

Formaning  o’ng  yuqori qismida standart oynani berkituvchi  va kichiklashtiruvchi 

buyruqlar piktogrammasi joylashgan. 

                   

                   1.2  DEV C++ kompilyator haqida malumot. 

Dasturlardan  foydalanib,  biror  ish  bajarish  va  shu  orqali  natija  olish, 

unchalik  qiyin  jarayon  emas.  Bir  marotaba  ko‘rib  olgan  inson,  keyingi  safar  o‘zi 

bajara 


oladi. 

Ko‘pchilik 

adashtiradigan 

narsa, 


bu 

foydalanuvchi dasturchi deyilmaydi,  faqatgina dastur  foydalanuvchisi bo‘ladi 

xolos.  Dasturchi,  foydalanuvchilar  foydalanishi  uchun  dastur  yaratadi  va  bu 

jarayon juda murakkab hisoblanadi. 

Dasturchilik  bilan  shug‘ullanishni  endi  boshlagan  yoshlar  ko‘p 

qiyinchiliklarga  duch  kelishadi.  Bu  qiyinchiliklar  asosan  terminlarning 

tushunmasligidan kelib chiqadi. Bu maqolamda dasturlashning eng kerakli termini 

hisoblangan interpretator vakompilyator haqida yozib o‘taman. 

Dasturlash jarayonida dasturchi o‘z dasturini  yaratish uchun xar hil turdagi 

kodlar  yozadi.  Kodlarnining  qanday  bo‘lishi  qaysi  dasturlash  tilidan  foydalanib, 

dastur  tuzishga  bog‘liq  bo‘ladi.  Dasturlash  tillaridan  C,  C++,  Java,…  .Yozilgan 

kodlarni  kompyuter  tushunmaydi,  kompyuter  tushunishi  uchun  uchun  bu  kodlarni 



kompyuter tushunadigan tilga o‘zgartirish lozim. Mana shu vaziyatda yuqoridagi 2 

ta termin kerak bo‘ladi(kompilyator yoki interpretator). 

Kompyuter  faqatgina  raqamli  kodlarni  tushunadi,  ya’ni 0 yoki 1.  Bu  2  son 

orqali  dastur  tuzish  juda  qiyin  hisoblanadi(manimcha  bunday  sonlar  orqali  dastur 

tuzuvchilar  sanoqli  bo‘lsa  kerak).  Shuning  uchun,  insonlar  tushunadigan  qilib 

dasturlash  tillari  yaratilgan.  Ketma-ketlikni  tushungandursiz,  dasturchi  dasturlash 

tillari orqali kodlar  yozadi  va bu kodlar kompyuter tushunadigan 0  va 1 sonlariga 

almashtiriladi  va  dastur  kompyuterda  ishlaydi,  bu  jarayonni  kompilyator  yoki 

interpretator amalga oshirib beradi. 

Kompilyator —  murakkab  dasturdir,  dasturlash  tilida  yozilgan  barcha 

kodlarni birdanigaob’yektli kodga o‘zgartirib beradi. Ob’yektli kodni yana ikkilik 



kod yoki mashina  kodideb  ham  atashadi.  Keyinchalik  bu  ob’yektli  kod 

kompyuterda  to‘g‘ridan  to‘g‘ri  ishlatilishi  mumkin  bo‘ladi.  Dasturlash  tillarida 

yozilgan  kodlar  bu  ob’yektli  kodga  ta’sir  qilmaydi.  Ob’yektli  kodni  o‘zgartirish 

uchun  esa,  qaytadan  kompilyatsiya  qilinib  ob’yektli  kod  o‘zgartiriladi.  Natija 

bajariladigan, .exe ko‘rinishidagi  fayl  bo‘ladi.  Bu  faylni  bloknotda  ochib 

o‘zgartirib  bo‘lmaydi,  ya’ni  bu  fayl  tayyor  dastur  hisoblanadi.  Kompilyatorning 

kamchiligi  sifatida,  dasturlash  tilidagi  ma’lum  bir  qatorlani  alohida  tekshirish 

imkoniyati  yo‘qligidir,  uning  uchun  ob’yektli  kod  yaratib,  uni  ishga  tushurish 

lozim  bo‘ladi,  ortiqcha  ish  bo‘lib  qoladi.  Undan  tashqari  ba’zi  kompilyatorlar  bir 

dasturlash  tilidan,  ikkinchisiga  ham  o‘zgartirib  berishi  mumkin.  Kompilyator 

ishlatadigan dasturlash tillariga C, C++, Delphi larni misol qilib keltirish mumkin. 

Interpretator —  ham  dastur  ham  jihoz  ko‘rinishida  bo‘lishi  mumkin.  Bu  ham 

kompyuter  tiliga  o‘zgartirib  berish  vazifasini  bajaradi,  faqatgina  ishlash 

texnologiyasi  boshqacharoqdir.  Interpretator,  dasturlash  tilida  yozilgan  kodlarni 

ketma  —  ket  o‘qib,  mashina  tiliga  o‘zgartirib  boradi.  Xatolik  paydo  bo‘lsa,  o‘sha 

zahoti  dasturchiga  ma’lum  qiladi.  Bu  ketma  —  ketlikda  o‘zgartirish, 

kompilyatorga  nisbatan  sekinroq  amalga  oshiriladi(ba’zi  holllarda  kompilyatorga 

qaraganda  50  barobar  sekin).  Dastur  natijasini  ko‘rish  uchun,  har  safar  kodlarni 

interpretatordan  o‘tkazish  kerak  bo‘ladi(kompilyatorga  o‘xshab  bir  marotaba 



ob’yekt  kod  yaratib  qo‘yib,  keyin  har  doim  ishlatishning  iloji  yo‘q).  Bundan 

ko‘rinib  turibdiki,  interpretator  asosan  saytlar,  umumiy  holda  veb  dasturlashda 

ishlatiladi.  Biror  saytning  yuklanishi  jarayni  uzunligi,  interpretatorda  o‘zgartirish 

amalga  oshirilishi  bilan  tushuntirilishi  mumkin.  Interpretator  ishlatadigan 

dasturlash tillariga PHP, JavaScript, JScript, Basic,… misol bo‘la oladi. 

Bu ikki termin umumiy holda translyator deyiladi, ya’ni o‘zgartirgichlardir. 

Biror proyektlar qilganda bu 2 o‘zgartirgichlar birgalikda ham ishlatilishi mumkin. 

Biror  dasturlash  tili  bilan  jiddiy  shug‘ullanmoqchi  bo‘lsangiz,  dastlab  siz 

yozadigan  kodlar  qay  tarzda  kompyuter  tiliga  o‘zgartirilishini  o‘rganib  oling.  Bu 

dasturlashning asosi hisoblanadi. 

Dasturlash tillari bilan shug‘ullanadigan dasturchilar ba’zi bir terminlar bilan 

juda  ko‘p  to‘qnash  kelishadi.  C++  dasturlash  tili  ham  bundan  mustasno  emas. 

Oldin  shu  haqida,  undan  so‘ng  esa  C++  ni  ishlatish  uchun  nimalar  kerakligini 

ko‘rib chiqamiz. 

Demak  terminlarni  ko‘rib  chiqamiz:  Kompilyator –  bu  o‘zgartirish  degan 

ma’noni  beradi.  Ya’ni  dasturlash  tilida  yozilgan  dastur(C++ bo‘lsa, *.c,  *.cpp)ni 

kompyuter  tushunadigan  tilga  o‘zgartirib,  uni  ishlashini  ta’minlaydi.  Bu  degani 

dastur kompyuterda to‘liq ishlaydi. Bundan ko‘rinib turibdiki, C++ da dastur tuzish 

uchun  kompilyator  o‘rnatish  zarur.  Linux  operatsion  tizimida  kompilyator 

o‘rnatilgan bo‘ladi(GCC, G++).  



Kompilyatsiya –  o‘zgaruvchi  jarayon,  ya’ni  yuqori  pog‘onali  dastur 

kodlari(misol  uchun  C++  da  tuzilgan  kod)ni  quyi  pog‘onali  ishlovchi  kodga 

aylantirish jarayoni. 

Komponovshik(linker) – ishlovchi modul yaratish. Proyektda ishlatiladigan 

ob’yekt fayllarni to‘plab yagona ishlovchi modulga aytiladi. 



IDE(integrallashgan ishlovchi muhit) – Har bir dasturlash tilida o‘z ishchi muhiti 

bo‘ladi.  Bu  muhitda  kompilyator  bilan  birga  kod  yozishga  mo‘ljallangan  joy 



bo‘ladi.  Bu  ishchi  muhitda  bir  necha  dastur  kodlarini  ham  yozsa  bo‘ladi  va  bu 

muhit  avtomat  xatolarni  ham  ko‘rsatib  beradi.  Bu  ishchi  muhitda  ma’lum 

kutubxonalar  joylashgan  bo‘lib,  kod  yozishda  kodni  to‘g‘ri  tashkil  qilish  uchun 

ma’lum  bir  yordamlar  ekranga  chiqadi.  Ishchi  muhitga  oddiy  bloknot  misol 

bo‘ladi, lekin bu muhitning kompilyatori yo‘q, shuning uchun alohida kompilyator 

o‘rnatiladi. Bunda 2 ta dastur o‘rnatib bir biriga moslashtirish kerak bo‘ladi. Bu 2 

ishni  yengillashtirish  uchun,  juda  ko‘p  ishchi  muhit  dasturlari  yaratilgan  va  ular 

kompilyatorlar bilan integrallashgan bo‘ladi. 

C++  dasturlash  muhitida  eng  keng  tarqalgan  IDE  bu  – Visual 

C++ hisoblanadi.  Bu  dastur  o‘z  ichiga  dastur  kodlarini  yozishda  juda  muhim 

bo‘lgan .NET klasslari,  ishchi  muhit  va  albatta  kompilyator  integrallashtirilgan 

bo‘ladi. 

Quyida hozirgi zamonda eng ommabop bo‘lgan C++ muhitlari va kompilyatorlari 

ro‘yxatini keltirib o‘taman. 

Dev-C++ —  C/C++  dasturlash  tillari  uchun  ochiq  integrallashgan  dasturlash 

muhiti. 


Bu 

distributivga MinGWnomli 

kompilyator 

kiradi. 


Bu 

dastur 


o‘zi Delphi dasturlash  tilida  tuzilgan. GPL litsenziyasi  orqali  tarqatiladi.  Bir 

paytlar  Linux  versiyasi  ham  mavjud  edi,  hozir  faqat  Windows.  Hozir  yangi 

versiyalari  ishlab  chiqilmayapti,  uning  o‘rniga wxDev-C++ nomi  bilan  ishlab 

chiqilmoqda. 



C++ Builder – C++ dasturlash tili uchun mo‘ljallangan integrallashgan dasturlash 

muhiti  hisoblanadi.  DastlabBorland  Software korxonasi  tomonidan  ishlab 

chiqilgan,  undan  so‘ng  uning  bir  qismi  bo‘lgan CodeGeartomonidan.  C++ 

Builder STL,  VCL, CLX,  MFC ob’yekt  kutubxonalarini  o‘z  ichiga  oladi.  Delphi 

dasturlash tili tomonidan ishlab chiqilgan. Bu muhit drag-and-drop harakati bilan 

vizual  shaklni  paydo  qilishi  mumkin,  undan  tashqari WYSIWYG redaktori  ham 

mavjud. 

Borland  C++ —  C/C++  dasturlash  tillarida  dastur  tuzish  uchun 

mo‘ljallangan  muhit  bo‘lib, Borland firmasi  tomonidan  ishlab  chiqilgan. 

Muhitning  har  bir  versiyasi  ma’lum  bir  dasturlash  tili  standarti  asosida  ishlovchi 


kompilyator  bilan  integrallashgan  holda  chiqarilgan.  Dastlab,  DOS  operatsion 

tizimi  muhitida  ishlovchi  dasturlarni  yaratish  uchun,  keyinchalik  Windows 

muhitida  ishlovchi  dasturlarni  yaratish  uchun  mo‘ljallangan  versiyada  ishlab 

chiqildi. 



Microsoft  Visual  C++ —  Albatta Microsoft firmasi  ham  bekor  turmadi. 

Mana  shu  muhitni  yaratdi.  C++  dasturlash  tili  uchun  mo‘ljallangan  va Microsoft 



Visual  Studio ni  bir  qismi  sifatida  yoki  o‘zi  yakka Visual  C++  Express 

Edition shaklida  namoyon  bo‘ldi.  Microsoft QuickC muhitini  almashtirish 

vazifasini bajardi. 



GNU  Compiler  Collection(GCC) –  GNU  proyekti  asosida  yaratilgan,  xar 

hil  turdagi  dasturlash  tillarining  kompilyatorlar  yig‘indisi  hisoblanadi.  Bu  dastur 

ochiq  hisoblanadi  va  dastlab  faqat  S  uchun  yaratilgan  edi.  Keyinchalik 

kuchayib C++,  Objective-C,  Java,  Fortran va Ada dasturlash  tillari  uchun  ham 

ishlab chiqildi. 

Hammamizga  ma’lumki  kompyuter  yoki  har  qanday  dastur  bilan  ishlovchi 

qurilmalar uchun dasturlar biror bir dasturlash tillarida yoziladi. 

Bunday tillar hozirda juda ko’p. C, C , Delphi, Ruby, Perl, Python, Java va 

shu  kabi  universal  dasturlash  tillaridan  tashqari  maxsus  biror  yo’nalish  yoki 

platformaga  mo’ljallangan  tillar,  skript  tillar  ham  bir  talay.  Dastur  tuzish  uchun 

dastur  tuzilayotgan  qurilma  ichki  tuzilmasini  hisobga  olib  yuqoridagi  tillardan 

birida  dastur  matni  yoziladi.  So’ngra  bu  dastur   ishlashi  uchun  dastur  matnini  u 

mo’ljallangan  qurilmaning  “tiliga”,  ya’ni  prosessor  instruksiyalari  (buyruqlari) 

ketma-ketligiga  tarjima  qilish  kerak  bo’ladi.  Bu  vazifani  kompilyator  dasturi 

bajaradi. 

Kompilyator –  biror  dasturlash  tilida  yozilgan  dastur  (matni)ni  o’sha  til 

qoidalariga  muvofiq  mashina  kodiga  yoki  oraliq  kodga  (p-kod,  baytkod)  tarjima 

qiluvchi dastur.  Ushbu tarjima jarayoni kompilyasiya deyiladi. 

Agar  kompilyasiya  jarayonida  dastur  mashina  kodiga  tarjima  qilingan 

bo’lsa, hosil bo’lgan kod o’sha qurilma/muhitda bevosita ishlayveradi. Agar dastur 


oraliq  kodga  tarjima  qilingan  bo’lsa,  u  holda  bu  kodni  ishlatish  uchun  Virtual 

Mashina  kerak  bo’ladi.  Virtual  mashina  –  oraliq  kodda  ifodalangan  dasturni 

qadamlab 

mashina 


kodiga 

tarjima 


qiladi 

va 


dasturni 

ishlatadi. 

Shu  joyda  “Oraliq  kodga  o’tkazishni  nima  keragi  bor,  dasturni  to’g’ridan  to’g’ri 

mashina  kodiga  o’girish  yaxshimasmi?”  degan  savol  tug’ilishi  tabiiy.  Oraliq  kod 

birinchi  navbatda  dasturning  kross  platformaliligini  (dastur  o’zgarishsiz  yoki 

qisman o’zgartirish orqali boshqa platformalarda ham ishlayverishga yaroqli bo’lsa 

bunday  dastur  kross  platformali  deyiladi)  ta’minlaydi.   Har  bir  platforma,  OS 

o’zining  ichki  arxitekturasi  jihatidan  bir  biridan  farq  qiladi,  shunday  ekan  bir 

muhitga  moslab  yozilgan  mashina  tilidagi  kod  ikkinchi  boshqa  bir  muhitda 

ishlamasligi  tabiiy.  Oraliq  kodlarda  yozilgan  dasturlar  huddi  shu  muammoni  hal 

qilishda  yordam  beradi.  Bunda  oraliq  kodni  ishlatish  uchun  kerak  bo’ladigan 

Virtual  Mashina  turli  muhitlar,  OS  lar  uchun  mavjud  bo’lsa  yetarli,  ya’ni  har  bir 

dasturni  boshqa  muhitga  moslash  shart  emas,  faqatgina  Virtual  Mashinani  kerakli 

muhitlar  uchun  moslansa  yetarli.  Bundan  tashqari  oraliq  kod  dasturni  tahlil  qilish 

(debug)  jarayonini  yengillashtiradi  ham.  Oraliq  kod  hosil  qiluvchi  til 

kompilyatorlariga misol qilib, Java, Python, Ruby kabilarni keltirish mumkin. 

Xo’sh kompilyator qanday ishlaydi? 

       Har  qanday  tillar  o’zining  grammatikasi  yoki  sintaksisiga  ega  bo’ladi. 

Masalan,  o’zbek  tilida  to’g’ri  yozilgan  gapda  kesim  egadan  keyin  kelishi  kabi 

qoida  ham  til  sintaksisining  bir  bo’lagidir.  Dasturlash  tillarida  ham  tabiiy  tillar 

singari o’zining qonun qoidalari bo’lishi tabiiy.  Kompilyasiya jarayoni huddi shu 

qoidalarga asoslangan holda amalga oshiriladi. 

Erkin kontekstli dasturlash tillari uchun kompilyatorlar odatda asosan 3 bosqichdan 

iborat bo’ladi: 

 

       Leksik tahlil 



 

       Sintatktik tahlil 



 

       Tarjima qilish 



Har bir bosqichni batafsil ko’rib chiqamiz. 

Leksik  tahlil dastur  matnini  tilning  alifbosiga  mos  ravishda  bo’laklarga, 

“so’z”larga  ajratish  vazifasini  bajaradi.  Natijada  identifikatorlar,  literallar,  bo’sh 

joylar,  amallar  va  boshqa  bo’laklar  hosil  bo’ladi.  Masalan,  deylik,  o’zbek  tiliga 

asoslangan qandaydir dasturlash tilida 

agar (i

ko’rinishidagi matn tahminan quyidagicha bo’laklarga ajratiladi. 



 

Bo’lak/So’z 

Turi 

Agar 



Identifikator 

  



bo’sh joy (probel, tab belgisi yoki boshq.). Til 

alifbosida bo’sh joyni alohida vazifasi bo’lmasa, 

barcha bo’sh joylarni tushirib qoldirish mumkin. Va 

shunday qilamiz. 



Amal 



Identifikator 





Amal 


Identifikator 



Amal 



bo’lsa 


Identifikator 



Identifikator 

10 


Amal 


11 

sonli literal 



12 

Ajratgich 



13    

dastur oxiri 

 

Bo’laklash  bosqichini  dasturlash  qiyin  ish  emas.  Buning  uchun  har  bir  bo’lak 



qanday  belgilar  to’plamidan  iboratligi,  qaysi  belgidan  keyin  qaysi  belgi  kelishi 

kabi  belgilashlarlarni  aniqlab  olishimiz  kerak.  Shu  joyda  bir  narsani  aytib  o’tish 

lozimki, hozirda agar biror bir kompilyator yozmoqchi bo’lsangiz uni 0 dan yozish 

ham  shart  emas.  Bunda  Sintaktik  analizator  (parserlar)  va  Kompilyatorlar 

kompilyatori  kabi  bir  qancha  tayyor  dasturlardan  foydalanish  ishni  ancha 

yengillashtiradi. Bu dasturlar kirishiga tilning formal  yozuvdagi ko’rinishi berilsa, 

birinchi  (leksik  tahlil)  va  ikkinchi  (sintaktik  tahlil)  qadamlarni  avtomatik  bajarib 

beradigan,  qisman  uchinchi  bosqich  (tarjima)  ni  ham  bajaradigan  kod  hosil  qilib 

beradi.  Tilning  formal  yozuvi  (grammar)  deganda  tilning  alifbosi,  qonun 

qoidalarini  ko’rsatuvchi  yozuvga  aytiladi.  Bu  yozuv  turlaridan  biri  Bekus-Naur 

yozuvidan keng foydalaniladi. 

Bekus-Naur  yozuvida  (aniqrog’i,  uning  kengaytirilgan  variantlaridan  birida)  til 

alifbosi  Belgilar  to’plami,  So’zlar  va  Qoidalar  degan  3  ta  element  yordamida 

ifodalanadi. Belgilar to’plami bu biror bir So’z qanday belgilardan tashkil topishini 

bildiradi. Masalan  Identifikator degan So’z A dan Z gacha  lotin harflari, 0 dan 9 

gacha  raqamlar  va  “_”  belgisidan  iborat  bo’lishi  mumkin  degan  shart  aynan 

Belgilar 

to’plami 

yordamida 

ko’rsatiladi. 

Belgilar to’plami: 

{Harflar}             = ABCDEFGHIJKLMNOPQRSTUVWXYZ 

 

{Raqamlar}            = 0123456789 



{Identifikator boshi} = {Harflar} [_] 

{Identifikator oxiri} = {Raqamlar} [_] 

Bu yerda {Harflar} nomli belgilar to’plami A dan Z gacha lotin harflaridan biridan 

iborat bo’lishi mumkinligi, {Raqamlar} esa 0 dan 9 gacha raqamdan biri ekanligi, 

{Identifikator  boshi}  esa  {Harflar}  dan  va  “_”  belgisidan  tuzilganligi  va 

{Identifikator  oxiri}  esa  {Raqamlar}  va  “_”  belgisidan  iborat  ekanligi 

ko’rsatilyapti.  Belgilar  to’plamini  berishda  “  ”  belgisi  belgilar  to’plamiga  yangi 

belgini  qo’shish,  “-“  belgisi  esa  keraksiz  belgini  chiqarib  tashlashni  bildirishi 

mumkin.  Identifikator  boshi  va  oxiri  deb  ikkita  bo’lakka  bo’lishdan  maqsad  esa, 

identifikatorlar  nomi  faqat  harf  yoki  “_”  belgisidan  boshlanishi  mumkinligidan 

kelib 


chiqdi. 

Belgilar  to’plami  qay  tartibda  kelishi  So’zlarda  ifodalanadi.  Yuqoridagi  belgilar 

to’plamidan 

foydalanib 

Identifikatorni 

qanday 


berilishini 

ko’ramiz: 

Identifikator 

{Identifikator 



boshi} 

{Identifikator 

oxiri}* 

Bu  yerda  “*” belgisi uning oldida  kelgan belgilar to’plami  yoki belgining 0  yoki 

undan  ko’p  marta,  “  ”  belgisi  esa  1  yoki  undan  ko’p  marta  takrorlanishi 

mumkinligini ko’rsatadi (huddi Regular Ifodalardagi kabi). Yana misol: 

ButunSon       = {Raqamlar} 

HaqiqiySon     = {Raqamlar}* “.” {Raqamlar} 

MantiqiyQiymat = “rost” | “yolg’on” 

Qo’shtirnoq ichidagi belgi uni So’zda qanday bo’lsa shunday holicha kelishini, “|” 

belgisi 

esa 


“yoki” 

amalini 


bildiryapti. 

Va nihoyat So’zlarning qay tartibda kelishi Qoidalar yordamida beriladi: 



 ::= “agar”  “bo’lsa”  

                  | “agar”  “bo’lsa”  “aks holda”  



 ::= Identifikator “=”  

... 

     ::=  “;” 

                  |  “;” 

                  |  “;” 

                  |  “;” 

                  |  “;” 

                  |  

                  | 

... 


E’tibor  bering,    qoidasini  berishda  rekursiyadan  foydalanilyapti,  bu 

esa  buyruqlarni  ichma  ich  va  ko’p  marotaba  qaytarilishini  ifodalash  uchun  kerak 

bo’ladi.  Ko’rinib  turibdiki,  bunday  yozuvlardan  foydalanib  har  qanday  tilning 

sintaksisini, alifbosini bemalol ko’rsatish mumkin. Bekus-Naur yozuvidan tashqari 

yana  bir  nechta  shu  kabi  tilni  “qolipini”  tushuntirishda  qo’llaniladigan  yozuvlar 

mavjud. 


Keling,  yuqorida  berilgan  til  alifbosi  uchun  oddiy  bo’laklash  jarayonini 

dasturlashni  ko’rib  chiqamiz.  Ya’ni,  berilgan  matnni  Identifikator,  ButunSon, 

HaqiqiySon,  MantiqiyQiymat  kabi  bo’laklarga  ajratuvchi  dastur  tuzamiz.  Ushbu 

bosqich  uchun  Lexer  nomli  klassni  yozamiz.  Bunda  bo’laklarni  saqlash  uchun 



Token nomli qo’shimcha klass ham kerak bo’ladi: 

// Ushbu klass bo'lakni ifodalash uchun 

 

public class Token 



 

    // mumkin bo'lgan bo'laklar turi 

 

    public enum TokenType 

    { 

 

        UNKNOWN,                   // noma’lum bo’lak 

Download 1.68 Mb.

Do'stlaringiz bilan baham:
1   2   3




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling