KompyuterlarDasturlash

Suxandon - ... derleyiciler turlari hisoblanadi. Aylantirish va radioeshittirish dasturlarini

Dasturlar, shuningdek, odamlar bir tarjimon yoki tarjimon kerak bir tildan boshqasiga tarjima.

asosiy tushunchalar

dastur hisob-kitoblar bir til vakillik: i P → DJ (i) →. Tarjimon kiritish dasturi P va ba'zi kiritish x yetkazib bir dastur. Bu P x da amalga oshiradi: Men (P, x) = P (x). faqat bitta tarjimon (formal tizimida vakili bo'lishi mumkin) mumkin bo'lgan barcha dasturlarni amalga oshirish imkoniga ega bo'ladi, deb dalil juda chuqur va muhim kashfiyot Turing hisoblanadi.

protsessor mashina tilida dasturlar tarjimon hisoblanadi. Ular talqin qilish oson bo'lgan shaklida tarjima, shuning uchun yuqori darajadagi tillarda uchun tarjimon yozish uchun, umuman, juda qimmat.

tarjimonlar ayrim turlari juda g'alati nomlari:

  • assembler mashina tiliga montaj tili dasturlari tarjima.
  • kompilyator bir kam tili yuqori darajadagi til tarjima.

bo'lgan P → X → Savol ∀x: - Broadcaster har ikkalasi ham bir semantik bor shunday bir tarzda T dasturini ba'zi tillardagi S kiritish ma'lumotlari kabi dasturi oladi va ishlab chiqarish bir dastur. P (x) = Q (x).

yorumlanabilen narsa butun dasturni translyasiya bo'lsa, u ijro etuvchi, yoki AOT tuzish oldin kompilyatsiya deyiladi. AOT tuzuvchi ketma-ket foydalanish mumkin, ikkinchi ko'pincha masalan assembler hisoblanadi:

manba kodi tuzuvchi → (tarjimon) → → yig'ish kodi assembler (tuzuvchi) → → CPU mashina kodi (tarjimon).

Boshqa oldindan olingan qismi tomonidan qatl qachon dasturi, adabiyot, agar tezkor yoki dinamik jamlama sodir bo'ladi. JIT-kompilyatorlar yana va yana manba kodni takrorlash uchun emas, balki, shuning uchun ular allaqachon qilgan eslayman. Ular hatto dasturi ijrosi atrof-muhit xatti asosida adaptiv kompilyatsiya va recompilation ishlab chiqarish mumkin.

Ko'pchilik tillar vaqt kompilyatsiya kodi oshirish va ish vaqtida yangi kodni kompilyatsiya qilish imkonini beradi.

tarjima bosqichi

Translyatsiya tahlil va sintez, quyidagi amallarni o'z ichiga oladi:

Target kodi → manba kodi analizator → → → kontseptual vakillik generator (sintezator).

Bu sabablar tufayli:

  • Har qanday boshqa usul mos emas. Word tarjima shunchaki ish emas.
  • Yaxshi muhandislik yechim: siz ancha M × N majmuasida ortiq faqat M + N oddiy dasturlar (polukompilyatorov) yozish kerak maqsadli M va N manbai tillar uchun tarjimonlar (tarjimonlar umumiy) yozish bo'lsangiz.

Biroq, amalda, bir etarli juda kam ta'sirli va yetarli kuchli bir kontseptual ko'rish har bir manba va maqsad tillarni qoplash uchun. Ba'zi, bu yaqin kelishga muvaffaq bo'ldi-da.

Real kompilyatorlar ko'p bosqichda orqali o'tadi. O'z derleyicinizi yaratishda odamlar vakolatxonalarini va generatorlar yaratish qilgan barcha qiyin ish takrorlash kerak emas. JavaScript-ni yoki C bevosita til tarjima va mavjud JavaScript-dvigateli va dam qilish C Tuzuvchining foyda olish mumkin. Bundan tashqari, mavjud oraliq vakilligini va foydalanishingiz mumkin virtual mashinalari.

rekord tarjimon

manba, manzil va tayanch: - Broadcaster uch tillarni jalb bir dastur yoki apparat, deb. Ular quyida original chap, o'ng va maqsadli bazasini joylashtirish, T-shakli yozilgan bo'lishi mumkin.

derleyiciler uch turi bor:

  • Suxandon - bu asosiy manbai tilga mos keladigan bo'lsa samokompilyator hisoblanadi.
  • Tilni nishonga kompilyator asosiy, deb nomlangan samorezidentnym hisoblanadi.
  • Suxandon - kesmasi tuzuvchi, u maqsadli bo'lsa va asosiy turli tillar.

Nima uchun bu muhim?

Hatto, bu maqsad uchun ishlatiladi tushunchasi, masalan, keng ishlatiladi, chunki siz bir haqiqiy sintaksik, uning yaratilish texnologiyasi yaxshi bilim qilish hech qachon, agar:

  • formatlash matn;
  • Til so'rovlarni ma'lumotlar bazalari uchun;
  • zamonaviy kompyuter me'morchiligi;
  • umumiy optimallashtirish muammolari;
  • GUIs;
  • scripting tillar;
  • kontrolörler;
  • virtual mashinalari;
  • Mashina tilidagi tarjimasi.

Agar preprocessors, linkers, o'rnatish, Debugger'lar va Foydalanuvchining profili olish yozish bo'lsangiz Bundan tashqari, siz sintaksik yozganda bir xil qadamlar bilan borish kerak.

Bundan tashqari, tili uchun tarjimon yaratish, uning nozik sirlarini va noaniqliklar ham yaxshiroq tushunishni anglatadi, chunki, yaxshi dasturlarni yozish uchun qanday o'rganish mumkin. radioeshittirish umumiy tamoyillarini o'rganuvchi, shuningdek, bir yaxshi dizayner til bo'lishga imkon beradi. Bas, u qanday qilib tik samarali amalga oshirish mumkin emas, agar til muhim emas?

keng qamrovli texnologiyalar

kompilyator texnologiyasi informatika ko'p turli yo'nalishlarni qamrab oladi:

  • tilining rasmiy nazariyasi: grammatika, ajralish, Hesaplanabilirlik;
  • kompyuter me'morchiligi:. buyruq silsilasini, RISC yoki CISC, pipelined ishlash yadro soat davrlarini, etc;
  • dasturlash tillari tushunchalar, masalan, bir natija nazorat, shartli ijro etuvchi, takrorlash, yineleme, funktsional ajratish, modülerlik, sinxronizatsiya, huzur-dasturlash, ko'lami, doimiy sub-turlari, andozalar, chiqish turi, prototiplari izohlarni, oqimi, monads, pochta qutilariga amalga, davom , joker belgilar, muntazam ifoda, shunday qilib, etc tranzaksiya xotira, meros, polimorfizm, rejimi Sozlamalar va..
  • mavhum tillar va virtual mashinalari;
  • algoritmlar va ma'lumotlar tuzilmalari: muntazam iboralar, ajratishda algoritmlar, grafik usullari, dinamik dasturlash, tayyorlash;
  • dasturlash tillari: sintaktik, (statik va dinamik) semantik, qo'llab-quvvatlash paradigmalar (tizimli, OOP, funktsional, mantiqiy, to'p, harakat, meta-dasturlash);
  • yaratish dasturi (odatda yirik va murakkab kompilyatorlar): mahalliylashtirish, keshlash, componentize, API-interfeyslarni, qayta-foydalanish, sinxronizatsiya.

kompilyator dizayn

real tarjimon rivojlantirishda ayrim muammolarga duch keldi:

  • manba tili bilan bog'liq muammolar. uni kompilyatsiya qilish oson emasmi? Agar önişlemci bormi? Qanday turlari? kutubxona bormi?
  • kompilyator uzatma guruhlash: bitta yoki bir nechta yo'li?
  • optimallashtirish darajasi orzu. kam yoki yo'q optimallashtirish bilan tez va nopok eshittirish dasturlari normal bo'lishi mumkin. Over-optimallashtirish tuzuvchi sekin, lekin ish vaqtida yaxshi kodi bunga loyiq bo'lishi mumkin.
  • xato aniqlash talab darajasi. tarjimon faqat birinchi xato da to'xtatish mumkinmi? Bu to'xtatish kerak? kompilyator xatolik tuzatish ishonish yoki yo'qmi?
  • vositalari mavjudligi. original tili juda kichik bo'lmasa, skaner va generator analizatorlari talab qilinadi. U erda generatorlar, kodi generatorlar ham bor, lekin ular juda keng tarqalgan emas.
  • maqsadli kodi turi hosil bo'ladi. sof to'ldirilishi yoki virtual mashina kodi tanlab. Yoki faqat bunday LLVM, RTL, yoki JVM sifatida mashhur oraliq vakilligini yaratadi bir eshik qismini yozish. Yoki C yoki JavaScript kodida original bir tarjima qilish.
  • maqsadli kodi formatida. Siz tanlashingiz mumkin bir yig'ilish til, ko'chma mashina kodi, mashina kodi xotira tasvirni.
  • Retargeting. generatorlari majmui yaxshi bo'lsa, bir umumiy kirish qismini ega bo'lishi. Shuning uchun ko'p qismdan kiritish uchun bir generator bo'lishi uchun eng yaxshi hisoblanadi.

kompilyator Arxitektura: komponentlar

Bu (chiqish dasturi C yoki virtual mashina bir dastur bo'lsa, siz emas, balki juda ko'p bosqichlarini kerak) ona kodni hosil qiladi bir Tuzuvchining muhim funktsional qismlari:

  • Kirish dasturi (oqimi belgilari) ma'lumoti oqimining o'zgartiradi brauzer (leksik analizator), oziklanadi.
  • Bir mavhum sintaksisi daraxti qurish Ayrıştırıcı (Sintaksik tahlil qiluvchi dasturi).
  • Semantik analizator semantik ma'lumot parchalab, va xatolar uchun daraxt tugunlari tekshiradi. qo'shimcha xususiyatlari va belgilangan yo'nalishlarga ega bo'lgan mavhum sintaksisi daraxti - Natijada, semantik Grafik qurilgan.
  • Intermediate kodi generator (dizilerini asosiy blokka guruhlangan) oqim grafigi hosil qiladi.
  • Mashinasozlik mustaqil kodi optimallashtiruvchi asosan muolajalarni doirasida qolgan (tayanch birligi ichida) mahalliy va global (barcha bloklari) optimallashtirish, ham olib bormoqda. ortiqcha kodni kamaytiradi va hisob-kitoblarni soddalashtiradi. Natijada bir tahrirlangan oqimi grafik hisoblanadi.
  • Generator (ehtimol, samarasiz) bir ob'ekt fayl assembler virtual reestrini yaratish, bir tekis, uzatish nazorat kodeksiga maqsad kod asosiy bloklari bog'laydi.
  • Mashinasozlik bog'liq optimallashtiruvchi, majburiy registrlarida o'rtasida xotira ajratib turadi va rejalashtirish jamoalari qiladi. Bu vaziyat yaxshi foydalanish bilan bu Assambleyasida montaj tilida o'tkazish dasturi amalga oshiradi.

Bundan tashqari, xato ochish quyi tizimi, boshqaruvchi va ramzi jadvallar foydalanish.

Leksik tahlil (to'laligicha)

skaner ma'lumoti, olishdan bo'sh joy, fikr va kengaytirish makroların bir oqimiga oqim manbai belgi aylantiradi.

Skanerlar ko'pincha bunday hisobga ishni, chegaralariga, satr va ko'milgan izoh olish yoki yo'qligini, deb muammolarni, duch.

ko'rish paytida yuzaga kelishi mumkin xatolar, leksik chaqirdi va o'z ichiga oladi:

  • alifbo emas belgilar;
  • Bir so'z yoki chiziq belgilar sonini ortiq;
  • emas, balki bir yopiq belgisi yoki so'zma-so'z bir string;
  • fikrlaringizda fayl oxiri.

Ajratishda (a'zolar ro'yxati)

çözümleyici mavhum sintaktik daraxt ma'lumoti ketma-ketlikni aylantiradi. daraxt har bir tugun o'zlarini daraxt tugunlari bo'lgan ko'p bo'lgan nomidagi sohalarda bilan bir ob'ekt sifatida saqlanadi. Bu bosqichda hech ko'chadan bor. Agar hosil bo'lganida tahlil qilish dasturi grammatika (LL yoki LR) murakkabligi darajasiga e'tibor va har qanday qoidalari O'zbekiston milliy ensiklopediyasi bor yoki yo'qligini aniqlash uchun zarur. Ba'zi tillar semantik tahlil talab qilasiz.

Bu bosqichda topilgan xatolar sintaktik deyiladi. Misol uchun:

  • k = 5 * (7 - y;
  • j = / 5;
  • 56 = x * 4.

semantik tahlil

Davomida semantik tahlil imloviy daraxtning qoidalari va dotsent qismlari joiz tekshirish uchun (libos turi o'zgarishlar ishlashini kiritilmagan yozuvlar nomlarini beruvchi, va hokazo. D.) semantik Grafik shakllantirish uchun.

Shubhasiz, turli xil tillarda qoidalar qabul majmui. Agar Java-kabi tillarni kompilyatsiya bo'lsa, kompilyatorlar topishingiz mumkin:

  • uning doirasida bir necha o'zgaruvchan deklaratsiya;
  • uning deklaratsiyasini oldin bir o'zgaruvchilar ma'lumotnoma;
  • e'lon qilinmagan nomiga havolalar;
  • patent huquqlari buzilishi;
  • usuli Qo'ng'iroq argumentlar ortiqcha yoki kam raqami;
  • turi mos.

avlod

Intermediate kodi avlod asosiy blokka guruhlangan Umumiy bo'lim iborat oqimi grafigi ishlab chiqaradi.

kodi avlod haqiqiy mashina kodini ishlab chiqaradi. birinchi qadam RISC-mashinalar uchun an'anaviy derleyiciler, siz virtual registrlarida cheksiz raqami bilan assambler yaratish. CISC-mashinalar uchun, ehtimol bo'lmaydi.

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

Copyright © 2018 uz.delachieve.com. Theme powered by WordPress.