I bob c++ dasturlash tili kompilyatorlari va ularning xususiyatlari c++ builder 6 kompilyator haqida dev c++ kompilyator haqida ma’lumot codeblocks kompilyator imkoniyatlari bob


Download 0.5 Mb.
bet4/5
Sana16.01.2023
Hajmi0.5 Mb.
#1094865
1   2   3   4   5
Bog'liq
C DASTURLASH TILI KOMPILYATORLARI VA ULARNING XUSUSIYATLARI

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.



N

Bo’lak/So’z

Turi

1

Agar

Identifikator

2




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.

3

(

Amal

4

I

Identifikator

5

<

Amal

6

J

Idendifikator

7

)

Amal

8

Bo’lsa

Identifikator

9

I

Identifikator

10

=

Amal

11

1

Sonli literal

12

;

Ajratish

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

Misol uchun:



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:

Download 0.5 Mb.

Do'stlaringiz bilan baham:
1   2   3   4   5




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