Preprosessor – dastur matnini yig’ish vazifasini bajaradi. Misol uchun, c++ da include yordamida kodga qo’shilgan qo’shimcha fayllar o’qilib, asosiy faylni boshiga qo’shiladi va yaxlit bir fayl ko’rinishiga keltiriladi. Va ba’zi kompilyasiyadan oldingi shartli amallarni bajaradi. Ushbu bosqich qolgan bosqichlardan eng soddasi bo’lib, bu bosqichni tashlab ketsam ham bo’laversa kerak.
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 Turi (token)
---------------------------------------------------------------------------------------
1 agar identifikator (kalit so’z)
2 bo’sh joy (probel, tab belgisi yoki boshq.). Til alifbosida bo’sh joyni vazifasi bo’lmasa, barcha bo’sh joylarni tushirib qoldirish mumkin.
3 ( operator
4 i identifikator
5 < operator
6 j identifikator
7 ) operator
8 bo’lsa identifikator (kalit so’z)
9 i identifikator
10 = operator
11 1 sonli literal
12 ; ajratgich
13 dastur oxiri (mahsus token)
Bo’laklash bosqichini dasturlash ham murakkab 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, leksik tahlil va sintaktik tahlil qadamlarni avtomatik bajarib beradigan, qisman tarjima bosqichini ham bajaradigan kod hosil qilib beradi.
|