Phase vs Pass in Compiler
Umuman olganda, kompilyator - bu bir tilda yozilgan dasturni o'qiydigan va uni manba til deb ataladigan boshqa tilga tarjima qiladigan kompyuter dasturi. An'anaga ko'ra, manba tili C++ kabi yuqori darajali til va maqsadli til Assambleya tili kabi past darajadagi til edi. Shunday qilib, umuman olganda kompilyatorlarni bir tildan boshqa tilga tarjima qiluvchi tarjimonlar sifatida ko'rish mumkin. Pass va Phase bu ikki atama bo'lib, ular kompilyatorlar bilan tez-tez ishlatiladi. Kompilyatorning o'tishlar soni - bu manba (yoki uni ifodalashning ba'zi shakllari) ustidan o'tish soni. Qurilish qulayligi uchun kompilyator qismlarga bo'lingan. Faza ko'pincha kompilyatorning yagona mustaqil qismini chaqirish uchun ishlatiladi.
Kompilyatorda Pass nima?
Tuzuvchilarni tasniflashning standart usuli bu "o'tishlar" soni. Odatda, kompilyatsiya qilish nisbatan resurs talab qiladigan jarayon bo'lib, dastlab kompyuterlarda to'liq ishni bajargan bunday dasturni saqlash uchun etarli xotira yo'q edi. Dastlabki kompyuterlarda apparat resurslari cheklanganligi sababli, kompilyatorlar kichikroq kichik dasturlarga bo'lingan, ular qisman manba kodini ko'rib chiqish orqali (manba yoki uning boshqa shakllaridan "o'tgan") va tahlillarni amalga oshirgan., transformatsiyalar va tarjima vazifalari alohida. Shunday qilib, ushbu tasnifga qarab, kompilyatorlar bir martalik yoki ko'p o'tishli kompilyatorlar sifatida belgilanadi.
Nomidan koʻrinib turibdiki, bir pasli kompilyatorlar bir martalik kompilyatorlar tuzadilar. Bir pasli kompilyatorni yozish osonroq va ular ko'p o'tishli kompilyatorlarga qaraganda tezroq ishlaydi. Shuning uchun, sizda resurs cheklovlari mavjud bo'lgan paytda ham, tillar ularni bir martalik (masalan, Paskal) bilan kompilyatsiya qilish uchun yaratilgan. Boshqa tomondan, odatiy ko'p o'tishli kompilyator bir necha asosiy bosqichlardan iborat. Birinchi bosqich - skaner (leksik analizator deb ham ataladi). Skaner dasturni o'qiydi va uni tokenlar qatoriga aylantiradi. Ikkinchi bosqich - bu tahlil qilish. U tokenlar qatorini dasturning sintaktik tuzilishini qamrab oluvchi tahlil daraxtiga (yoki mavhum sintaksis daraxtiga) aylantiradi. Keyingi bosqich sintaktik tuzilmaning semantikasini sharhlaydi. Kodni optimallashtirish bosqichlari va yakuniy kod yaratish bosqichi shundan keyin amalga oshiriladi.
Kompilyatordagi faza nima?
Faza atamasi ko'pincha kompilyator qurilishi haqida gapirganda paydo bo'ladi. Dastlab, kompilyatorlar oddiy tilni kompilyatsiya qilish uchun bir kishi tomonidan yozilgan yagona, monolit dasturiy ta'minotning har bir oddiy qismlari edi. Ammo tarjima qilinadigan tilning dastlabki kodi murakkab va katta bo'lganda, kompilyator bir nechta (nisbatan mustaqil) bosqichlarga bo'lingan. Turli bosqichlarga ega bo'lishning afzalligi shundaki, kompilyatorni ishlab chiqish ishlab chiquvchilar jamoasi o'rtasida taqsimlanishi mumkin. Bundan tashqari, u fazalarni yaxshilanganlar bilan almashtirish yoki kompilyatorga qo'shimcha bosqichlarni (masalan, keyingi optimallashtirish) qo'shish imkonini berish orqali modullikni va qayta foydalanishni yaxshilaydi. Kompilyatsiyani bosqichlarga bo'lish jarayoni Karnegi Melon universitetida PQCC (Production Quality Compiler-Compiler Project) tomonidan kiritilgan. Ular front end, o'rta uchi va orqa uchi atamalarini kiritdilar. Ko'pgina kompilyatorlar kamida ikki fazaga ega. Lekin odatda, orqa va old tomon bu bosqichlarni qamrab oladi.
Kompilyatorda faza va o'tish o'rtasidagi farq nima?
Phase va Pass - bu kompilyatorlar sohasida ishlatiladigan ikkita atama. O'tish - kompilyatorning manba kodini yoki uning boshqa ko'rinishini bir marta o'tishi (o'tishi). Odatda, kompilyatorlarning ko'pchiligi old va orqa tomon deb ataladigan kamida ikkita fazaga ega, ular bir martalik yoki ko'p o'tishli bo'lishi mumkin. Faza kompilyatorlarni konstruksiyalariga ko‘ra tasniflash uchun ishlatiladi, pass esa kompilyatorlarni qanday ishlashiga qarab tasniflash uchun ishlatiladi.