Ko'p o'tkazuvchan kompilyator - Multi-pass compiler

A ko'p o'tkazuvchan kompilyator ning bir turi kompilyator bu ishlov beradigan manba kodi yoki mavhum sintaksis daraxti bir necha marta dastur. Bu a dan farqli o'laroq bir martalik kompilyator, bu dasturni faqat bir marta bosib o'tadi. Har bir o'tish oldingi o'tish natijasini kirish sifatida qabul qiladi va oraliq chiqishni hosil qiladi. Shu tarzda, (oraliq) kod pass pass orqali yaxshilanadi, yakuniy o'tish yakuniy kodni ishlab chiqarguncha.

Ba'zan ko'p o'tkazuvchan kompilyatorlar deyiladi keng kompilyatorlar,[iqtibos kerak ] o'tishning katta doirasiga murojaat qilish: ular dasturning kichik qismini emas, balki butun kompilyatsiya qilinishini "ko'rishlari" mumkin. Shunday qilib, ushbu kompilyatorlar uchun mavjud bo'lgan keng ko'lam yaxshiroq imkoniyat yaratadi kod yaratish (masalan, kichikroq kod kattaligi, tezroq kod) bir martalik kompilyatorlarning chiqishi bilan taqqoslaganda, yuqori kompilyator vaqti va xotira iste'moli hisobiga. Bundan tashqari, ba'zilari tillar ularning dizayni natijasida bitta dovonda to'planib bo'lmaydi.

Odatda ko'p o'tkazuvchan kompilyator

Multi-passcompiler.png

Leksik tahlil

Ko'p bosqichli kompilyatorning ushbu bosqichi sintaksis tahlili foydalana olmaydigan yoki talqin qila olmaydigan manba dasturidan ahamiyatsiz ma'lumotlarni olib tashlashdan iborat. Aloqasiz ma'lumotlar sharhlar va bo'sh joy kabi narsalarni o'z ichiga olishi mumkin. Leksik tahlil ahamiyatsiz ma'lumotlarni olib tashlashdan tashqari, tilning leksik belgilarini belgilaydi. Ushbu qadam shuni anglatadiki oldinga deklaratsiya Bu ko'p bosqichli kompilyator ishlatilsa, odatda kerak emas.Bu bosqich belgilar turkumini belgi, belgi, tur, qiymat va boshqalar kabi atributlarga ega belgilarga ajratishga qaratilgan.

Sintaksis tahlili

Sintaksis tahlili tilning sintaksis qoidalarini ko'rib chiqish uchun javobgardir (ko'pincha a kontekstsiz grammatika ) va tilning ba'zi bir oraliq vakolatlarini yaratish. Ushbu oraliq vakolatxonaning misoli an kabi bir narsa bo'lishi mumkin Abstrakt sintaksis daraxti yoki a Yo'naltirilgan asiklik grafik.

Semantik tahlil

Semantik tahlil sintaksis tahlilidan olingan vakolatxonani oladi va dasturning tilning semantik qoidalari talablariga javob berishiga ishonch hosil qilish uchun vakili uchun semantik qoidalarni qo'llaydi. Masalan, quyidagi misolda semantik tahlil bosqichida, agar til talab qilinadigan shartlarni talab qilsa agar bayonotlar mantiqiy ifodalar edi kond bu mantiqiy ifoda bo'lishiga ishonch hosil qilish uchun yozuv tekshiriladi.

agar(kond) { ... } boshqa { ...}

Ushbu kompilyatsiya bosqichida semantik tahlilni amalga oshirishdan tashqari, ko'pincha ramziy jadvallar kodlarni yaratishda yordam berish uchun yaratilgan.

Kod yaratish

Oddiy kompilyatorning ushbu yakuniy bosqichi dasturning oraliq ko'rinishini bajariladigan ko'rsatmalar to'plamiga o'zgartiradi (ko'pincha yig'ilish ). Ushbu so'nggi bosqich kompilyatsiya qilishning mashinaga bog'liq bo'lgan yagona bosqichidir. Bundan tashqari, bo'lishi mumkin optimallashtirish dasturni yanada samarali qiladigan kompilyatsiyaning ushbu bosqichida amalga oshirildi.

Boshqa kompilyatorlar qatoriga manba dasturi yozilganda yoki oraliq kod yaratish bosqichidan keyin yoki kod yaratish bosqichidan keyin sodir bo'ladigan kod ishlab chiqarish va kodni optimallashtirish bosqichidan oldin sodir bo'lgan oraliq kod yaratish bosqichi kiradi.

Ko'p o'tkazgichli kompilyatorlarning afzalliklari

Mashina mustaqil: Bir nechta o'tish modulli tuzilmani o'z ichiga olganligi va kompilyatorning boshqa bosqichlaridan kod yaratilishi ajratilganligi sababli, passlar turli xil apparat / mashinalar uchun qayta ishlatilishi mumkin.

Ko'proq ekspresiv tillar: Bir nechta o'tish o'zaro rekursiyani oqilona amalga oshirishga imkon beradigan, oldinga deklaratsiyani talab qiladi. Bitta o'tish joyida kompilyatsiya qilinishi zarurligi sababli oldinga deklaratsiyani talab qiladigan tillarning eng yaxshi namunalari kiradi C va Paskal, aksincha Java oldinga deklaratsiyalari yo'q.

Adabiyotlar

  • Bornat, Richard, Tuzuvchilarni tushunish va yozish: buni o'zingiz bajaring, Macmillan Publishing, 1979 yil. ISBN  0-333-21732-2
  • Bent Tomsen, Tillar va kompilyatorlar SProg og Overseattere, Olborg universiteti kompyuter fanlari bo'limi