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.
|
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
ko’rinishidagi matn tahminan quyidagicha bo’laklarga ajratiladi.
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:
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:
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:
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: |
ma'muriyatiga murojaat qiling