Yuqori darajadagi dasturlash tillari. Dasturlash turlari Dasturlash tillari inson va kompyuter aloqasi uchun maxsus yaratilgan rasmiy tillardir.

Dasturlash turlari Dasturlash tillari inson va kompyuter aloqasi uchun maxsus yaratilgan rasmiy tillardir. Har bir dasturlash tili, shuningdek, tabiiy til (rus, ingliz va boshqalar) alifbosi, lug'ati, o'z grammatikasi va sintaksisi hamda semantikasiga ega.

Alifbo - bu ma'lum til uchun dastur matnini tuzish uchun maqbul bo'lgan asosiy belgilarning qat'iy to'plami. Sintaksis - bu alifbo harflaridan dasturlash tilining maqbul konstruktsiyalarini aniqlaydigan qoidalar tizimi. Semantika - bu ma'lumotlarni qayta ishlash jarayonini takrorlash imkonini beruvchi alohida til konstruksiyalarini aniq talqin qilish qoidalari tizimi. Til va uning qo‘llanilishini tavsiflashda til tushunchalaridan foydalaniladi. Kontseptsiya ma'lum bir sintaktik konstruktsiyani va dasturiy ob'ektlarning xususiyatlarini yoki u tomonidan aniqlangan ma'lumotlarni qayta ishlash jarayonini nazarda tutadi. Sintaktik va semantik qoidalarning o'zaro ta'siri tilning ma'lum tushunchalari, masalan, operatorlar, identifikatorlar, o'zgaruvchilar, funktsiyalar, protseduralar, modullar va boshqalar bilan belgilanadi. Tabiiy tillardan farqli o'laroq, dasturlash tillari uchun grammatika va semantika qoidalari, barcha rasmiy tillar kabi, aniq, aniq va aniq shakllantirilishi kerak. Tabiiy tillarga taqlid qiluvchi va qo'llaniladigan mazmunli muammolarni hal qilishga qaratilgan katta buyruqlarga ega bo'lgan dasturlash tillari "yuqori darajali" tillar deb ataladi. Hozirgi vaqtda bunday tillar bir necha yuzlab, agar siz ularning dialektlarini hisoblasangiz, bu raqam bir necha mingga etdi. Yuqori darajadagi dasturlash tillari mashinaga yo'naltirilgan (pastki darajali) tillardan sezilarli darajada farq qiladi. Birinchidan, mashina dasturi pirovardida faqat ikkita O va I belgilar yordamida yoziladi. Ikkinchidan, har bir kompyuterda protsessor tuzilishiga qaratilgan cheklangan mashina operatsiyalari mavjud. Qoidaga ko'ra, bu to'plam nisbatan kichik sonli oddiy amallardan iborat, masalan: raqamni katakka yuborish; hujayradan raqamni o'qish; hujayra tarkibini +1 ga oshirish va hokazo. Mashina tili buyrug'i juda cheklangan miqdordagi ma'lumotni o'z ichiga oladi, shuning uchun u odatda xotira katakchalari tarkibining eng oddiy almashinuvini, elementar arifmetik va mantiqiy operatsiyalarni aniqlaydi. Buyruqda kodlangan harakat bajariladigan mazmuni bo'lgan kataklarning kodi va manzillari mavjud.

Yuqori darajadagi dasturlash tillari quyidagi afzalliklarga ega:

Tilning alifbosi mashinaga qaraganda ancha kengroqdir, bu uni yanada ifodali qiladi va matnning ravshanligi va tushunarliligini sezilarli darajada oshiradi;

Foydalanishga ruxsat berilgan operatsiyalar to'plami mashina operatsiyalari to'plamiga bog'liq emas, balki ma'lum bir sinf muammolarini hal qilish algoritmlarini shakllantirishda qulaylik sababli tanlanadi;



Buyruqlar (operatorlar) dizayni ma'lumotlarni qayta ishlashning mazmunli turlarini aks ettiradi va odamlar uchun qulay shaklda ko'rsatilgan;

O'zgaruvchilar apparati va ular bilan harakatlar ishlatiladi;

Ma'lumotlar turlarining keng doirasi qo'llab-quvvatlanadi. Shunday qilib, yuqori darajadagi dasturlash tillari mashinadan mustaqil bo'lib, dasturni u bajariladigan mashina tilida ko'rsatish uchun tegishli tarjimon dasturlardan (tarjimonlardan) foydalanishni talab qiladi. Algoritmik dasturlash. Hisoblash texnologiyasi paydo bo'lishining boshida kompyuterlar zamonaviy standartlarga ko'ra juda oz miqdordagi operativ xotiraga ega bo'lib, ular o'nlab kilobaytlarga etgan. O'sha yillarda dasturlarning odatiy hajmi bir necha o'nlab kod satrlari edi. Bunday dasturlar algoritmik dasturlash usulidan foydalangan holda ishlab chiqilgan: birinchi navbatda, algoritm vizual blok-sxema shaklida tayyorlangan, so'ngra u ma'lum bir dasturlash tili operatorlari yordamida yozib olingan. Algoritmik dasturlash usuli bilan tuzilgan dastur bir nuqtadan boshlanadi, keyin barcha buyruqlarni ketma-ket bajaradi va boshqa nuqtada tugaydi. Albatta, bunday dasturlarda tsikllar va filiallar bo'lishi mumkin, ammo dasturning umumiy mantig'i hali ham ketma-ket: boshidan oxirigacha. Dasturlash tillari 50-70. XX asr algoritmik dasturlash uchun ishlab chiqilgan. O'sha yillarning asosiy tillari FORTRAN va AL GOL-60 edi. FORTRAN tili soddalashtirilgan sintaksisga ega boʻlib, muhandislar tomonidan maʼqullangan, ALGOL-60 tili esa qatʼiy talablarga ega boʻlib, olimlar, asosan, matematiklar va fiziklar tomonidan maʼqullangan. Biroz vaqt o'tgach, 60-yillarning o'rtalarida. BASIC algoritmik dasturlash tili ishlab chiqilgan bo'lib, u hozir ham algoritmlar va algoritmik dasturlash bilan dastlabki tanishish uchun ishlatiladi. Agar dasturlashni o'rganishdan maqsad faqat eng oddiy algoritmlarni yaratish usullarini o'zlashtirish bo'lsa, buning uchun BASIC tili juda etarli. Protsessual dasturlash. Subprogramma tushunchasi dastlabki dasturlash tillarida kiritilgan. Algoritmik dasturlashda ular tez-tez takrorlanadigan ba'zi operatsiyalarni alohida bloklarga ajratish uchun ishlatilgan. Odatda, algoritmik tilda yozilgan dastur uni tushunarli qiladigan o‘nlab kichik dasturlarni o‘z ichiga oladi. Agar xohlasangiz, ularsiz ham qilishingiz mumkin, shunchaki dastur matni biroz chalkash bo'ladi. 70-yillarda XX asr Kompyuterning operativ xotirasi hajmi yuzlab kilobaytga yetdi. Dasturlar inson aralashuvisiz ma'lumotlarni almashishi mumkin bo'lgan disklar paydo bo'ldi. Bu dasturlar hajmini minglab bayonotlarga ko'paytirishga imkon berdi va keyin algoritmik dasturlash tillarining kamchiliklari dasturchilar ishini to'xtata boshladi. Agar siz algoritmik tilda juda uzun dastur yozsangiz, uni tushunish qiyin bo'ladi. Bir joydan ikkinchi joyga o'tish chalkash ko'rinadi va ko'p sonli o'zgaruvchilarni tushunish qiyin. O'zgaruvchida saqlangan narsalarni unutish va ularning nomlarini chalkashtirib yuborish oson. Bosh dasturlardan kengroq foydalanishda boshi berk ko'chadan chiqish yo'li topildi. Protsessual dasturlash tilida yozilgan dastur bir-birining ichiga joylashtirilgan ko'plab sikllarga o'xshaydi. U ushbu tsikllarda doimiy ravishda "aylanardi" va vaqti-vaqti bilan funktsiyalar va protseduralarning bajarilishiga sabab bo'ladi. Dasturda minglab qatorlar bo'lsa ham, uni tushunish ancha osonlashadi. Dasturchi har doim dastur qaysi tsiklda ishlayotganini osongina aniqlashi mumkin va agar u erda qandaydir nosozliklar yuzaga kelsa, uni keltirib chiqarishi mumkin bo'lgan kichik dasturlarning nomlari tezda aniqlanadi. Protsessual dasturlash algoritmlarini grafik ko'rinishda ham tasvirlash mumkin, lekin ular oqim sxemalari emas, balki struktur diagrammalar deb ataladi. Odatda dasturga faqat bitta kirish joyi bo'ladi, lekin ko'p chiqishlar bo'lishi mumkin (algoritmik dasturlashdan farqli o'laroq) va ular har doim ham ro'yxat oxirida joylashtirilmaydi. Dasturdan chiqish uchun istalgan joydan tugatish protsedurasini chaqirish kifoya. Birinchi protsessual dasturlash tili Paskal edi. Bu algoritmik dasturlash usuli yordamida unda dasturlarni yozib bo'lmaydi degani emas, lekin u o'z davrining boshqa tillariga qaraganda protsessual dasturlash uchun qulayroq edi. Tez orada yana bir mashhur protsessual dasturlash tili paydo bo'ldi - SI (C). Ma'lumotlar bazalarini yaratish uchun mo'ljallangan barcha birinchi tillar (Clipper, dBASE II, Fox-Pro, Paradox va boshqalar) protsessual dasturlash uchun mo'ljallangan. 70-80-yillardagi dasturlarning asosiy qismi protsessual dasturlash vositalaridan foydalangan holda yaratilgan. XX asr MS-DOS uchun bugungi kungacha foydalaniladigan ko'pgina dasturlar (matn muharrirlari, hisob tizimlari, ma'lumotlar bazalari va boshqalar) ham ushbu texnika yordamida yaratilgan. MS-DOS uchun kompyuter o'yinlarining aksariyati xuddi shu tarzda 90-yillarning boshlariga qadar yaratilgan. Subprogrammalarning murakkabligini oshirish. Protsessual dasturlashning rivojlanishi bilan dasturchilar subprogrammalar o'ynaydigan ulkan rolni angladilar. Kutilmaganda ma'lum bo'ldiki, turli toifadagi dasturlar - yordamchi dasturdan tortib o'yingacha - tuzilish jihatidan juda o'xshash bo'lishi mumkin, lekin faqat pastki dasturlarning mazmuni bilan farqlanadi. Keyin dasturchilar turli loyihalarda qayta-qayta foydalanish uchun pastki dasturlarni yaratishga harakat qila boshladilar. Individual protseduralar va funktsiyalar shu qadar kuchli bo'la boshladiki, bitta protsedura chaqiruvi bilan ilgari haftalar davomida dasturlashni talab qiladigan juda murakkab harakatlarni bajarish mumkin edi. Pastki dasturlarni yozish. Protsedura va funksiyalar qanchalik kuchliroq bo'lsa, ularni turli dasturlarda o'zgartirishlarsiz ishlatish uchun ularni standartlashtirish vasvasasi shunchalik ko'p bo'ladi. Va keyin ma'lum bo'ldiki, ba'zi subprogrammalar bunga juda mos keladi, boshqalari esa unchalik yaxshi emas. Har qanday dasturga dastur bilan parametr almashmaydigan (masalan, RND) biror amalni bajaruvchi protsedura yoki funksiyani biriktirish qiyin emas, lekin protseduraning ishlashida qancha parametrlar ishtirok etsa, shunchalik qiyinlashadi. maxsus sozlamalarsiz boshqa dasturga integratsiya qilishdir. Natijada, 80-yillarning o'rtalariga kelib. XX asr Ko'pgina dasturiy ta'minot kompaniyalari o'zlari foydalanadigan protseduralarni standartlashtirishni boshladilar. Ob'ektga yondashuv. Subprogrammalar standart bo'lib qolishi va hamma joyda o'zgartirilmasdan (lekin kichik sozlamalar bilan) foydalanish mumkin bo'lishi uchun ular uchun tasnifni o'ylab topish va ularni yaratish, hujjatlashtirish va ishlatish tamoyillarini ishlab chiqish kerak edi. Ushbu tamoyillar ob'ektga yo'naltirilgan yondashuv deb nomlangan. Dasturlash tillari bilan birga kelgan etarlicha murakkab va kuchli tartiblar standart ob'ektlar hisoblana boshladi. Ular oddiy parametr sozlamalaridan keyin o'z dasturlarida ishlatilishi mumkin edi. Masalan, matndagi so'zlarni qidiradigan kichik dasturni olaylik. U turli xil dasturlarda va turli usullarda ishlatilishi mumkin. Bir parametrlar to'plami bilan chaqirilganda, u belgilangan so'zlarni o'z ichiga olgan belgilar bo'yicha, boshqa parametrlar bilan chaqirilganda, foydalanilgan shrift bo'yicha qidirishga qodir va uchinchi parametrlar to'plami bilan chaqirilganda, u nafaqat so'zlarni topadi. xatolar, balki ularni tuzatadi. Ob'ektlar dastur kodini va ma'lumotlarning o'zini birlashtirgan yangi, maxsus turdagi ma'lumotlar deb hisoblana boshladi. Ob'ektlarning xususiyatlari. Ob'ekt tushunchasi uning xossalari tushunchasi bilan uzviy bog'liqdir. Barcha ob'ektlar o'ziga xos xususiyatlarga ega va ularning xususiyatlari bilan ajralib turadi. Natijada, dasturlarda tayyor ob'ektlardan foydalanish juda oddiy bo'lib qoldi: ob'ektni chaqirish, uning xususiyatlarini sozlash va tayyor dastur kodini olish. Moslashuvchan xossalarga ega tayyor obyektlardan foydalanish dasturlashsiz dasturlar yaratish imkonini berdi. Agar ilgari dasturchi ekranda muntazam uchburchak chizish uchun bitta protsedurani, kvadrat chizish uchun esa boshqasini yozishi kerak bo'lsa, u holda ob'ektga yo'naltirilgan yondashuv bilan u standart Shape ob'ektini chaqirishi va raqam uchun javobgar bo'lgan xususiyatini o'rnatishi mumkin. uchlari. Bundan tashqari, u qalinligi, rangi va chiziq turi (qattiq, nuqta va boshqalar) kabi xususiyatlarni ham sozlashi mumkin. Ob'ektlarning xususiyatlarini o'rnatish qiymatlarni belgilashning oddiy operatsiyasi bilan amalga oshiriladi. Ya'ni, dasturchi uchun ob'ekt xossalari qiymatlar berilishi mumkin bo'lgan oddiy, taniqli o'zgaruvchilardir. Demak, dasturlashdagi obyektlar quyi dasturlarning analogidir. Obyekt xossalari subprogrammalarda qo llaniladigan o zgaruvchilarning analogi bo lib, obyekt usullari esa ishchi kodning analogiga aylandi. Ob'ekt usullari - bu ularning ob'ektlari bilan bog'langan standart protseduralar. Har xil turdagi ob'ektlar har xil xususiyatlarga va turli usullarga ega. Masalan, "oyna" tipidagi ob'ektlarni ochish va yopish mumkin - bu derazalar uchun ikkita odatiy usul. "Shakl" turiga tegishli ob'ektlarni turli xil ranglar bilan bo'yash mumkin - buning uchun to'ldirish deb ataladigan usul javob beradi. Va "butun" ob'ekt qo'shish, ko'paytirish, bo'lish va ayirishning tanish usullari bilan bog'liq. Ob'ektlarning tasnifi. Agar ob'ekt oddiygina usullar va xususiyatlar to'plami bo'lsa, u dasturchilarga hech qanday yangilik bermaydi - bu parametrlarga ega eng keng tarqalgan standart pastki dastur bo'lar edi. Ilgari har bir kompaniya o'zi uchun protseduralar kutubxonalarini to'plagan bo'lsa, endi butun dunyo bo'ylab standartlashtirish imkoniyati mavjud. Endi Borland yoki Microsoft o'zlarining dasturlash tizimiga Frame ob'ekt sinfini kiritganligi sababli, dunyodagi har qanday dasturchi uni chaqirganda ekranda oyna paydo bo'lishini biladi. Bundan tashqari, uni yopish yoki ochish usulini qanday chaqirish kerakligini va oynani to'g'ri o'lchamda qilish uchun qanday xususiyatlarni belgilash kerakligini biladi. Xuddi shu narsa boshqa ob'ektlarga ham tegishli: Shakl (rasm), Jadval (jadval) va hokazo. Agar dasturlashni uy qurish bilan taqqoslasak, protsessual dasturlash davrida har bir kompaniyaning o'zi o'zi uchun haykaltaroshlik va pishgan g'ishtlarni (kichik dasturlarni) o'zi qo'ygan va saqlanadi. ular bilan ishlash usullari emas, yashirincha. Ob'ektga yo'naltirilgan yondashuvni joriy etish bilan barcha dasturchilar g'isht, quvurlar, plitalar va panellar uchun bir xil blankalarni (ob'ektlarni) oldilar. Ulardan foydalanish uchun har bir tur bilan bog'liq usullar va xususiyatlarni bilishingiz kerak.

Xususiyatlari va usullarini meros qilib olish. Tasniflash va standartlashtirish qobiliyati ob'ektga yo'naltirilgan dasturlashning yagona afzalligi emas. Xususiyat va usullarni meros qilib olish qobiliyati ham muhim rol o'ynadi. Agar barcha dasturchilar o'z dasturlarini faqat oldindan tayyorlangan ob'ektlardan (standart sinflar) tuzsalar, unda barcha dasturlar hayratlanarli darajada o'xshash bo'lar edi. Bir tomondan, bu yaxshi, lekin boshqa tomondan, bu yomon. Bu Windows ilovalari kabi yordamchi dasturlar uchun yaxshi, chunki ular ularni o'rganish va o'zlashtirishni osonlashtiradi. Ammo bu ko'ngilochar dasturlar uchun yomon: ular xilma-xillikka muhtoj. Ammo dasturchi faqat tayyor ob'ekt sinflaridan foydalanishga majbur emas. U o'z ob'ektlarini yaratishi mumkin - buning uchun u faqat ular bilan bog'liq usullarni dasturlashi va xususiyatlarni tayyorlashi kerak. Bundan tashqari, dasturchi buni noldan bajarishi shart emas. U bir nechta tayyor ob'ektlar sinfini olib, uning asosida o'zini yaratishi mumkin. U ko'pgina usullar va xususiyatlarni yaratishi shart emas - ular avtomatik ravishda meros qilib olinadi. Dasturlash o'rniga dizayn. Ekranda chiroyli oyna chizadigan dastur yaratish juda qiyin, lekin har bir yangi boshlovchi dasturchi tayyor Frame ob'ektidan foydalanishi va uning xususiyatlarini shunday sozlashi mumkinki, oyna qanday bo'lishi kerak. Ob'ektning xususiyatlarini o'rnatgandan so'ng, u o'nlab kilobayt uzunlikdagi tayyor dastur kodini oladi, lekin aslida u ob'ekt xususiyatlarini ifodalovchi o'zgaruvchilarga bir nechta qiymatlarni tayinlagan. Shunday qilib, ob'ektga yo'naltirilgan yondashuv tufayli dasturlash tayyor bloklardan dasturlarni qurishga aylana boshladi. Qo'lda dasturlash uchun qolgan yagona narsa - bu ob'ektlarning xususiyatlari kerakli qiymatlarni oladigan satrlarni yozish. Ba'zida dasturchilar o'z vazifalari uchun tayyor ob'ektlarni topa olmasligi bilan duch kelishadi. Bunday holda, ular usullarni yaratish va nostandart ob'ektlarning xususiyatlarini tavsiflash uchun haqiqatan ham jiddiy dasturlashlari kerak. Biroq, agar dasturchi yangi ob'ektni "noldan" ixtiro qilmasa, lekin uni yaratish uchun avval yaratilgan boshqa ob'ektdan foydalansa, bu vazifa juda soddalashtirilgan. Shunday qilib, ob'ektga yo'naltirilgan yondashuv eskilarini qayta konfiguratsiya qilish orqali yangi dasturlarni yaratish imkonini berdi. Bu dasturchilarning mahsuldorligini sezilarli darajada oshirish va 90-yillarning ikkinchi yarmida harakat qilish imkonini berdi. millionlab kod satrlari bilan dasturlar yaratish. Yaxshi misol Windows operatsion tizimi. Microsoft ko'p yillar davomida birinchi versiyada (Windows 95) ishladi. Bugungi kunda Windowsning yangi versiyalari har yili chiqariladi: 1998 Windows 98 1999 Windows 98 SE 2000 Windows 2000, Windows Me 2001 Windows XP (Note va Professional versiyalari) 2002 Windows XP (Server va Advanced Server). Ob'ektga yo'naltirilgan dasturlash tillari. 20-asrning 80-yillari oʻrtalarida obyektga yoʻnaltirilgan dasturlashga oʻtish. zudlik bilan emas, balki dasturlash tillarining yangi avlodi yaratilgandan keyingina sodir bo'ldi. Yangi dasturlash kontseptsiyasi bilan bir qatorda yangi kompilyatorlar va ob'ektlar kutubxonalari ishlab chiqildi. Birinchi ob'ektga yo'naltirilgan tillardan biri SI++ (C++) tili edi. Paskal tili Object Pascal tiliga aylandi. Boshqa ob'ektga yo'naltirilgan dasturlash tillari paydo bo'ldi, masalan, Sun Microsystems tomonidan ishlab chiqilgan Java tili, hozirda Internet ilovalarini yaratishda keng qo'llaniladi. Vizual dasturlash Windows operatsion tizimida oynalar, menyular, ro'yxatlar, kalitlar, belgilash katakchalari va boshqalar kabi juda ko'p standart boshqaruv elementlari mavjud. Sichqoncha bilan ishlashning standart usullari: ko'rsatish, bosish, ikki marta bosish va boshqalar. Ushbu elementlar va boshqarish texnikasi shu qadar standart bo'lib qolganki, Windows bilan ishlash uchun yozilgan dasturlarning aksariyati ularni meros qilib olgan. Sichqoncha yordamida grafik boshqaruv vositalari va ular bilan ishlash usullarini standartlashtirish dasturlash uslubini yana o'zgartirish va vizual dasturlash deb ataladigan narsaga o'tish imkonini berdi.

Vizual dasturlash tizimlari. Vizual dasturlashga o'tish Windows 3.1 operatsion muhiti (1992-1994) davrida boshlangan, ammo yangi usul 1995 yildan keyin, vizual dasturlash tizimlari deb ataladigan maxsus dasturiy ta'minot tizimlari paydo bo'la boshlaganidan keyingina haqiqiy rivojlanishni oldi. Ingliz tilida ular RAD tizimlari (RAD - Rapid Application Development - tezkor dasturlarni ishlab chiqish muhiti) deb ham ataladi. Delphi tizimi Object Pascal tiliga, Visual Basic tizimi Basic tiliga, C++ Builder tizimi SI ++ tiliga (C++), Java Builder tizimi Java tiliga mos keladi. Vizual dasturlash tamoyillari. Vizual dasturlashdan oldin dasturchi o'z ishida standart sinflardan ob'ektlarni yaratish qoidalarini tavsiflovchi, ob'ektlarning asosiy usullari va xususiyatlarini hamda ulardan foydalanish va sozlash qoidalarini ta'minlovchi bosma ma'lumotnomalardan yoki dasturiy yordam tizimlaridan foydalangan. Vizual dasturlash ko'p hollarda ma'lumotnomalardan voz kechish va sichqoncha yordamida ob'ektlar yaratish imkonini berdi, bu ham qulay, ham ingl. Vizual dasturlashning umumiy printsipi shundan iborat. 1. Standart ob'ektlar sinflari, masalan, oynalar, tugmalar, ro'yxatlar, maydonlar, radio tugmalar, belgilash katakchalari va boshqalar. va hokazolar vizual dasturlash tizimida asboblar panelidagi piktogrammalar shaklida taqdim etiladi. Ushbu piktogramma komponentlar deb ataladi. Ya'ni komponentlar ob'ektlarni yaratish vositalaridir. 2. O'z dasturiga ob'ektni kiritish uchun dasturchi kerakli komponentni tanlaydi, so'ngra sichqoncha yordamida bo'lajak boshqaruv elementi shablonini oyna shabloniga (forma deb ataladi) joylashtiradi. 3. Ob'ektni formaga joylashtirgandan so'ng, dasturchi sichqonchani bosish orqali ushbu ob'ektning xususiyatlar oynasini chaqiradi va ularni sozlaydi. Konfiguratsiyadan so'ng ob'ekt o'lchamlari, joylashuvi, nomi, yorlig'i va hokazolarni oladi. Xususiyatlar ichki xususiyatlarga ega bo'lishi mumkin, masalan, tugmadagi yorliq belgilangan rang, shrift, o'lcham va hokazolarga ega bo'lishi mumkin.

4. Xuddi shunday, sichqoncha yordamida dasturchi ob'ekt bilan bog'langan kod oynasini chaqirishi va ob'ekt usullarini sozlashi mumkin. Masalan, oyna ochilganda ovozli tovush chiqarishi mumkin va uni yopishdan oldin ogohlantirish xabari paydo bo'ladi. 5. Formaga barcha kerakli boshqaruv elementlarini joylashtirib, ularning xossalarini o‘rnatib, kerakli usullarni ulab bo‘lgach, dastur tayyor bo‘ladi. Sichqoncha yordamida uni translyatsiya qilish buyrug'i beriladi. Delphi va C++ Builder tizimlari kompilyatsiyani, Visual Basic tizimi esa izohlashni amalga oshiradi. Hodisalarni dasturlash uchta boshqaruv uslubi mavjud: buyruq, dialog va ommaviy. Bu nafaqat dasturlash, balki umuman har qanday boshqaruvga tegishli. Interaktiv ishlarning o'xshashligi birinchi marta 60-yillarning ikkinchi yarmida, vaqtni taqsimlash rejimida ishlaydigan ko'p vazifali operatsion tizimlar katta kompyuterlarda paydo bo'lganida paydo bo'ldi. Kompyuter bir vaqtning o'zida o'nlab foydalanuvchilar bilan ishladi, ular va ularning vazifalari o'rtasida bir zumda almashdi. Har bir foydalanuvchi kompyuter faqat u bilan ishlaganiga ishongan. Keyin dasturchilar birinchi marta kompyuterlar bilan bevosita muloqot qila boshladilar. Ularning ish joylari terminallar bilan jihozlangan (monitor + klaviatura). Lekin dialog dastur ichida emas, balki operatsion tizim darajasida, ya'ni dastur bajarilishidan oldin yoki undan keyin sodir bo'lgan. Hisoblash natijasini olgandan so'ng, dasturchi hisobni boshqa ma'lumotlar bilan takrorlashi yoki dasturga o'zgartirishlar kiritishi va uning bajarilishini qayta boshlashi mumkin. 70-yillarning o'rtalariga qadar. Dasturlash tillarida muloqotni tashkil qilish uchun vositalar yo'q edi. Bunday tillar shaxsiy kompyuterlar yaratilgandan keyingina paydo bo'ldi. Kompyuterning barcha dialog imkoniyatlari dasturning qandaydir cheksiz tsiklda ishlashiga asoslanadi, uning davomida u tashqi boshqaruv qurilmalarini (klaviatura, sichqoncha, modem va boshqalar) cheksiz so'raydi va javob olgandan so'ng u boshqasiga kiradi. loop va yana nimadir so'roq qiladi. 80-yillarning oxirigacha. dasturchilar o'z dasturlarining yuzlab qatorlarini ushbu tsikllarni amalga oshirishga bag'ishladilar. Natijada, qabul qilish shunchalik standart bo'lib qoldiki, u operatsion tizimga o'tkazildi va Windows 3.0 dan boshlab, dasturchi boshqaruv qurilmalarini so'roq qila olmadi, lekin Windows signalini kuta olmadi. Windows operatsion tizimi uchun klaviaturadagi tugmachalarni bosish, sichqonchani harakatlantirish va uning tugmalarini bosish, oynalarni ochish va yopish, ichki soat, modem, printer va boshqa periferik qurilmalardan signallarni qabul qilish hodisalar deb ataladi. Turli hodisalar turli Windows ob'ektlari bilan bog'langan. Masalan, oyna uchun hodisalar uning ochilishi va yopilishi; matn maydoni uchun - uni o'zgartirish va buyruq tugmasi uchun - ustiga sichqonchani bosish. Operatsion tizimdan ob'ekt bilan bog'liq bo'lgan ma'lum bir hodisa sodir bo'lganligi to'g'risida signal qabul qilinganda, ushbu hodisa uchun ishlov beruvchi bo'lgan usul pastki dasturi avtomatik ravishda ishga tushiriladi. Unda dasturchi voqea sodir bo'lganda amalga oshirmoqchi bo'lgan harakatlar algoritmini yozishi mumkin. Biz yuqorida ob'ektlar ikki xususiyat bilan bog'langanligini aytdik: xususiyatlar va usullar. Endi biz uchinchi - ob'ektlar bilan bog'liq hodisalarni qo'shishimiz mumkin. Hodisaga reaktsiya sifatida ob'ekt avtomatik ravishda dasturchi tomonidan oldindan tayyorlangan pastki dastur usulini ishga tushiradi va u, o'z navbatida, ushbu ob'ekt yoki boshqa ob'ektlarning xususiyatlarining o'zgarishiga olib kelishi mumkin, shuningdek, u bilan bog'liq bo'lgan boshqa hodisalarni keltirib chiqarishi mumkin. boshqa ob'ektlar va boshqalar e.. Hodisa mexanizmidan foydalanganda dasturni bajarish ketma-ketligi ma'lum hodisalar sodir bo'lish tartibiga va dastur ob'ektlarining ushbu hodisalarga reaktsiyasiga bog'liq. Deyarli barcha Windows ilovalari voqea mexanizmiga asoslangan. Paint dasturidagi chizma asboblarining harakatlari qaysi birini bosganiga (foydalanuvchi qaysi vositani tanlashiga) va chizish paytida foydalanuvchi sichqonchani qanday boshqarishiga bog'liq. WordPad-dagi formatlash protseduralarining ta'siri, shuningdek, qaysi ekrandagi boshqaruv elementlari hodisani yozib olganiga bog'liq. Hodisa mexanizmi u yoki bu dasturlash tilining mulki emas - bu kompyuter operatsion tizimining xossasi (va xususiyati). Operatsion tizim tomonidan taqdim etilgan hodisa mexanizmi va dasturlash tili tomonidan taqdim etilgan ob'ektga yo'naltirilgan yondashuvni birlashtirib, kompyuter bilan dialogni osongina amalga oshirish uchun ajoyib imkoniyat yaratiladi. Bu kombinatsiya hodisalarni dasturlash deb ataladi.

Oxiri

Boshlash

Takrorlang

Boshlash

Psevdokodlar

Pseudocode - algoritmlarni bir xilda yozish uchun mo'ljallangan belgilar va qoidalar tizimi. U tabiiy va rasmiy til o'rtasida oraliq o'rinni egallaydi.

Bir tomondan, u oddiy tabiiy tilga yaqin, shuning uchun algoritmlarni oddiy matn kabi yozish va o'qish mumkin. Boshqa tomondan, psevdokod ba'zi rasmiy konstruksiyalar va matematik simvolizmdan foydalanadi, bu esa algoritm belgilarini umume'tirof etilgan matematik belgilarga yaqinlashtiradi.

Psevdokodda rasmiy tillarga xos bo'lgan buyruqlarni yozish uchun qat'iy sintaktik qoidalar qabul qilinmaydi, bu esa algoritmni loyihalash bosqichida yozishni osonlashtiradi va mavhum ijrochi uchun mo'ljallangan kengroq buyruqlar to'plamidan foydalanishga imkon beradi. Biroq, psevdokod odatda rasmiy tillarga xos bo'lgan ba'zi konstruktsiyalarni o'z ichiga oladi, bu esa psevdokodda yozishdan rasmiy tilda algoritm yozishga o'tishni osonlashtiradi. Xususan, psevdokodda, shuningdek, rasmiy tillarda ma'nosi bir marta va butunlay aniqlanadigan funktsiyali so'zlar mavjud. Ular bosma matnda qalin bo'lib ko'rinadi va qo'lda yozilgan matnda tagiga chiziladi. Psevdokodning yagona yoki rasmiy ta'rifi mavjud emas, shuning uchun turli xil psevdokodlar mumkin, ular funktsional so'zlar va asosiy (asosiy) konstruktsiyalar to'plamida farqlanadi. Misol tariqasida, algoritmning psevdokodlaridan biridagi yozuv:

algoritm Evklid algoritmi;

Xayr birinchi raqam ikkinchisiga teng emas

Agar raqamlari teng

Bu STOP Hammasi;

aks holda ikkita sondan kattasini aniqlang;

h katta sonni katta va kichik sonlar orasidagi farq bilan almashtiring

oxiri;

javob sifatida birinchi raqamni oling

Ushbu algoritmni soddaroq yozish mumkin, ammo asosiy mumkin bo'lgan psevdokod konstruktsiyalarini ko'rsatish uchun aynan shu belgi berilgan. Xususiyatlariga ko'ra, psevdokodlar, yuqorida tavsiflangan boshqa qayd qilish algoritmlari kabi, insonga yo'naltirilgan.

Yuqorida ta'kidlanganidek, algoritmni og'zaki shaklda, diagramma shaklida yoki psevdokodda yozishda buyruqlarni tasvirlashda ma'lum bir o'zboshimchalikka yo'l qo'yiladi. Shu bilan birga, bunday yozuv shunchalik aniqki, u odamga masalaning mohiyatini tushunishga va algoritmni bajarishga imkon beradi.

Biroq, amalda algoritm ijrochilari sifatida maxsus mashinalar - elektron hisoblash mashinalari (kompyuterlar) qo'llaniladi. Shuning uchun, kompyuterda bajarish uchun mo'ljallangan algoritm kompyuter tomonidan "tushuniladigan" tilda yozilishi kerak. Va bu erda ijrochi tomonidan o'zboshimchalik bilan talqin qilish uchun joy qoldirmasdan, buyruqlarni aniq yozib olish zarurati birinchi o'ringa chiqadi. Shuning uchun algoritmni yozish tili rasmiylashtirilishi kerak. Bu til odatda deyiladi dasturlash tili , va bu tilda algoritmning yozilishi uchun dastur kompyuter.


Dasturlash tili alifbo, konstruksiyalarni yozish qoidalari (sintaksisi) va konstruksiyalarni izohlash qoidalari (semantika) yigʻindisi boʻlgan rasmiylashtirilgan tildir.

Hozirgi vaqtda kompyuterni qo'llashning turli sohalari uchun, ya'ni kompyuter yordamida hal qilinadigan turli sinflar uchun mo'ljallangan bir necha yuz dasturlash tillari mavjud. Ushbu tillar tilning ma'lum bir kompyuterga bog'liqlik darajasini hisobga olgan holda turli darajalarga bo'linadi.

Dasturlash - bu kompyuter dasturlarini yaratish imkonini beruvchi butun fan. U bitta dasturlash tilini tashkil etuvchi juda ko'p turli xil operatsiyalar va algoritmlarni o'z ichiga oladi. Xo'sh, bu nima va turli xil dasturlash tillari nima? Maqolada javoblar va dasturlash tillarining umumiy ro'yxati keltirilgan.

Dastur tillarining paydo bo'lishi va o'zgarishi tarixini kompyuter texnologiyalarining rivojlanish tarixi bilan bir qatorda o'rganish kerak, chunki bu tushunchalar bir-biri bilan bevosita bog'liq. Dasturlash tillarisiz kompyuterning ishlashi uchun biron bir dastur yaratish mumkin emas edi, ya'ni kompyuterlarni yaratish ma'nosiz mashg'ulotga aylanadi.

Birinchi mashina tilini 1941 yilda Analitik dvigatel ixtirochisi Konrad Zuse ixtiro qilgan. Biroz vaqt o'tgach, 1943 yilda Govard Aiken mashina kodi darajasida ko'rsatmalarni o'qiy oladigan Mark 1 mashinasini yaratdi.

1950-yillarda dasturiy taʼminotni ishlab chiqishga boʻlgan talab boshlandi va mashina tili katta hajmdagi kodlarni ishlay olmadi, shuning uchun kompyuterlar bilan muloqot qilishning yangi usuli yaratildi. "Assembler" - bu mashina ko'rsatmalarini almashtiradigan birinchi mnemonik til. Yillar o'tib, dasturlash tillari ro'yxati faqat o'sib bormoqda, chunki kompyuter texnologiyalari ko'lami kengayadi.

Dasturlash tillarining tasnifi

Hozirgi vaqtda 300 dan ortiq dasturlash tillari mavjud. Ularning har biri o'ziga xos xususiyatlarga ega va bitta aniq vazifaga mos keladi. Barcha dasturlash tillarini bir necha guruhlarga bo'lish mumkin:

  • Aspektga yo'naltirilgan (asosiy g'oya - dasturiy modullarning samaradorligini oshirish uchun funksionallikni ajratish).
  • Strukturaviy (alohida dastur bloklarining ierarxik tuzilishini yaratish g'oyasiga asoslanadi).
  • Mantiqiy (matematik mantiq apparati nazariyasiga va rezolyutsiya qoidalariga asoslangan).
  • Ob'ektga yo'naltirilgan (bunday dasturlashda endi algoritmlar emas, balki ma'lum bir sinfga tegishli ob'ektlar qo'llaniladi).
  • Ko'p paradigma (bir nechta paradigmalarni birlashtiradi va ma'lum bir holatda qaysi tildan foydalanishni dasturchining o'zi hal qiladi).
  • Funktsional (asosiy elementlar - bu manba ma'lumotlarini hisoblash natijalariga qarab o'z qiymatini o'zgartiradigan funktsiyalar).

Yangi boshlanuvchilar uchun dasturlash

Ko'pchilik dasturlash nima ekanligini qiziqtiradi. Aslida, bu kompyuter bilan aloqa qilishning bir usuli. Dasturlash tillari tufayli biz maxsus ilovalar yoki dasturlar yaratish orqali turli qurilmalarga aniq vazifalarni belgilashimiz mumkin. Ushbu fanni dastlabki bosqichda o'rganayotganda, eng muhimi, mos (siz uchun qiziqarli) dasturlash tillarini tanlashdir. Yangi boshlanuvchilar uchun ro'yxat quyida keltirilgan:

  • Basic 1964 yilda ixtiro qilingan, yuqori darajadagi tillar oilasiga kiradi va amaliy dasturlarni yozish uchun ishlatiladi.
  • Python-ni oddiy, o'qilishi mumkin bo'lgan sintaksisi tufayli o'rganish juda oson, ammo afzalligi shundaki, undan oddiy ish stoli dasturlari va veb-ilovalarni yaratish uchun foydalanish mumkin.
  • Paskal - eng qadimgi tillardan biri (1969) talabalarni o'qitish uchun yaratilgan. Uning zamonaviy modifikatsiyasi qat'iy tiplashtirilgan va tuzilgan, ammo Paskal butunlay mantiqiy til bo'lib, intuitiv darajada tushunarli.

Bu yangi boshlanuvchilar uchun dasturlash tillarining to'liq ro'yxati emas. Ko'p sonli sintaksislar mavjud bo'lib, ular tushunish oson va kelgusi yillarda talabga ega bo'ladi. Har kim o'zi uchun qiziqarli bo'lgan yo'nalishni mustaqil tanlash huquqiga ega.

Yangi boshlanuvchilar maxsus vositalar tufayli dasturlash va uning asoslarini o'rganishni tezlashtirish imkoniyatiga ega. Asosiy yordamchi - bu Visual Basic dasturlari va ilovalari uchun integratsiyalashgan ishlab chiqish muhiti ("Visual Basic" ham 1970-yillardagi Basic tilining uslubini meros qilib olgan dasturlash tilidir).

Dasturlash tillarining darajalari

Kompyuterlarda muammolarni hal qilish uchun dasturlar va algoritmlarni yaratish, tavsiflash uchun mo'ljallangan barcha rasmiylashtirilgan tillar ikkita asosiy toifaga bo'linadi: past darajadagi dasturlash tillari (ro'yxat quyida keltirilgan) va yuqori darajali. Keling, ularning har biri haqida alohida gapiraylik.

Past darajadagi tillar protsessorlar uchun mashina ko'rsatmalarini yaratish uchun mo'ljallangan. Ularning asosiy afzalligi shundaki, ular mnemonik yozuvlardan foydalanadilar, ya'ni nol va birlar ketma-ketligi o'rniga (ikkilik sanoq tizimidan) kompyuter ingliz tilidan ma'noli qisqartirilgan so'zni eslab qoladi. Eng mashhur past darajadagi tillar "Assembler" (bu tilning bir nechta kichik turlari mavjud, ularning har biri umumiy jihatlarga ega, ammo faqat qo'shimcha direktivalar va makrolar to'plamida farqlanadi), CIL (.Net-da mavjud) platformasi) va JAVA Bytecode.

Yuqori darajadagi dasturlash tillari: ro'yxat

Yuqori darajadagi tillar ilovalarning qulayligi va samaradorligini oshirish uchun yaratilgan bo'lib, ular past darajadagi tillarga mutlaqo ziddir. Ularning o'ziga xos xususiyati - dasturlarning tuzilmalari va algoritmlarini qisqa va ixcham tavsiflovchi semantik konstruktsiyalarning mavjudligi. Past darajadagi tillarda ularning mashina kodidagi tavsifi juda uzun va tushunarsiz bo'ladi. Yuqori darajadagi tillar platformadan mustaqil. Buning o'rniga kompilyatorlar translyator funktsiyasini bajaradilar: ular dastur matnini elementar mashina ko'rsatmalariga tarjima qiladilar.

Dasturlash tillarining quyidagi ro'yxati: C ("C"), C# ("C-sharp"), "Fortran", "Paskal", Java ("Java") - eng ko'p ishlatiladigan yuqori darajadagi sintaksislar qatoriga kiradi. U quyidagi xususiyatlarga ega: bu tillar murakkab tuzilmalar bilan ishlaydi, qatorli maʼlumotlar turlarini va fayl kiritish-chiqarish maʼlumotlari bilan operatsiyalarni qoʻllab-quvvatlaydi, shuningdek, oʻqilishi va tushunarli sintaksisi tufayli ular bilan ishlash ancha oson boʻlgan afzalliklarga ega.

Eng ko'p ishlatiladigan dasturlash tillari

Asosan, dasturni istalgan tilda yozishingiz mumkin. Savol tug'iladi: u samarali va muvaffaqiyatsiz ishlaydimi? Shuning uchun siz turli xil muammolarni hal qilish uchun eng mos dasturlash tillarini tanlashingiz kerak. Mashhurlik bo'yicha ro'yxatni quyidagicha ta'riflash mumkin:

  • OOP tillari: Java, C++, Python, PHP, VisualBasic va JavaScript;
  • tizimli tillar guruhi: Basic, Fortran va Paskal;
  • ko'p paradigma: C#, Delphi, Curry va Scala.

Dasturlar va ilovalar doirasi

Muayyan dastur yoziladigan tilni tanlash ko'p jihatdan uni qo'llash sohasiga bog'liq. Masalan, kompyuter uskunasining o'zi (drayverlarni yozish va qo'llab-quvvatlovchi dasturlar) bilan ishlash uchun eng yaxshi variant asosiy dasturlash tillariga kiritilgan C ("C") yoki C++ bo'ladi (yuqoridagi ro'yxatga qarang). . Mobil ilovalarni, shu jumladan o'yinlarni ishlab chiqish uchun siz Java yoki C# ("C-sharp") ni tanlashingiz kerak.

Qaysi yo'nalishda ishlashni hali hal qilmagan bo'lsangiz, C yoki C++ tillarida o'qishni boshlashingizni tavsiya qilamiz. Ular juda aniq sintaksisga va sinflar va funktsiyalarga aniq tizimli bo'linishga ega. Bundan tashqari, C yoki C++ tilini bilgan holda, istalgan boshqa dasturlash tilini osongina o'rganishingiz mumkin.

So'nggi 70 yil ichida dasturlash inson faoliyatining keng sohasiga aylandi, uning natijalari amaliy ahamiyatiga ko'ra yadro fizikasi yoki kosmik tadqiqotlar sohasidagi so'nggi natijalar bilan taqqoslanadi. Bu natijalar ko'p jihatdan yuqori darajadagi algoritmik tillarning paydo bo'lishi va tez rivojlanishi bilan bog'liq.

Paskal, C, Ada, Java, C++, C# va boshqalar kabi zamonaviy yuqori darajadagi dasturlash tillari hanuzgacha ham tizimli, ham amaliy dasturlarni ishlab chiquvchi dasturchilar uchun eng keng tarqalgan va kuchli vosita bo'lib qolmoqda. Yangi vazifalar va ehtiyojlar paydo bo'lishi bilan ushbu tillarning funksionalligi tobora ko'proq ilg'or versiyalarni yaratish orqali doimiy ravishda kengayib bormoqda.

Dasturlash tillarini rivojlantirishning yana bir yo'nalishi dasturchi bo'lmagan foydalanuvchilar (texnologlar, dizaynerlar, iqtisodchilar va boshqalar) uchun maxsus (muammoga yo'naltirilgan) dasturiy ta'minot tizimlari va muhitlarni yaratish bilan bog'liq. Bunday tizimlar va muhitlarga turli maqsadlar uchun CAD tizimlari, avtomatlashtirilgan o'qitish tizimlari, masofaviy ta'lim tizimlari, iqtisoddagi ekspert va modellashtirish tizimlari va boshqalar misol bo'ladi. Bunday tizimlarda qo'llaniladigan tegishli muammoga yo'naltirilgan tillarning maqsadi ko'pincha ularning nomlarida aks etadi, masalan: "Texnologik uskunalar sxemalarini tavsiflash tili", "O'rganish stsenariysini tavsiflash tili", "Vaziyatlarni modellashtirish uchun til" , va boshqalar.

Umumiy maqsadli va muammoga yo'naltirilgan dasturlash tillarida bitta umumiy narsa bor - ular

rasmiy tillar. Rasmiy til nima? Eng umumiy shaklda bu savolga quyidagicha javob berish mumkin: til - bu juda ko'p takliflar va rasmiy til - gaplari ma'lum qoidalar asosida tuzilgan tildir.

Gap so‘zlardan, so‘zlar esa belgilar (harflar)dan yasaladi. Barcha haqiqiy belgilar to'plami chaqiriladi alifbo til. Dasturlash tillarida jumlalar odatda bayonotlarga (yoki ko'rsatmalarga) mos keladi va biz kompyuter klaviaturasida alifbo belgilarini ko'ramiz.

Tabiiy tillar ham, dasturlash tillari ham cheksiz to'plamlardir. Dasturlash tilida cheksiz miqdordagi dasturlar yozishingiz mumkin.

Rasmiy tilda jumlalarni qurish qoidalari qanday o'rnatiladi? Bu savolga javob berishda biz ikkita muhim tushunchadan boshlaymiz: sintaksis Va semantika til.

Sintaksis til to'g'ri jumlalar va so'zlarning tuzilishini va dasturlash tillarida, boshqa narsalar qatorida, dastur matnlarining maqbul tuzilmalarini belgilaydi.

Rasmiy tillar sintaksisini tavsiflashning turli usullari mavjud (darslikning ikkinchi bobi tavsif usullariga bag'ishlangan). Eng ko'p ishlatiladigan dasturlash tillari Backus shakli - Naura(BPF) va sintaksis diagrammalar.

BNF Backus tomonidan ishlab chiqilgan va birinchi marta 1963 yilda ALGOL-60 tilini qat'iy tavsiflash uchun ishlatilgan. Bu shakl tilning butun tuzilishini tavsiflash uchun ham, alohida til konstruksiyalarini (tilning quyi to'plamlari) va uning elementlarini tavsiflash uchun ham qo'llaniladi. - operatorlar, identifikatorlar, ifodalar, raqamlar va boshqalar.

Quyida o'nlik butun sonlar sintaksisini va "+" va "*" operatorlarini o'z ichiga olgan arifmetik ifodalar sintaksisini aniqlaydigan BNF misollari keltirilgan.

O'nli butun sonlarning BNF:

= 0|1|...|9

Arifmetik ifodalarning BNF:

:= () A

Berilgan ifodalarda A har qanday identifikatorni bildiradi va ifoda tuzilgan alifboning belgisi sifatida qaraladi.

BNF ning chap tomonida belgilangan elementlarning nomlari burchakli qavslar ichida yoziladi. sintaktik kategoriyalar(tushunchalar, birliklar), “:=” belgisi “bu”, “bu”, “belgilangan”, “|” belgisini bildiradi. "yoki" degan ma'noni anglatadi.

BNF ning o'ng tomoni ushbu toifalarning o'ziga xos qiymatlarini qurish uchun mumkin bo'lgan variantlarni, bu holda o'nlik sonlar va aniq arifmetik ifodalarning qiymatlarini belgilaydi. BNF shuningdek, ushbu qiymatlar tuzilgan belgilar alifbosini ham o'z ichiga oladi. O'nli butun sonlar uchun alifbo to'plam (+,-, 0, 1,..., 9), ifodalar uchun esa to'plamdir. (A, *, +, (,)}.

Sintaktik kategoriyaning ma'nolarini yasash jarayoni quyidagilardan iborat xulosa bu qiymatlar BNF qoidalarining o'ng tomonlarini chap tomonlarga ketma-ket almashtirish orqali. Quyida “- 320” raqami va ifodaning chiqishlari keltirilgan "a+a*a" tegishli BNF yordamida:

BNF bilan katta o'xshashliklar mavjud rasmiy grammatika, rasmiy tillar nazariyasida qo'llaniladi (ba'zi mualliflar ularni aniqlaydi).

Aynan BNFning paydo bo'lishi rasmiy tillar nazariyasining jadal rivojlanishiga va uni dasturlash tillarini ishlab chiqish va tarjimonlar dizaynidagi amaliy muammolarga qo'llashga turtki bo'ldi.

Agar ko'rib chiqilayotgan BNFlarda qoidalarning chap tomonidagi har bir sintaktik kategoriya bilan belgilanadi A, B Va BILAN mos ravishda va := belgisi o'rniga quyidagi shakllar olinadi:

O'nli butun sonlar uchun:

A->B+B-B B^>CBC C->0 | 11... | 9

Arifmetik ifodalar uchun:

A^A+BB

B->B*SS

C^>(A)a

Qoidalar shunday yozilgan rasmiy grammatika. Sintaktik kategoriyalarni bildiruvchi belgilar, bu holda, B, C formal grammatikalarda ular deyiladi terminal bo'lmagan belgilar, va alifbo belgilari Terminal.

Amalda, dasturlash tilining grammatikasini "birinchi yaqinlashish" sifatida olgandan so'ng, uning xususiyatlarini tekshirish va ba'zi hollarda ba'zi transformatsiyalarni amalga oshirish kerak. Bu, asosan, grammatikani tegishli tarjimonni yaratish uchun qulay shaklga keltirish zarurati bilan bog'liq. Ushbu transformatsiyalarni amalga oshirish jarayonida, rasmiy nuqtai nazardan, BNF qanday o'ziga xos sintaktik kategoriyalar va alifbo belgilarini o'z ichiga olganligi muhim emas. Shuning uchun bu bosqichda ular odatda rasmiy grammatikaga o'tadilar va rasmiy tillar nazariyasining tegishli usullaridan foydalanadilar. Shu bilan birga, BNFni rasmiy grammatikalar bilan to'liq aniqlamaslik kerak. Rasmiy tillar nazariyasida grammatika ta'rifi umumiyroqdir. Xususan, ular tasvirlash uchun ishlatilishi mumkin kontekstga bog'liqlik, dasturlash tillarini ishlab chiqishda har doim ham oldini olish mumkin bo'lmagan va BNF yordamida tasvirlab bo'lmaydigan.

Dasturlash tili grammatikasiga xos xususiyat ularda rekursiyaning mavjudligidir. Rekursivlik ma'lum bir sintaktik kategoriyaning ta'rifi aniqlanayotgan kategoriyaning o'zini o'z ichiga oladi (bu aniq rekursiya deb ataladi). Masalan, toifalar uchun ko'rib chiqilgan BNF ta'riflarida Va o'ng tomonda ushbu toifalarni o'z ichiga oladi. Rekursiya - dasturlash tili grammatikalarining cheksiz bo'lishiga imkon beruvchi deyarli muqarrar xususiyati. Shu bilan birga, keyinroq muhokama qilinadigan ba'zi rekursiya turlari tegishli tarjimonlarni ishlab chiqish jarayonini sezilarli darajada murakkablashtiradi.

Sintaktik diagrammalar yordamida til sintaksisini tavsiflashning yuqorida qayd etilgan yana bir usuliga qisqacha to‘xtalib o‘tamiz. Ba'zi mualliflar til standartini tavsiflashda, uning aniqligi tufayli ushbu usulga ustunlik berishadi. Sintaksis diagrammalarining misollarini ko'plab dasturlash kitoblarida topish mumkin (masalan, in). E'tibor bering, tavsiflashning ikkala usuli - ham BNF, ham sintaktik diagrammalar ekvivalentdir va siz har doim bir tavsif usulidan boshqasiga o'tishingiz mumkin.

Keling, kontseptsiyani ko'rib chiqaylik til semantikasi. Agar tilning sintaksisi uning to‘g‘ri gap va matnlarining tuzilishini belgilasa, semantika ularning ma’nosining to‘g‘riligini belgilaydi. O'z navbatida, ma'noning to'g'riligi gaplarni tashkil etuvchi so'zlarning ma'nolariga bog'liq. Masalan, agar tabiiy tilda gapning sintaksisini shunday belgilaymiz

keyin siz turli xil ma'nolarga ega bo'lgan ko'plab jumlalarni qurishingiz mumkin. Masalan, “mashina haydayapti”, “mashina o‘ylayapti” jumlalari sintaktik nuqtai nazardan to‘g‘ri. Biroq, birinchi jumla to'g'ri ma'noga ega, ikkinchisini ma'nosiz deyish mumkin. Shunday qilib, semantika ma'nolar to'plamini va jumlalar (matnlar) va ma'nolar o'rtasidagi maqbul muvofiqlikni belgilaydi.

Bundan tashqari, tilning semantikasi ushbu tilda tasvirlangan ob'ektlarning xususiyatlariga bog'liq. Agar ko'rib chiqilgan misolda mashina optimal rejimlar va harakat yo'nalishlarini hisoblash dasturlari bo'lgan kompyuter bilan jihozlangan bo'lsa, ikkinchi jumla endi ma'nosiz ko'rinmaydi.

Xuddi shunday, dasturlash tillarida sintaktik jihatdan yaxshi shakllangan tayinlash operatori

a qiymati 10,5 (a = 10,5) va b false (b = noto'g'ri) qiymatiga ega bo'lsa, semantik jihatdan noto'g'ri bo'ladi.

Dasturlash tillari semantikasining rasmiy tavsifi sintaksis tavsifiga qaraganda ancha qiyinroq vazifa bo'lib chiqdi. Dasturlash tillarini amalga oshirishda matematik usullardan foydalanishga bag'ishlangan ishlarning aksariyati sintaksisni tavsiflash va sintaktik tahlil usullarini qurish masalalarini aniq qamrab oladi. Bu sohada yetarlicha keng qamrovli nazariya va metodologiya ishlab chiqilgan. Shu bilan birga, til semantikasi va semantik tahlil hozirgi kungacha ko'plab tadqiqotlarning predmeti bo'lib qolmoqda.

Dasturlash tili semantikasining ko'p jihatlarini umumiy, norasmiy xarakterga ega bo'lgan semantik konventsiyalar ro'yxati shaklida tasvirlash mumkin. Masalan, dasturchilar "blokdagi har bir identifikator bir marta aniqlanadi", "o'zgaruvchini ishlatishdan oldin uni aniqlash kerak" va hokazo kabi konventsiyalarni yaxshi bilishadi.

Rasmiy tillar nazariyasining semantika va semantik tahlil sohasida muvaffaqiyatli qo'llanilishiga misol sifatida tilni tavsiflashda semantik konventsiyalarni hisobga olish va ularning ishlash jarayonida ularning muvofiqligini kuzatish imkonini beradigan atributlarni tarjima qilish grammatikasi apparati misol bo'la oladi. dastur tarjimasi.

Dasturlash tillarini yanada rivojlantirish istiqbollari bo'yicha prognozlarga kelsak, juda ko'p fikrlar, hatto diametral qarama-qarshi bo'lganlar ham mavjud. Ba'zi mualliflarning fikricha, har bir til o'ziga xos semantik xususiyatlarga ega bo'lib, uni dasturlashning ma'lum bir sohasi uchun qulay va jozibali qiladi (masalan, Prolog va Lisp - sun'iy intellekt muammolarini hal qilishga qaratilgan; Fortran - hisoblash muammolarini hal qilishda eng samarali; Kobol - iqtisodiy hisob-kitoblar uchun ishlatiladi va hokazo). Shuning uchun siz universal til yaratishga urinmasdan, o'ziga xos imkoniyatlarga ega barcha yangi tillarni yaratishingiz yoki mavjud versiyalarni vaqti-vaqti bilan yangilab turishingiz kerak. Ushbu nuqtai nazarni qo'llab-quvvatlash uchun universal tilni yaratish bo'yicha barcha ambitsiyali loyihalar muvaffaqiyatsizlikka uchraganligi haqidagi dalil keltiriladi (ADAiPL-1 tillarini rivojlantirish bilan bog'liq amalga oshirilmagan umidlarni eslash kifoya).

Mualliflarning yana bir qismi birinchi dasturlash tillari - Fortran, Algol va boshqalarning standartlari nashr etilgandan beri 60-yillarda paydo bo'lgan deb hisoblaydi. XX asrda tillarning "barqarorlashuvi" sodir bo'ldi, ya'ni lug'at va sintaksisdagi farqlarga qaramay, turli tillarda o'xshash lingvistik konstruktsiyalar deyarli bir xil semantik asosga ega. Shu sababli, ushbu umumiy semantik bazani rasmiy ravishda aniqlash mumkin bo'lgandan so'ng, universal tilni yaratishni boshlash mumkin bo'ladi, u endi an'anaviy ma'noda dasturlash tili emas, balki semantik tuzilmalarning blankalari bo'ladi. Dastur ushbu konstruktsiyalar to'plami sifatida taqdim etiladi va matn muharriri o'z o'rnini tuzilgan muharrirga beradi. Ushbu yondashuvning qisman amalga oshirilishiga misol sifatida Delphi, C++ Builder va boshqalar kabi vizual dasturlash muhitlari keltirilgan.

Bir dasturlash tilini boshqasidan ajratib turadigan birinchi narsa ularning sintaksisidir. Sintaksisning asosiy maqsadi dasturchi va tarjimon o'rtasida ma'lumot almashish uchun yozuvni ta'minlashdir. Biroq, sintaksis tafsilotlarini ishlab chiqishda ular ko'pincha ikkinchi darajali mezonlarga asoslanadi, ularning maqsadi dasturni o'qish, yozish va efirga uzatishni osonlashtirish, shuningdek, uni bir ma'noli qilishdir. Agar dasturlash tili foydalanuvchisi uchun dasturlarni o'qish va yozish qulayligi zarur bo'lsa, u holda tarjimaning qulayligi va tilda nomuvofiqliklarning yo'qligi tarjimonning ehtiyojlariga mos keladi. Bu maqsadlar, umuman olganda, qarama-qarshidir va ularni hal qilishda maqbul kelishuvni topish dasturlash tilini ishlab chiqishda markaziy vazifalardan biridir.

Yangi dasturlash tilini yaratish uning sintaksisini aniqlashdan boshlanadi. Dasturlash tilining sintaksisini tavsiflash uchun, o'z navbatida, bizga qandaydir sinf kerak. Boshqa tilni tasvirlash uchun mo'ljallangan tilga metatil deyiladi. Tilning sintaksisini tavsiflash uchun ishlatiladigan til metasintaktik til deyiladi. Metasintaktik tillarda bu tilning yozuvini tashkil etuvchi shartli belgilarning maxsus to‘plami qo‘llaniladi.

Tarixiy jihatdan dasturlash tillari sintaksisini (xususan, Algola-60) tavsiflash uchun amalda qo'llanilgan birinchi metasintaktik til BNF - Backus normal shakli yoki Backus-Naur shakli sifatida qisqartirilgan Backus normal shakllaridir. Backus shakllarining asosiy maqsadi ta’riflanayotgan dasturlash tilining asosiy konstruksiyalarini yozish uchun qat’iy rasmiy va bir ma’noli qoidalarni ixcham va ixcham shaklda taqdim etishdan iborat.

Dasturlash tili sintaksisining rasmiy ta'rifi odatda grammatika deb ataladi.

Rasmiy tillar va grammatika

Dastlab, tillar fani - tilshunoslik aniq tabiiy tillarni o'rganish, ularni tasniflash va ular orasidagi o'xshashlik va farqlarni aniqlashga qisqartirildi. Matematika tilini o'rganadigan metamatematikaning paydo bo'lishi va rivojlanishi, hayvonlarning muloqotini o'rganish va boshqa tadqiqotlar 30-yillarda tilning sezilarli darajada kengroq kontseptsiyasiga olib keldi, unda til har qanday aloqa vositasi sifatida tushuniladi:

belgilar tizimi, ya'ni. haqiqiy belgilar ketma-ketligi to'plami;

ushbu tizimning ko'p ma'nolari;

belgilar va ma'nolar ketma-ketligi o'rtasidagi muvofiqlik, belgilarning ruxsat etilgan ketma-ketligini "ma'noli" qilish.

Belgilar alifbo harflari, matematik belgilar, tovushlar va boshqalar bo'lishi mumkin. Matematik tilshunoslik faqat shunday belgilar tizimlarini ko'rib chiqadiki, ularda belgilar ba'zi alifbolarning belgilari, belgilar ketma-ketligi esa matnlar, ya'ni. tillar mazmunli matnlarning ixtiyoriy ketma-ketligi sifatida qaraladi. Bunda matnlar majmuini belgilovchi qoidalar til sintaksisini, ma’nolar majmuining tavsifi, ma’no va matnlar o‘rtasidagi muvofiqlik esa til semantikasini tashkil qiladi. Tilning semantikasi til tomonidan tasvirlangan ob'ektlarning tabiatiga bog'liq bo'lib, uni o'rganish vositalari har xil tillar uchun har xil. Ma’lum bo‘lishicha, tilning sintaksisi ozroq tilning maqsadiga bog‘liq bo‘lib, til mazmuni va maqsadiga bog‘liq bo‘lmagan usullar bilan o‘rganilishi mumkin. Tillarning sintaksisini o'rganish uchun matematik apparat rasmiy grammatika nazariyasi deb ataladi. Sintaksis nuqtai nazaridan bu erda til endi aloqa vositasi sifatida emas, balki rasmiy ob'ektlar to'plami - alifbo belgilarining ketma-ketligi sifatida tushuniladi. "Rasmiy" atamasi ob'ektlar va ular ustidagi operatsiyalar ob'ektlarni mazmunli talqin qilmasdan, faqat rasmiy ravishda ko'rib chiqilishini ta'kidlaydi. Keling, ushbu nazariyaning asosiy atamalari va ta'riflarini takrorlaymiz.

Harf (yoki belgi) oddiy bo'linmas belgidir; ko'p harflar alifboni tashkil qiladi. Alifbolar to'plamlardir, shuning uchun ularga to'plam nazariy belgilarini qo'llash mumkin. Zanjir - alifbodagi harflarning tartiblangan ketma-ketligi. Shuningdek, biz zanjirli so'zlarni chaqiramiz. A alifbosi ustidagi barcha mumkin bo'lgan zanjirlar (so'zlar) to'plami A ning yopilishi deb ataladi va A* bilan belgilanadi.

A* toʻplami A alifbosining iteratsiyasi deb ataladi.

Agar satrlar takroriy harflardan iborat bo'lsa, u holda satrni alifbo harflarining ko'paytmasi sifatida ko'rish kerakligini ko'rsatish uchun stenografiya ishlatiladi.

Bir zanjirni boshqasiga aylantirishda pastki zanjir tushunchasi qo'llaniladi.

Harf, alifbo yoki qator (so'z) uchun atamalarning muqobil to'plami bu to'plamdir: mos ravishda so'z, lug'at va jumla. Zanjirlar (yoki jumlalar) to'plami til deb ataladi. Rasmiy ravishda, til A alifbosi ustida L dir.

Shunday qilib, yuqoridagi terminologiyadan foydalangan holda, berilgan A alifbosi uchun dasturlash tili A* to'plamining kichik to'plami bo'lib, u faqat semantikasi haqidagi tashqi ma'lumotlar tufayli mazmunli deb hisoblangan jumlalarni o'z ichiga oladi, ya'ni. dasturlash tili sintaksisini qondirish.

A* ning har qanday kichik to'plami sifatida rasmiy tilning yuqoridagi ta'rifi umumiydir: bu ko'plab tillar orasida ularning amalda qo'llaniladigan alohida sinflarini ajratishga imkon bermaydi.

Dasturlash tillarini tavsiflash uchun matematik usullardan tizimli foydalanish 1960-yillarga borib taqaladi. Keyin ALGOL-60 tili sintaksisini tavsiflash uchun foydalanilgan Backus shakllari matematik tilshunoslik vositalaridan foydalangan holda qat'iy formal asosga ega ekanligi aniqlandi. O'sha vaqtdan boshlab tarjimonlarni loyihalash va qurish uchun rasmiy matematik apparatlar - rasmiy tillar va grammatika nazariyasining rivojlanishi va qo'llanilishi tarixi boshlandi.

Backus shaklida ob'ektlarning ikkita sinfi tasvirlangan: birinchidan, dasturlash tilining asosiy belgilari va ikkinchidan, tasvirlangan til konstruktsiyalarining nomlari yoki metallingvistik o'zgaruvchilar deb ataladigan narsalar.

Grammatikaning rasmiy ta'rifi

Backus-Naur shakli

Grammatika quyidagicha ta'riflanadi:

VT - terminal belgilar to'plami (alifbo belgilari to'plami);

VN - terminal bo'lmagan belgilar to'plami (til tushunchalarini belgilaydigan belgilar).

P - qoidalar to'plami;

S - grammatikaning maqsad belgisi, aksioma.

Keling, o'nli butun sonlar uchun Backus grammatikasining rasmiy tavsifini ko'rib chiqaylik.

G((0, 1, 2, 3, 4, 5, 6, 7, 8, 9, +, -), (<число>, <цифра>), P,<число>)

P - til leksemalarini yasash qoidasi:

<число> -> [(+,-)]<цифра>[<цифра>]

<цифра> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9.

Qoida ichidagi ixtiyoriy element kvadrat qavs ichiga [...] olinadi.

Muqobil elementlar jingalak qavslar (...) ichiga olingan variantlarning vertikal ro'yxati bilan ko'rsatilgan.

Ixtiyoriy muqobil variantlar kvadrat qavs ichiga olingan variantlarning vertikal ro'yxati bilan ko'rsatilgan [...].

Takrorlanuvchi element bitta element ro'yxati (agar kerak bo'lsa jingalak yoki kvadrat qavs ichiga olinadi) va undan keyin odatdagi ellips bilan ko'rsatiladi....

Majburiy kalit so'zlarning tagiga chizilgan, lekin ixtiyoriy shovqin so'zlari emas.

Backus shakllari tilning rasmiy tavsifini ifodalaydi va ular mohiyatan tadqiqotchilarni tizim tavsifi va dasturlash tillarini tadqiq qilish uchun matematik vositalarni joriy etishga, keyinchalik ishlab chiqilgan tarjimonda sintaktik tahlil uchun asos sifatida matematik apparatlardan foydalanishga undadi. formal sintaktik ta'riflarga asoslangan sintaktik tahlilning turli usullarida.

Shuni ta'kidlash kerakki, BNF dasturlash tilida kontekstga bog'liqlikni tavsiflashga ruxsat bermaydi. Misol uchun, Paskal dasturlarining "bir blokda identifikatorni ikki marta tasvirlab bo'lmaydi" kabi cheklanishini BNF yordamida tasvirlab bo'lmaydi. Bunday cheklovlar tilning yana bir xususiyatiga - semantikaga yaqinroqdir. Shuning uchun bu erda boshqa vositalardan foydalaniladi, ular odatda metasemantik tillar deb ataladi. Biroq, qoida tariqasida, ushbu tillarning yadrosi bir xil BNF hisoblanadi.

Ko'pgina metallingvistik formulalarning o'ziga xos xususiyati ulardagi rekursiyalarning mavjudligi, ya'ni. tuzilmalarni tasvirlash uchun tavsiflangan tuzilmalarning o'zidan foydalanish. Rekursiya aniq yoki yashirin bo'lishi mumkin. Aniq rekursiya, masalan, o'nlik sonni tavsiflash qoidalarining yuqoridagi ro'yxatidagi 2-qoidada sodir bo'ladi. Yashirin rekursiya konstruksiyani qurishda qaysidir bosqichda ushbu konstruktsiyaning o'zini anglatuvchi metallingvistik o'zgaruvchidan foydalanilganda mavjud bo'ladi.

Rekursiyalarning mavjudligi metallingvistik formulalarni o'qish va tushunishni qiyinlashtiradi, ammo bu cheksiz miqdordagi qoidalardan foydalangan holda asosiy belgilar zanjirlarining cheksiz sonini o'z ichiga oladigan tilni tasvirlash imkonini beradigan yagona usuldir. Dasturlash tillari cheksizdir - ularda cheksiz miqdordagi to'g'ri dasturlar yozilishi mumkin va ularning sintaksisini BNF yordamida tavsiflashda har doim aniq yoki yashirin rekursiyalar bo'ladi.

Amalda, dasturlash tillarining sintaksisini tavsiflash uchun boshqa metallingvistik tillar ham qo'llaniladi. Ulardan foydalanishning maqsadlaridan biri ixtiyoriy, muqobil va takrorlanuvchi qoida elementlari uchun umumiy sintaktik konstruktsiyalarning BNF ifodalanishining ba'zi g'ayritabiiyligini bartaraf etishdir.

Formal grammatika nazariyasi tillarni tavsiflash, tanib olish va qayta ishlash bilan shug‘ullanadi. Bu sizga bir qator amaliy savollarga javob berish imkonini beradi. Masalan, Z sinfidagi tillarni tez va oson tanib olish mumkinmi; bu til Z sinfiga tegishlimi; “A zanjiri L tiliga tegishlimi yoki yo‘qmi?” kabi savollarga javob beradigan algoritmlar bormi? va hokazo.

Umuman olganda, tillarning alohida sinflarini tavsiflashning ikkita asosiy usuli mavjud:

generativ protseduradan foydalanish;

tan olish protsedurasidan foydalanish.

Ulardan birinchisi grammatika deb ataladigan, L tiliga tegishli bo'lgan zanjirlarni hosil qiluvchi chekli qoidalar to'plami yordamida aniqlangan.

Ikkinchisi mavhum tanib oluvchi qurilma (avtomat) yordamida.

Tarjimonlarni qurishda ushbu usullarning ikkalasi ham qo'llaniladi: dasturlash tilining sintaksisini tavsiflash vositasi sifatida grammatika va tarjimonni qurish uchun ishlatiladigan til jumlalarini aniqlash algoritmining modeli sifatida avtomat. Bunda metodik (va texnologik jihatdan) avval grammatika tuziladi, keyin esa undan manba sifatida tanib olish algoritmi tuziladi.

Shuni ta'kidlash kerakki, generativ grammatika L(G) tilining zanjirlarini hosil qilish jarayonini tavsiflagan bo'lsa-da, bu tavsif algoritmik emas - grammatikada algoritmning asosiy xususiyatlaridan biri - determinizm, ya'ni. grammatik almashtirish qoidalarini qo'llashning o'ziga xos tartibi belgilanmagan. Bu tilning ixcham tavsifini ta'minlaydi. Umuman olganda, bunday sanab o'tish algoritmi turli yo'llar bilan tuzatilishi mumkin, ammo bu tilning aniq ta'rifi uchun talab qilinmaydi.

Shunday qilib, rasmiy grammatika G potentsial ravishda til yaratish algoritmlari to'plamini aniqlaydi.

Grammatikalarning amaliy qo'llanilishi tanib olish muammosini hal qilish bilan bog'liq. Agar grammatikaning asosiy lug'ati ustidagi ixtiyoriy zanjir ushbu grammatika tomonidan yaratilgan tilga tegishlimi degan savolga chekli qadamlar ichida javob beradigan algoritm mavjud bo'lsa, tanib olish muammosi hal qilinadi. Agar bunday algoritm mavjud bo'lsa, u holda til taniladigan deb ataladi. Agar qo'shimcha ravishda, tanib olish algoritmining bosqichlari soni zanjir uzunligiga bog'liq bo'lsa va uni taxmin qilish mumkin bo'lsa, til osongina tanib olinadigan deb ataladi. Aks holda, tan olinmagan dasturlash tili uchun tarjimon yaratish haqida gapirishning ma'nosi yo'q. Shuning uchun amalda generativ grammatikalarning shunday alohida sinflari tanib olinadigan va aksariyat hollarda oson taniladigan tillarga mos keladi deb hisoblanadi. Bunday tillarning eng muhim sinflarini 1959 yilda amerikalik tilshunos N. Chomskiy (Chomskiy tasnifi) tomonidan taklif qilingan tillar tasnifi doirasida aniqlash mumkin. U rasmiy tillarni ularni yaratuvchi grammatika qoidalariga ko'ra tasniflashni taklif qildi:

Sinf 0. Fraza tuzilishiga ega grammatika. Tabiiy tillarning namunasi bo'lib xizmat qilishi mumkin. Ular eng murakkab va tarjimonlarni yaratish uchun amaliy qo'llanmaga ega emas.

1-sinf. Kontekst sezgir grammatika. Gaplarni qurishda kontekstni hisobga olgan holda, terminal bo'lmagan belgi boshqasi bilan almashtirilishi mumkin. Bunday grammatikalar asosida bir tabiiy tildan ikkinchi tabiiy tilga avtomatlashtirilgan tarjimani amalga oshirish mumkin.

2-sinf. Kontekstsiz grammatika. Terminal bo'lmagan almashtirish kontekstni hisobga olmasdan sodir bo'ladi. CS grammatikalari dasturlash tillari sintaksisini rasmiy o'rganish va tarjimonning tahlil blokini qurishda katta rol o'ynaydi.

Sinf 3. Muntazam grammatika. 3-sinf tillari chekli sonli holatlarga ega tillar yoki avtomatlar (muntazam) tillar deb ataladi va ularni yaratuvchi grammatikalar avtomat grammatikalari (A-grammatikalar) deb ataladi. A-grammatikalar asosan leksik tahlil bosqichida qo'llaniladi.

Tillarning asosiy sinflari mavhum tanib olish qurilmalari (avtomatlar) sinflari bilan belgilanishi mumkin, ular ham tegishli ierarxiyani tashkil qiladi.

Grammatikaning to'rtta sinfidan kontekstsiz grammatikalar dasturlash tillarida qo'llanganda eng muhimi hisoblanadi. Ularning yordami bilan dasturlash tilining sintaktik tuzilishining hammasi bo'lmasa-da, aksariyatini aniqlashingiz mumkin.

Grammatika turlariga ko'ra tillar 4 turga bo'linadi:

<тип 0>- so'z birikmalariga ega tillar. Bu turga barcha tabiiy tillar kiradi.

<тип 1>- kontekstga sezgir tillar. Tabiiy tillardagi matnlarni tahlil qilish va tarjima qilishda tillar va grammatikalardan foydalaniladi. Bunday grammatikalar asosida bir tabiiy tildan ikkinchi tabiiy tilga avtomatik tarjima qilish mumkin.

<тип 2>- kontekstsiz tillar. Kontekstsiz tillar zamonaviy dasturlash tillarining sintaktik tuzilmalari asosida yotadi.

<тип 3>- oddiy tillar. Ular kompyuter tizimlarini loyihalash sohasida eng keng tarqalgan va keng qo'llaniladi. Ular bilan ishlash uchun muntazam to'plamlar, muntazam ifodalar va chekli holat mashinalari qo'llaniladi.

Xulosa: tilning tasniflash turi til jumlasini qurish uchun qaysi grammatikadan foydalanish mumkinligini va jumlani qanday tanib olishni aniqlaydi.

Ko'pgina dasturlash tillari uchun tilning ma'lum bir turga tegishli yoki yo'qligini tekshirish imkonini beruvchi maxsus tuzilgan bayonotlar mavjud. Bunday gaplar lemmalar deb ataladi.

Cheklangan holat mashinalari xotiradan foydalanadi va chekli to'plamga tegishli kirish belgilari ketma-ketligini qayta ishlaydi. Matematik jihatdan davlat mashinasi quyidagicha tavsiflanadi:

bu yerda V=() - kiritish alifbosi;

Q=() - davlatlar alifbosi;

O'tish funktsiyasi;

Mashinaning dastlabki holati;

F - mashinaning yakuniy holati;

Cheklangan holat mashinasini shartli ravishda quyidagi diagramma bilan tasvirlash mumkin (2.1-rasm).

2.1-rasm - Cheklangan holat mashinasining soddalashtirilgan sxemasi

Boshqarish moslamasi (CU) chapdan o'ngga siljigan holda belgilarni ketma-ket o'qiy oladi. Boshqarish moslamasi turli holatlarda bo'lishi mumkin: ish boshlanishi: ; tugallangandan so'ng F. Holatdan holatga o'tish o'tish funktsiyasiga muvofiq amalga oshiriladi. Shu munosabat bilan chekli holat mashinasini quyidagicha ifodalash mumkin:

Bu buyruq davlat mashinasining holatda ekanligini, belgini o'qishini va holatga kirishini bildiradi.

Shunday qilib, davlat mashinasi til tanuvchidir.

Tahlil qilish vazifasi mavjud grammatika (dasturlash tili ma'lum) asosida ushbu til uchun tan oluvchini yaratishdir.

Tanuvchilarni ularni tashkil etuvchi komponentlar turiga qarab tasniflash mumkin:

O'qish moslamasi;

Xotirani boshqarish qurilmalari.

O'qish moslamasining turiga qarab, taniydiganlar bir tomonlama yoki ikki tomonlama bo'lishi mumkin. Bir tomonlama tanib oluvchilar kirish belgilarini o'qiyotganda o'quvchiga faqat bitta yo'nalishda harakat qilish imkonini beradi. Ikki tomonlama tanituvchilar har ikki yo'nalishda harakatlanishga imkon beradi.

Tekshirish moslamalarining turiga qarab tanuvchilar:

deterministik;

Deterministik bo'lmagan.

Tan oluvchi deterministik hisoblanadi, agar uning har bir bosqichida tan oluvchi keyingi bosqichda o'tishi mumkin bo'lgan yagona konfiguratsiya mavjud bo'lsa.

Xotira turlariga ko'ra, taniydiganlar:

1) xotirasiz;

2) cheklangan xotira bilan;

3) cheksiz xotira bilan.

Tilni aniqlash algoritmini tavsiflashning usullaridan biri tanib olish qurilmasini ko'rsatishdir.

Kontekstsiz qurilmalar uchun bunday qurilmalar jurnal xotirasiga ega mashinalardir.

Do'kon xotirasi birinchi kiruvchi va oxirgi chiquvchi asosida tashkil etilgan.

Dastlabki dasturni ob'ekt dasturiga o'tkazish jarayoni odatda bir nechta kichik jarayonlarga (bosqichlarga) bo'linadi. Tarjimaning asosiy bosqichlari:

1) leksik tahlil;

2) sintaktik tahlil;

3) semantik tahlil;

4) obyektli dasturning sintezi.