Dasturlash tili leksikasi, sintaksis va semantikasi. Sintaksis va semantik paskaldir. Kengaytirilgan Backus-Naur shakli

Sintaksis tarjima boshida tekshiriladi. Interpretatsiya qilingan dasturlash tillarida sintaksisni tekshirish talqin (ijro) paytida yoki oraliq kodga oldindan kompilyatsiya paytida amalga oshiriladi. Bundan tashqari, sintaksis to'g'ridan-to'g'ri IDE yordamida dasturlarning manba kodini tahrirlashda tekshirilishi mumkin.

Funktsiyalarni yozish sintaksisi

Funktsiyalarni yozish sintaksisi - funktsiya ta'rifi yoki qo'ng'iroq yozuvi bilan bajarilishi kerak bo'lgan rasmiy qoidalar; funktsiya yozuv shakli. Agar funktsiya sintaksisi noto'g'ri bo'lsa, kompilyator xatolikni qaytaradi va xato tuzatilmaguncha dastur tuzilmaydi.

Masalan, funktsiyani yozishda sintaksis xatolariga quyidagilar kiradi.

  • tilning grammatikasiga to'g'ri kelmaydigan funktsiya nomini chaqirilganda imlo (harflarga sezgir tillar uchun belgilarning noto'g'ri holati);
  • til grammatikasiga mos kelmaydigan funktsiyani chaqirishda yoki belgilashda harflardan foydalanish (boshqa turdagi qavslar, argumentlarni ajratuvchi);
  • funktsiya tomonidan qaytarilgan ma'lumotlar turining yo'qligi (grammatika bilan belgilanadigan tillar uchun).

Dasturlash tillarining sintaksis va semantikasi

Har qanday dasturlash tili, har qanday tabiiy til singari, o'z sintaksisiga va semantikasiga ega.

Sintaksis- ma'lum bir tilning elementlari shakllanishini belgilaydigan qoidalar to'plami. Boshqacha qilib aytganda, bu ma'lum bir tilda belgilarning semantik ahamiyatga ega ketma-ketligini shakllantirish qoidalari to'plamidir. Sintaksis ma'lum bir til tushunchalarini tavsiflovchi qoidalar yordamida aniqlanadi. Tushunchalarga misollar: o'zgaruvchan, ifoda, operator, protsedura. Tushunchalar ketma-ketligi va qoidalarda ulardan foydalanishda dasturlarni tashkil etuvchi sintaktik to'g'ri tuzilmalar aniqlanadi. Bu ob'ektlarning ierarxiyasi, ularning bir-biri bilan o'zaro ta'siri sintaksis orqali aniqlanmaydi. Masalan, bayonot faqat protsedurada, bayonotdagi ifoda, o'zgaruvchi nom va ixtiyoriy indekslardan va boshqalardan iborat bo'lishi mumkin. Sintaksis dasturdagi "turdagi mos kelmaslik" yoki "berilgan nom bilan o'zgaruvchi aniqlanmagan" kabi hodisalar bilan bog'liq emas. Bu semantikani qiladi.

Semantik- til elementlari va ularning semantik ma'nolari o'rtasidagi munosabatni belgilaydigan qoidalar va shartlar, shuningdek tilning sintaktik tuzilmalarining mazmunli ma'nosini izohlash. Dasturlash tilining ob'ektlari nafaqat ma'lum bir ierarxiyaga muvofiq matnda joylashtirilgan, balki turli xil assotsiatsiyalarni tashkil etuvchi boshqa tushunchalar orqali bir-biri bilan qo'shimcha ravishda bog'langan. Masalan, sintaksis haqiqiy joylashishni faqat tavsiflarda belgilaydigan va ba'zi operatorlar ma'lum bir turga ega bo'lgan, cheklangan operatsiyalar to'plamida ishlatilishi mumkin bo'lgan, manziliga, o'lchamiga ega bo'lgan va dasturda ishlatilishidan oldin tavsiflanishi kerak bo'lgan o'zgaruvchi.

Yuqori darajadagi tildagi manba kod matni odatdagi test fayli hisoblanadi. Uni "o'qish" va uni mashina ko'rsatmalarining ketma-ketligiga aylantirish uchun birinchi navbatda dastur matnini tahlil qilish amalga oshiriladi.

Sintaktik analizator- dastlabki operatorlarning berilgan dasturlash tilining sintaktik qoidalari va semantikasiga muvofiqligini tekshiradigan kompilyator komponentasi. Nomiga qaramay, analizator sintaksis va semantikani tekshirish bilan shug'ullanadi. U bir nechta bloklardan iborat bo'lib, ularning har biri o'z muammolarini hal qiladi.

Dasturlash tillari maqsadi, tuzilishi, semantik murakkabligi, amalga oshirish usullari jihatidan bir-biridan ancha farq qiladi. Bu aniq tarjimonlar rivojlanishiga o'ziga xos xususiyatlarni yuklaydi. Tilning tuzilishi sintaktik qoidalar bilan tavsiflangan uning tushunchalari o'rtasidagi ierarxik munosabatlarni tavsiflaydi. Dasturlash tillari individual tushunchalarni tashkil qilishda va ular o'rtasidagi munosabatlarda bir-biridan juda farq qilishi mumkin. Masalan, C ++ tili dasturning istalgan nuqtasida birinchi ishlatilishidan oldin o'zgaruvchilarni e'lon qilishga imkon beradi, Paskalda esa o'zgaruvchilar maxsus tavsiflash maydonida aniqlanishi kerak. Qabul qilingan qarorga qarab, tarjimon dasturni bir yoki bir nechta paslarda tahlil qilishi mumkin, bu esa eshittirish tezligiga ta'sir qiladi.

Dasturlash tillarining semantikasi juda xilma-xil. Ular nafaqat alohida operatsiyalarni amalga oshirishning o'ziga xos xususiyatlari, balki dasturni ishlab chiqish usullarining tub farqlarini belgilaydigan dasturlash paradigmalarida ham farqlanadi. Amaliyotlarni amalga oshirishning o'ziga xos xususiyatlari ham qayta ishlanayotgan ma'lumotlar tuzilishi, ham bir xil ma'lumotlar turlarini qayta ishlash qoidalari bilan bog'liq bo'lishi mumkin. Ikkala butun sonni qo'shishni amalga oshirishda ham C va Paskal kabi tillar boshqacha yo'l tutishi mumkin.

Xuddi shu tilni bir necha usullar bilan amalga oshirish mumkin. Buning sababi shundaki, rasmiy grammatikalar nazariyasi bir xil jumlalarni tahlil qilishning turli usullariga yo'l qo'yadi. Shunga ko'ra, tarjimonlar turli xil yo'llar bilan dastlabki manba kodidan bir xil natijani (ob'ekt dasturi) olishlari mumkin. Bir nechta Paskal kompilyatorlari mavjud: Turbo Paskal, MS Paskal, Ob'ektli Paskal, Delphi, Builder. Biroq, barcha dasturlash tillari bir qator umumiy xususiyatlar va parametrlarga ega. Ushbu umumiylik barcha tillar uchun o'xshash tarjimonlarni tashkil qilish tamoyillarini ham belgilaydi.

Har qanday til uchun uning yaratuvchilari quyidagilarni belgilaydilar:

To'g'ri dasturlarni yozish uchun ishlatilishi mumkin bo'lgan ko'plab belgilar (alifbo);

Ko'plab to'g'ri dasturlar (sintaksis);

- har bir to'g'ri dasturning "ma'nosi" (semantika).

Keling, tahlil qilishning bir misolini ko'rib chiqaylik. Dasturning manba kodida a + (b + c) * d formulasi ko'rinsin. Ko'pgina dasturlash tillarida bunday formula daraxt sifatida namoyish etilishi mumkin bo'lgan dasturiy ta'minot ob'ektlarining iyerarxiyasini belgilaydi (17.1-rasm). Doiralar elementar qurilish sifatida ishlatiladigan belgilarni, to'rtburchaklar esa ierarxik va ehtimol rekursiv tuzilishga ega bo'lgan birikma tushunchalarni aks ettiradi.

Bir til uchun to'g'ri bo'lgan sintaktik tuzilish boshqa til uchun noto'g'ri bo'lishi mumkin. Masalan, Lispda yuqoridagi ifoda tan olinmaydi. Ammo, bu til uchun (* (+ a b c) d) ifodasi to'g'ri bo'ladi.

Shakl: 21.1. Daraxt daraxti.

Barcha tillarning yana bir xarakterli xususiyati ularning semantikasidir. Bu til operatsiyalari ma'nosini, operandlarning to'g'riligini belgilaydi. Turli xil dasturlash tillarida bir xil sintaktik tuzilishga ega bo'lgan zanjirlar semantikasi jihatidan farq qilishi mumkin (masalan, arifmetik ifodaning yuqoridagi qismi uchun C ++, Paskal, Basic da kuzatilgan). Tilning semantikasini bilish sizni uni sintaksisidan ajratib, boshqa tilga o'tkazish uchun (kod yaratish uchun) ishlatishga imkon beradi. Semantikani tavsiflash va uning to'g'riligini tan olish odatda tarjimonning eng mashaqqatli va katta hajmli qismidir, chunki operatsiyalar va operandalarning qabul qilinadigan kombinatsiyasi variantlari to'plamini sanab chiqish va tahlil qilish zarur.

Darsning qisqacha mazmuni

Tillarning ikki jihati
  • Dasturlash tili ikki jihatga ega:
    • Sintaksis (kodlash qoidalari, imlo, so'zlar tartibi)
  • Ba'zi dasturlash tillari o'xshash sintaksisga ega
  • Ba'zi tillarda ekzotik, g'ayrioddiy sintaksis mavjud
  • Semantikani ko'rish qiyin, yashirin
Sintaksis va semantik
  • Zamonaviy tillarda yaxshi kod semantikani tushunish oson degan ma'noni anglatadi
  • Agar siz kodni nima qiyinlashtirayotganini tushunsangiz, u holda kod unchalik yaxshi emas.
  • Sintaksisni o'rganish oson
  • Sintaksisni bilishingiz kerak, ammo bu etarli emas
Tilni tanlash
  • Bu unchalik muhim emas qaysi tildan boshlash kerak
  • Siz turli xil tillarga o'tasiz va bir vaqtning o'zida bir nechta til va texnologiyalardan foydalanasiz. Bu zamonaviy dasturlashning haqiqati.
  • Biz JavaScript-ni tanladik, chunki u sodda, juda mashhur va deyarli hamma joyda ishlaydi.
  • JavaScript odatda veb-saytlar, mobil ilovalar, server dasturlari va boshqalarni yozish uchun ishlatiladi.
  • Ushbu sayt JavaScript-ni shu soniyada ishlatmoqda.
  • Hozirda sizning kompyuteringizda JavaScript dasturlari ishlamoqda.

Qo'shimcha

Siz dasturlarni zamonaviy dasturlash tilida yozasiz, aksariyat hollarda ikkilik tizim bilan duch kelmaysiz - o'sha nollar va birliklar yoki bitlar... Lekin siz tushunishingiz kerak g'oyaikkilik raqamlarning asosini tashkil etadi. Qisqa va sodda tasvirlangan tushuntirish:

Dars stenogrammasi

Tugmalarni bosish tizimini "til" deb atadik. Tarmoq, aftidan, bu alohida narsa, xuddi "START" buyrug'iga o'xshaydi. Biz tugmachalar bilan kodni kiritamiz va uni qo'l bilan boshlaymiz.

Tilshunoslar grammatika, so'z tarkibi va boshqalarni qanday muhokama qilishlarini bilasizmi? Ularni romanlar, qo'shiqlar yoki hikoyalar ayniqsa qiziqtirmaydi, ularni ko'proq ushbu romanlar, qo'shiqlar va hikoyalar uchun ishlatiladigan til qiziqtiradi. Ular kod bilan qiziqishadi. Aksariyat odamlar, aksincha, hikoyalar va ma'noga qiziqishadi. Nafaqat kitoblarda va filmlarda, balki hayotda ham. Men sevgilimdan menga yangi albom sotib olishini so'rasam, chunki men ushbu darslar uchun bema'ni rasmlar chizaman, meni "albom" so'zining etimologiyasi va tuzilishi emas, balki natijasi, maqsadi qiziqtiradi.

Biz tilni ikkita ... tarkibiy yoki ikkita xususiyatga ega deb o'ylashimiz mumkin: grammatika va maqsad. Dasturlash tillari shu ma'noda o'xshashdir, lekin ular inson tillariga qaraganda ancha sodda bo'lganligi sababli, grammatika birinchi o'rinda emas, ammo sintaksis - so'zlarning tartibi va so'z shakllanishi muhim ahamiyatga ega. Maqsad uchun, "ma'no" tushunchasi uchun dasturchilar "semantika" shov-shuvidan foydalanadilar.

Keling, Tota sehrli qutisi tilini zamonaviy dasturlash tili bilan taqqoslashga harakat qilaylik.

Ushbu quti juda murakkab sintaksisga ega va X va O belgilar bilan ishlash qiyin. Ammo bu zamonaviy kod ingliz tiliga o'xshab ... hmm ko'rinadi! Ushbu sintaksisni o'rganish ancha oson, hech bo'lmaganda har bir so'z nimani anglatishini taxmin qilishingiz mumkin.

Belgilar va so'zlardan qanday foydalanish mumkinligini tavsiflovchi qoidalar to'plami sintaksisdir.

Ba'zi dasturlash tillarida o'xshash sintaksis mavjudligini, ba'zilari esa ekzotik, g'ayrioddiy ekanligini ko'rasiz.

Semantikani yoki ma'nosini ko'rish qiyinroq, chunki u yashirin. Ushbu kodning maqsadi nima? Bu biz allaqachon tushunganimiz kabi olovli chaqmoq. Ushbu kodning maqsadi nima? Siz taxmin qilgan bo'lishingiz mumkin: bu iborani orqaga qaytaradi. Ma'nosi, ishlaydigan kodning yakuniy natijasi semantikadir.

Zamonaviy dasturlash tillarida kod va uning aniq maqsadi o'rtasidagi bog'liqlik kodning sifatini baholash uchun ishlatilishi mumkin. Agar siz kodni ko'rib chiqsangiz va uning maqsadini tezda tushunsangiz, bu yaxshi kod. Agar kodni ko'rib, "bu nima balo?!" Deb o'ylasangiz, ehtimol bu unchalik yaxshi emas. Bu bizni muhim g'oyaga olib keladi: kod odamlar uchun yozilgan. Kodni o'qish oson bo'ladimi, kompyuterlar uchun ahamiyati yo'q: ular uchun har qanday kodni o'qish oson.

Ehtimol siz o'ylayotgandirsiz - men arizalar yozishni va veb-saytlar yaratishni xohlayman, shuning uchun tabiiy ravishda men uchun maqsad muhim - semantika, xuddi yozuvchi uchun - tilshunoslik emas, balki syujet. Xo'sh, nima uchun sintaksis bilan bezovtalanish kerak? Dasturlash tili - bu veb-sayt, ilova yoki bot bo'ladimi, o'zingizning hikoyangizni aytib berish uchun foydalanadigan vositadir. O'zingizning asbobingizni qanchalik yaxshi bilsangiz, shunchalik kam o'ylaysiz va ko'proq qila olasiz. Xuddi yozuvchi fikrlarni kerakli so'zlar bilan ifoda eta olishi va odamlar tushunadigan sintaktik konstruktsiyalardan foydalanishi kerak.

Yaxshiyamki, dasturlash tillari odamlar gapiradigan tillarga nisbatan juda oddiy sintaksisga ega. Xavotir olmang, garchi biz sintaksisni o'rganishimiz kerak bo'lsa ham, bu vazifa juda oson bo'ladi.

Xo'sh ... dasturlash osonmi? Agar kompyuterlar soqov bo'lsa va biz aytgan narsani qilsalar va dasturlash tilining sintaksisini oddiy bo'lsa, barchasi birgalikda etarlicha oson bo'lishi kerak, to'g'rimi?

Xm ... yo'q. Rostini aytsam, dasturlash u qadar oson emas. Ha, maktabda insho yozish Urush va Tinchlik bilan taqqoslaganda oson. Kvant fizikasi bo'yicha doktorlik dissertatsiyasi esa umuman boshqacha darajadir. Shunday qilib, umumlashtirmang. Ro'yxatdagi har qanday faoliyat yozma taqdimotning variantidir, ammo ularni taqqoslash va "yozma taqdimot" ni baholash maqsadga muvofiq emas. Kim nima qilayotganiga qarab dasturlash oddiy yoki qiyin bo'lishi mumkin.

Sintaksisni o'rganish oson, ammo bu sizga o'z-o'zidan yordam bermasligini tezda bilib olasiz. Bu zarur narsa, lekin o'zini o'zi etarli emas.

Keyingi darslar davomida biz semantikaga, maqsadga va kompyuterlar, Internet, robotlar va mobil telefonlarning paydo bo'lishiga imkon beradigan ba'zi ajoyib g'oyalarni ko'rib chiqamiz. Bunga parallel ravishda biz sintaksisni o'rganamiz.

Sho'ng'in qilishdan oldin biz tegadigan so'nggi narsa, uh, qaysi tilni tanlash kerak? Ularning soni juda ko'p va bu juda muhim bir daqiqadek tuyulishi mumkin. Bu lahza, albatta, juda muhim, ammo "biz butun hayotimizga ta'sir qiladigan yakuniy qarorni qabul qilishimiz kerakligi" uchun emas, balki dasturlash tilini tanlash inson tili emas, balki matn terish vositasini tanlashga o'xshashligini anglashimiz kerak.

Siz qog'ozga qalam bilan biror narsa yozishingiz, yozuv mashinasi, kompyuter yoki doskadan foydalanishingiz mumkin. Har bir vosita o'z imkoniyatlari va cheklovlariga ega. Agar siz yozuvchi bo'lishni istasangiz, matn kiritish uchun nima ishlatishingiz muhim emas - qalam yoki klaviatura tugmalari. Biz faqat dasturlash tilini emas, balki dasturlashni o'rganishni xohlaymiz.

Tilni etarlicha yaxshi, etarlicha sodda, taniqli va yaxshi imkoniyatlarga ega tanlang. Professional darajada o'sishingiz bilan siz tillar o'rtasida almashasiz, bir vaqtning o'zida bir nechta til va texnologiyalardan foydalanasiz va bu siz uchun hech qanday muammo tug'dirmaydi, xuddi yozuv mashinasidan Microsoft Word-ga o'tish muammo tug'dirmaydi.

Biz JavaScript-ni birinchi dasturlash tili va dasturlashni o'rganish vositasi sifatida tanlaymiz. JavaScript dasturlari deyarli doim sizning kompyuteringizda ishlaydi, chunki aksariyat veb-saytlar, shu jumladan ushbu videoni tomosha qilgan veb-saytlar JavaScript-dan foydalanadilar. Bu nihoyatda mashhur va har yili tobora ommalashib bormoqda.

Xo'sh, dasturlashni boshlaymiz!

Har qanday dasturlash tilining asosiy elementlari uning alifbosi, sintaksis va semantikasidir.

Alifbo - bosib chiqarish moslamalari va ekranlarida aks ettirilgan va / yoki terminal klaviaturasidan kiritilgan belgilar to'plami. Bu odatda boshqaruv belgilaridan tashqari Lotin-1 belgilar to'plami. Ba'zan ushbu to'plamda ularni yozish qoidalarini ko'rsatuvchi (tokenlarga birlashtirib) ko'rsatilmaydigan belgilar mavjud.

Lug'at - identifikatorlarni (o'zgaruvchilar va yorliqlarni), operatorlarni, operatsiyalarni va tilning boshqa leksik tarkibiy qismlarini hosil qiluvchi belgilar zanjirlarini shakllantirish qoidalari to'plami. Bunga operatorlarga, o'rnatilgan funktsiyalarga va boshqalarga ishora qilish uchun mo'ljallangan dasturlash tilining zaxira (taqiqlangan, kalit so'zlar) so'zlari ham kiradi. Ba'zan dasturlash tiliga qarab ekvivalent jetonlar bir yoki bir nechta alifbo belgilari bilan belgilanishi mumkin. Masalan, C tilida qiymat berish operatsiyasi "\u003d", Paskal tilida esa ": \u003d" bilan belgilanadi. C tilidagi operator qavslari "(" va ")" belgilari bilan, Paskalda esa bosh va oxirgacha belgilanadi. Shuning uchun lug'at va alifbo o'rtasidagi chegara juda shartli, ayniqsa, kompilyator odatda taniqli kalit so'zlarni leksik tahlil bosqichida ichki kod bilan almashtiradi (masalan, boshlash - 512, tugatish - 513) va ularni alohida belgilar sifatida ko'rib chiqadi.

Sintaksis - til konstruktsiyalari yoki dasturlash tilining jumlalarini shakllantirish bo'yicha qoidalar to'plami - bloklar, protseduralar, birikma operatorlar, shartli operatorlar, tsikl operatorlari va boshqalar. Bu shuni anglatadiki, tilning sintaksisining elementi to'g'ridan-to'g'ri yoki bilvosita uning qismlaridan birining ta'rifida o'z ichiga oladi. Masalan, tsikl operatorining ta'rifida tsiklning tanasi operator bo'lib, uning maxsus holati bir xil tsikl operatoridir.

Dastur imlosi (sintaksis) qoidalariga qat'iy rioya qilish talab etiladi. Xususan, Paskal tinish belgilarining maqsadini aniq belgilaydi. Nuqtali vergul (;) dastur sarlavhasi oxirida, o'zgaruvchini e'lon qilish bo'limining oxirida, har bir bayonotdan so'ng joylashtiriladi. Siz tugatish so'zidan oldin vergulni tashlab qo'yishingiz mumkin. Vergul (,) - har xil ro'yxatdagi elementlarning ajratuvchisi: tavsif qismidagi o'zgaruvchilar ro'yxati, kirish va chiqish qiymatlari ro'yxati.

Dasturlash tilidagi qat'iy sintaksis birinchi navbatda tarjimon uchun talab qilinadi. Tarjimon - bu rasmiy ravishda bajariladigan dastur. Agar, masalan, vergul o'zgaruvchilar ro'yxatining ajratuvchisi bo'lishi kerak bo'lsa, unda boshqa har qanday belgi xato sifatida ko'rib chiqiladi. Agar nuqta-vergul gaplarni ajratuvchi bo'lsa, tarjimon dastur matnining butun qismini bitta verguldan boshqasiga operator sifatida ko'rib chiqadi. Agar siz ushbu belgini istalgan ikkita operator orasiga qo'yishni unutgan bo'lsangiz, tarjimon ularni bitta sifatida qabul qiladi, bu esa xatolikka olib kelishi muqarrar.

Sintaktik qoidalarning asosiy maqsadi til konstruktsiyalariga aniq ma'no berishdir. Agar biron bir qurilishni noaniq talqin qilish mumkin bo'lsa, unda u xato bo'lishi kerak. Sezgiga ishonmaslik, balki til qoidalarini o'rgangan ma'qul.

Dasturlash tili sintaksisini tavsiflash uchun sizga qandaydir til kerak. Bunday holda, biz boshqa tillarni tavsiflash uchun mo'ljallangan metal tili ("supralanguage") haqida gapiramiz. Dasturlash adabiyotida eng keng tarqalgan metal tili - Backus - Naur metalingvistik formulalari (BNF tili) va sintaksis diagrammalaridir. Sintaksis diagrammalarining tili ingl, tushunishi osonroq.

BNFda har qanday sintaktik tushuncha :: \u003d belgisi bilan bog'langan o'ng va chap qismlardan tashkil topgan formulalar shaklida tavsiflanadi, ularning ma'nosi "ta'rifi bo'yicha mavjud" so'zlariga tengdir. :: \u003d belgisining chap tomonida aniqlangan kontseptsiyaning nomi (metavariable) yoziladi, burchakli qavs ichiga olinadi< >va o'ng tomonda metavariant qabul qilishi mumkin bo'lgan barcha qiymatlar to'plamini belgilaydigan formula yoki diagramma yozilgan.

Tilning sintaksisini tushunchalarning ketma-ket murakkablashishi bilan tavsiflanadi: avval sodda (asosiy) bo'lganlar aniqlanadi, so'ngra tarkibiy qism sifatida avvalgi tushunchalarni o'z ichiga olgan tobora murakkabroq bo'lganlar aniqlanadi.

Ushbu ketma-ketlikda, shubhasiz, yakuniy belgilangan tushuncha dastur tushunchasi bo'lishi kerak.

Meta-formulalar yozuvlarida ma'lum konventsiyalar qabul qilingan. Masalan, "ikkilik raqam" tushunchasini belgilaydigan BNF formulasi quyidagicha:

<двоичная цифра>::=0|1

"|" Belgisi so'zi "yoki" ga teng.

Diagrammalarda o'qlar sintaksis elementlari ketma-ketligini ko'rsatadi; qurilishda mavjud bo'lgan ramzlar doiraga kiritilgan.

BNF "ikkilik kod" tushunchasini ikkilik raqamlarning bo'sh bo'lmagan ketma-ketligi sifatida quyidagicha tavsiflaydi:

<двоичный код>::=<двоичная цифра>|<двоичный

kod\u003e<двоичная цифра>

Muayyan kontseptsiya o'zi orqali aniqlanadigan ta'rif rekursiv deb ataladi. Rekursiv ta'riflar BNF uchun odatiy hisoblanadi.

Orqaga o'q bir necha marta takrorlanishni bildiradi. Shubhasiz, diagramma BNFga qaraganda ko'proq tushunarli.

Sintaksis diagrammalarini N. Virt kiritgan va u yaratgan Paskal tilini tavsiflash uchun foydalangan.

Semantik - tuzilmalarning semantik mazmuni, tilning jumlalari, semantik tahlil bu strukturaning semantik jihatdan to'g'riligini sinash. Masalan, biz ifodada o'zgaruvchidan foydalansak, u holda dastur matnida oldinroq aniqlanishi kerak va shu ta'rifdan uning turini olish mumkin. O'zgaruvchan turiga asoslanib, ushbu o'zgaruvchi bilan operatsiyani qabul qilish to'g'risida gaplashishimiz mumkin. Semantik xatolar operatsiyalar, massivlar, funktsiyalar, operatorlar va boshqalar noo'rin ishlatilganda yuzaga keladi.

Har qanday til, shu jumladan dasturlash tili ham qator qoidalarga bo'ysunadi. Ular odatda tilning sintaksisini belgilaydigan qoidalarga va uning semantikasini belgilaydigan qoidalarga bo'linadi.

Til sintaksisi - tilning qabul qilinadigan konstruktsiyalarini (so'zlarini, jumlalarini) aniqlaydigan qoidalar to'plami, uning shakli.

Tilning semantikasi - sintaktik to'g'ri tuzilmalarning ma'nosini, uning mazmunini aniqlaydigan qoidalar to'plami.

Dasturlash tillari rasmiy tillar guruhiga kiradi, ular uchun tabiiy tillardan farqli o'laroq, sintaksis va semantika o'ziga xos tarzda aniqlanadi. Til sintaksisining tavsifiga alifbo ta'rifi va alifbo belgilaridan va sodda konstruktsiyalardan tilning turli konstruktsiyalarini qurish qoidalari kiradi. Buning uchun ular odatda foydalanadilar backus-Naur shakli (BNF) yoki sintaksis diagrammasi... BNFdagi tuzilmaning tavsifi til alifbosi belgilaridan, sodda tuzilmalar nomlaridan va ikkita maxsus belgidan iborat:

· «::=» - "bilan almashtirilishi mumkin" kabi o'qiydi,

· «|» - "yoki" kabi o'qiydi.

Bunday holda, ko'pincha terminal alomatlari yoki terminallar deb ataladigan til alfavitining belgilari o'zgarishsiz qayd etiladi. Ba'zi bir boshqa belgilar orqali aniqlangan til konstruktsiyalari nomlari (terminali bo'lmagan belgilar yoki nonminimalallar) burchakli qavs ichiga olingan ("< », « >»).

BNF misoli

Qurilish qoidalari<Целое>qayd etilgan

BNF quyidagicha ko'rinishi mumkin:

<Целое> ::= <3нак> <Целое без знака> | <Целое без знака>

<Целое без знака> ::= <Целое без знака> <Цифра> | <Цифра>

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

<3нак> ::= + | -

Dizayn ekanligini ko'rsatish uchun<Целое без знака> cheksiz sonli raqamlarni o'z ichiga olishi mumkin, chap tomondan rekursiya qilish qoidasi qo'llaniladi. Ushbu qoidani bir necha marta qo'llash istalgan raqamlar bilan butun sonni qurish imkonini beradi.

Sintaksis diagrammalarida inshootlarni qurish qoidalari yanada ingl. Bunday diagrammada alifbo belgilari oval ramkalardagi bloklarda, tuzilmalar nomlari - to'rtburchaklar ramkalarda va inshootlarni qurish qoidalari uchlarida o'qlari bo'lgan chiziqlar shaklida tasvirlangan. Bundan tashqari, agar chiziq blokga kiritilgan bo'lsa, unda tegishli belgi tasvirlangan tuzilishga kiritilishi kerak. Chiziqni ajratish, strukturani qurishda imkoniyatlar mavjudligini anglatadi. Shakl. 2.1 - bu strukturani tavsiflashning dastlabki ikkita qoidasini aks ettiruvchi sintaksis diagrammasi<Целое>... Diagramma shuni ko'rsatadiki, tamsayı belgi bilan yoki belgisiz yozilishi mumkin va o'zboshimchalik bilan raqamlarni o'z ichiga oladi.



O'z tilining sintaktik konstruktsiyalarini tavsiflash uchun N.Virt sintaksis diagrammalaridan foydalangan, shuning uchun qurilish sintaksisining og'zaki tavsifi uzoq va tushunarsiz bo'lgan hollarda biz sintaksis diagrammalaridan foydalanamiz.

Borland Pascal 7.0 dasturlash tili alifbosiga quyidagilar kiradi.

1. lotin alifbosidagi kichik, katta harflar (a..z, A..Z) va pastki chiziq (_), bu ham ko'p hollarda harf ( kichik va katta harflar farq qilmaydi);

2. raqamlar (0 ... 9);

3. Bir va ikkita belgidan iborat maxsus belgilar:

. ,+ - * / = : < > { } () ^ @ $ #<> <= >= := (* *)

4. Xizmat so'zlari (bu kombinatsiyalar bitta butun deb hisoblanadi va dasturda boshqa imkoniyatlarda ishlatilishi mumkin emas): (misollar)

Sintaksis qoidalariga muvofiq alifbo belgilaridan turli xil konstruktsiyalar quriladi. Ulardan eng oddiyi qurilishdir<Идентификатор>.

Ushbu konstruktsiya dastur ob'ektlari nomlarini (ma'lumotlar maydonlari, protseduralar, funktsiyalar va hk) belgilash uchun juda murakkab tuzilmalarda qo'llaniladi.

Borland Paskalda identifikator lotin alifbosidagi harflar ketma-ketligi (pastki belgini o'z ichiga olgan holda) va raqamlar bo'lib, ular albatta harf bilan boshlanadi.

Identifikatorning sintaksis diagrammasi shakl. 2.2. Qolgan qurilishlar keyingi bo'limlarda muhokama qilinadi. Dasturlash tilining semantikasi uning kompilyatoriga kiritilgan. Shunday qilib, dasturlash tilida yozilgan sintaktik jihatdan to'g'ri dastur, uni mashina ko'rsatmalarining ketma-ketligiga aylantirgandan so'ng, kompyuterni kerakli operatsiyalar bilan ta'minlaydi.

Dastur tarkibi

Borland Pascal dasturi uch qismdan iborat: sarlavha, tavsiflar bo'limi va bayonotlar bo'limi.

  • Dastur sarlavhasi ixtiyoriy, bu xizmat so'zidan iborat dastur va identifikator - dastur nomi.
  • Tavsif bo'limi barcha ishlatilgan tavsiflarni o'z ichiga oladi resurs dasturi(ma'lumotlar maydonlari, muntazam ishlar va boshqalar).
  • Operatorlar bo'limi deb nomlangan narsadan iborat operator qavslariboshlang ... tugaydi va nuqta bilan tugaydi. Dasturning boshqaruv bayonotlari operatorlar qavslari orasida yoziladi, ular maxsus belgi - "" "vergul bilan ajratiladi. Agar vergul oldin kelsa oxiri, keyin nuqta-verguldan keyin "bo'sh" ibora qo'shilgan deb hisoblanadi.
  • Dastur matnida sharhlar mumkin, ular jingalak qavslarga joylashtirilgan.

Ikkita natural sonning eng katta umumiy bo'luvchisini aniqlash uchun Evklid algoritmini amalga oshiradigan dastur.

Dastur misoli; (dastur sarlavhasi)

(tavsif qismi)

Crt-dan foydalanadi;

Var a, b: integer; (o'zgaruvchan deklaratsiya)

(operatorlar bo'limi)

Yozing ("Ikkita natural sonni kiriting:"); (ma'lumotlarni kiritishni so'rab)

Readln (a, b); (qiymatlarni kiriting)

esa a<>b do (loop-bye a.)<>b)

agar a\u003e b bo'lsa, u holda a: \u003d a-b (agar a\u003e b bo'lsa, unda a: \u003d a-b)

boshqa b: \u003d b-a; (aks holda b: \u003d b-a)

Writeln ('Hau katta umumiy bo'linishchi', a); (natijani ko'rsatish)

Oxiri. (dastur oxiri)

Dastur "namuna" deb nomlangan. Bu holda tavsiflash bo'limi faqat o'zgaruvchilarning tavsifini o'z ichiga oladi (2.3 bo'limga qarang). Operatorlar bo'limida dastlabki ma'lumotlarni kiritish, natijalarni hisoblash va chiqarish operatorlari mavjud. Borland Paskal tilida dasturlashning o'ziga xos xususiyatlarini ko'rib chiqishni ma'lumotlarni tavsiflash muammosidan boshlaymiz.

Maqola sizga yoqdimi? Do'stlar bilan bo'lishish uchun: