1. Tizimli dasturiy ta'minotning turlari Tizimli dasturiy ta'minotning turli xil shakllari mavjud, ular quyidagilar: 1. **Korporativ (Enterprise) Ta'minot**: Korporatsiyalar yoki katta kompaniyalar uchun maxsus tizimlar. Ushbu ta'minot investitsiyalarni birlashtiradi, xodimlar bilan faoliyatni boshqaradi, ma'lumotlarini himoyalaydi va qo'llab-quvvatlaydi. 2. **Houm Ti'minot**: Buyurtma loyiha asosida ishlab chiqarilgan va mijozlarga xizmat ko'rsatish uchun maksatga muvofiq shakllangan dastur. 3. **Ma'lumot Tizimi**: Internet operatsiya, ma'lumotlar va saqlashni qo'llabquvvatlash uchun tizim. Masalan, CRM (Mijozlar munosabatlari boshqaruvi), ERP (Kompaniyaning barcha faoliyatlarini birlashtiruvchi ta'minot), va hokazo. 4. **Internet Tizimlari (Web Ta'minot)**: Veb ilovalar uchun ushbu ta'minot vebsaytlar, dasturlar, ma'lumotlar bazalari muhofazasi va boshqa xizmatlarni o'z ichiga oladi. 5. **Mobil Ta'minot**: Telefonda yoki planshetda yoki boshqa qurilmalarda ish ob'yektlarini yoki mobil ilovalarni boshqarish, yaratish va qo'llab-quvvatlash uchun muhim bo'lgan ta'minot. 6. **Fuqarolik Ta'minoti**: O'z mijozlariga xizmat ko'rsatish maqsadida jismoniy hujjatlarni yoki hisobni tekshirish uchun foydalanish mumkin bo'lgan ta'minot. 7. **Korxona Ta'minoti**: Korxona tashkiloti yoki IT tizimi qurilmagan korxonalar uchun tayyorlangan xizmatlar to'plami. Tezroq va yaxshi biznes amalga oshirish uchun xizmatlar yoki dasturlar taklif etish uchun xizmatlar orqali korxonaning barcha sohalari bilan birlashtiriladi. Ushbu turdagi ta'minotlar har biri o'z maxsusliklari va maqsadlari bo'lgan va iste'molining ko'rsatilishi uchun muhim bo'lgan ta'minotlardir. 2. Kompyuter tizimlarini tadqiq qilish. Kompyuter tizimlarini tadqiq qilish tizimli dasturlash sohasida juda muhim bo'lgan harakatdir. Bu, kompyuter tizimlarining uzoq vaqt davomida ishlashini ta'minlash, xato va muammolarini aniqlash, tizimni rivojlantirish va yaxshilash vaqtini taqsimlash, tizimning xavfsizligini yaxshilash va muammoni oldini oladigan bir qator muhim yo'nalishlardan biridir. Quyidagi yo'nalishlarda kompyuter tizimlarini tadqiq etish tavsiya etiladi: 1. **Tizimning faoliyati va ish faoliyati monitor qilish**: Kompyuter tiziminin qanday ish faoliyatini o'rganish, tizim so'rovnoma ta'limotlarini (logs) korish va boshqa monitoring vositalari orqali tizimning davom etishini va xato va uni oldini olishni nazorat qilish lozim. 2. **Performans tahlili:** Tizimga oid ma'lumotlar (masalan, protses sorovlarining vaqtinchalik tahlili) to'plash va tizimning faoliyatini oshirish uchun qanday o'zgarishlar kiritish kerakligini aniqlash. 3. **Xavfsizlik muammosini tadqiq qilish:** Tizim xavfsizligi uchun xavfsizlik dasturlarini o'rnating, tizimning xavfsizlik sohasini tahlil qiling va potentsial xavfsizlik ko'rsatishlarini aniqlang. 4. **Optimal ishlash:** Tizimni rivojlantirish, qo'llab-quvvatlash va sozlash jarayonlarini las-tanlang va tizimni yaxshilash uchun tavsiyalar chiqaring. 5. **Mahsulot qiyosiyati:** Tizimni qanday yaxshilash va ishlab chiqarishni osonlashtirish uchun avtomatlashtirgan yo'nalishlarni o'rganish va shulgacha tizimga chidamni yaxshilash jarayonlarini aniqlash. Kompyuter tizimlarini tadqiq qilish, tasdiqlash va yaxshilashda tizimni rivojlantirish va ko'rsatilayotgan xizmatlar sifatini yaxshilashga yordam beradi, tizim soha mutaxassislarining o'zlashtirishlar va mustahkamlashlarini o'z ichiga oladi. 3. Tizimlarning tasnifi. Tizimli dasturlashda tizimlar turli xil turlarda tasniflanadi. Ba'zi asosiy tizimlar tasnifi quyidagicha bo'ladi: 1. **Standart Tizimlar**: Bu odatda ko'p foydalaniladigan dasturlar va ta'minotlar uchun o'rnatilgan standart tizimlardir. Ular operatsion tizimlar (masalan, Windows, macOS, Linux) va boshqa umumiy xizmatlar bilan kelishadi. 2. **Taqiqlangan Tizimlar**: Tizimlar ko'plab komponentlardan iborat bo'lib, ular xizmatlarni birlashtirishda va integratsiyada ishlatiladi, masalan, korporativ resurslar boshqaruvi (ERP) dasturlari yoki ro'yhatlar boshqarilishi (CMS) dasturlari. 3. **Sifatli Tizimlar**: Biroq ma'lum bir maqsad uchun yaratilgan va o'rnatilgan maxsus tizimlar. Masalan, ma'lumotlar bazasi tizimlari, telekommunikatsiya tizimlari yoki ma'lumotlar himoya tizimlari shu kabi. 4. **Kichik va O'rta Shkala Tizimlar**: Bular bank tizimlari, korporativ IT tizimlari va boshqa yirik shabingizda ishlab chiqarilgan yoki erkin modda o'rnatilgan tizimlardir. 5. **Tezroq(robor) Tizimlar**: Otomatlashtirilgan dasturlash bilan ishlab chiqarilgan, avtomatik amalga oshiradigan va mavjud jarayonlarni yaxshilaydigan tizimlar. Masalan, amaliyot tizimlari yoki ta'sir nazorat tizimlari. Bu tizim turlari faqat bir qancha ko'rinishlarda bo'ladi va har bir tizim turining xususiyatlari va maqsadlari bo'lishi mumkin. Tasnif tizimlarni aniqlab chiqish, o'rganish va rivojlantirish jarayonida foydali bo'ladi, chunki har bir tizim turining xususiyatlari va talablari mavjuddir. 4. Operatsion tizimlar. Operatsion (işletim) tizimlar — bu tizimlar kompyuter va undagi qurilmalar bilan foydalanuvchilar o'rtasida almashinuvni tuzish va boshqarish uchun ishlab chiqarilgan programmni ifodalovchi dasturlardir. Bu tizimlarning asosiy vazifalari kompyuter va boshqa qurilmalar bilan ishlashni organizatsiyalash, tizimni boshqarish, resurslarni topish va ulash, fayllarni boshqarish, xavfsizlikni kuchaytirish, va boshqa operatsiyalarni bajarishdir. Quyidagi mashhur operatsion tizimlar misollarini keltirish mumkin: 1. **Windows**: Microsoft tomonidan yaratilgan va ko'p kompyuterlar tomonidan o'rnatilgan eng mashhur operatsion tizimlardan biri. 2. **macOS**: Apple tomonidan ishlab chiqarilgan va mahsulotlari uchun maxsus operatsion tizim. 3. **Linux**: Bu ochiq manbali operatsion tizim, qulaylik va ishonchka ega va bepuldir. Uning bir nechta turli distributivlari (masalan, Ubuntu, CentOS) mavjud. 4. **iOS**: Apple'ning a'lo qo'llaniladigan mobil tizimi, iPhone va iPad'lar uchun yaratilgan. 5. **Android**: Google tomonidan ishlab chiqarilgan va ko'p Android qurilmalarida ishlab chiqarilgan mobil tizim. 6. **Chrome OS**: Google tomonidan yaratilgan, quyidagi Chromebook bilan ishlab chiqarilgan mobil va kompyuterlar uchun operatsion tizim. 7. **Unix**: Bir necha boshqa operatsion tizimlar, masalan, Solaris, FreeBSD, va AIX Unixning variantlari hisoblanadi. Operatsion tizimlar yangiliklardan foydalangan holda o‘zlarini yangilashadi, takomillashtiradi va foydalanuvchilarga yaxshi samarali ishlovchi tizimlar ta'minlashadi. Bu tizimlar asosiy hisoblanib, barcha dasturlar va xizmatlar yordamida kompyuterlar va ularning munosabatlilari yaxshilaydi. 5. Fayllar va fayl tizimlari. Tizimli dasturlashda fayllar va fayl tizimlari muhim bir ko'rdi yarata oladi. Fayllar ma'lumotni saqlash, boshqarish va amalga oshirish uchun ishlatiladigan ma'lumotlar bo'lishi mumkin. Fayllar tizim ma'lumotlarining saqlanish uslublariga binaen turli xil fayl tizimlaridan foydalanish mumkin. Quyidagi ba'zi eng mashhur fayl tizimlarini keltirish mumkin: 1. **Hierarchical File System (Gerarxik Fayl Tizimi)**: Bu tizimda fayllar ko'rsatilgan paytlardagi bo'limlar yordamida tuziladi. Fayllar hierarkiyadan tashkil topadi: masalan, papkalar, papka ichidagi fayllar va hokazo. 2. **Network File System (Tarmoq Fayl Tizimi)**: Bu tizimda fayllar tarmoq orqali faqat ko'rsatilgan qurilmalarda saqlanadi. Fayllarga tarmoq orqali murojaat qilish yordamida muntazam kirish yoki tahrirlash amalga oshirish mumkin. 3. **Distributed File System (Tarqali Fayl Tizimi)**: Bu tizimda fayllar bir qator kompyuterlarda saqlanadi va o'sha tizim ishlatgan tarmoq orqali haqiqiy faylmuammosiz edi. Bunday tizimlar tarmoqning yuzaga chiqqan qismida joylashgan fayllarga oid ravishda erkinlik (transparency) ta'minlaydi. 4. **Relational File System (Relatsion Fayl Tizimi)**: Bu tizimda fayllar ma'lumotlar manbalariga bog'liq bo'lib, ma'lumotlar bazasidagi yaxshi qo'llaniladi. Fayllar shakl va murojatlar relational bo'lib, ma'lumotlardagi aloqadorlikni ta'minlaydi. 5. **Object-Based File System (Ob'ekt Tizimli Fayl Tizimi)**: Bu tizimda ma'lumotlar obyektlar sifatida saqlanadi. Ushbu fayl tizimi ob'ekt ma'lumotlar bazalari (object databases) va ob'ekt-oriented dasturlash tili (OOPL) bilan yaqin bog'liqdir. Fayllar va fayl tizimlari tizimli dasturlashda ma'lumotlarni saqlash, o'qish- yozish, tahrirlash va boshqa operatsiyalarni bajarishda muhim ahamiyatga ega. Tizimlar foydalanuvchilar va dasturlar orasida ma'lumot almashinuvingiz tufayli fayllar samarali saqlanadi va boshqarilishi mumkin. 6. Dasturiy ta'minot va ularning tasnifi. Tizimli dasturlashda dasturiy ta'minotlar va ularni sinflandirishning katta ahamiyati bor. Dasturiy ta'minotlar dasturlar va tizimlar uchun xavfsizlikni ta'minlash, ma'lumotlar bazalarini boshqarish, fayllarni saqlash va boshqarish, interfeyslarni yaratish, algoritmlarni yozish, va boshqarish, shuningdek, masofaviy yozish, avtomatlashtirish berilgan vazifalarni bajarishda yordam beruvchi vositalarga bog'liq dasturlar va dasturlash modullarini tushunadi. Dasturiy ta'minotlar quyidagi turli xil bo'lishi mumkin: 1. **Ishlab chiqarish vositalari**: Bu turi dasturlar yaratish va tahrirlash jarayonlarini osonlashtirish uchun yordamchi vositalar hisoblanadi. Misol uchun kompilyatorlar, debugerlar, kod qo'shish ediylar va boshqalar bu kategoriyaga kiradi. 2. **Xavfsizlik vositalari**: Ma'lumotlar himoyasi muhim tarmoqdagi dasturlar va tizimlar uchun bo'g'inlarni tartibga solish uchun xavfsizlik vositalari zarur bo'ladi. Antivirus dasturlar, ma'lumotlar himoyasi protokollari, autentifikatsiya dasturlari bu turaga kiradi. 3. **Ma'lumotlar tahlil qilish vositalari**: Ma'lumotlar qatorini tahlil qilish va ma'lumotlar analitikasi dasturlari, BI (Business Intelligence) vositalari misol bo'lib, ma'lumotlarni tadqiq qilish, ma'lumotlardan tahlil qilish yoki grafiklar, buxgalteriyalar, infografiklar yaratish uchun yordamchi bo'lishadi. 4. **Grafik va interfeyslar yaratish vositalari**: Interfeyslarni yaratish uchun dasturiy vositalar, misol uchun grafik dizayn dasturlar (Adobe Illustrator, Sketch), mobil ilovalar uchun interfeys dizayn dasturlari (Figma, Adobe XD) shunday qilib. 5. **Fayl boshqaruv vositalari**: Fayllarni boshqarish yoki ilovalar va kapchalash ishlarini amalga oshirish uchun dasturiy ta'minotlar, masalan, FileZilla (FTP), WinRAR (fayl arxivlash), Dropbox (onlayn saqlash) kabi dasturlar bu qatorda joy olishi mumkin. Dasturiy ta'minotlar tizimli dastur yaratish va uni boshqarish jarayonlarini osonlashtirish va uni samarali ishlatishda o'ta ahamiyatga ega. Bu dasturlar va vositalar tizimlarni yaxshilashda, ma'lumotlarni to'plashda va amalga oshirishda yordam beradi. 7. Dasturlash tizimlari. Tizimli dasturlashda foydalaniladigan dasturlash tizimlari (programming paradigms) — bu dasturlashning belgilangan usullarini, prinsiplarini, va konseptlarini ifodalovchi qoidalar to'plami. Har bir dasturlash tizimi o'zining xususiyatlari, yordamchi vositalari va maslahatlarni o'z ichiga oladi. Quyidagi ba'zi dasturlash tizimlarini ko'rsatish mumkin: 1. **Imperative Programming**: Bu dasturlash tizimi kompyuter o'qib-olish bo'yicha joy inshootlarini ifodalaydi. Dasturlar kompyuterda qanday ish bajarishini belgilaydi va dastur boshqa narsalarni qilib o'lish uchun amrintilari va buyruqlarni amalga oshiradi. Misol uchun C++, Java, Python bu tizimga mansub boladi. 2. **Declarative Programming**: Bu tizimda dastur yozilgan maqsad va natijalarni (sababi emas, qanday amal bajarish kerakligi) belgilaydi. Declarative dasturlar ma'lumotlar bazasi so'rovlariga misol bo'lib, SQL, HTML, CSS bu tizimga misol bo'lishi mumkin. 3. **Object-Oriented Programming (OOP)**: Obyekt-maqsadli dasturlash tizimi klasslar, obyektlar va ularning o'zgaruvchilari va metodlarini ishlatadi. Bu tizim yaxshi qo'llaniladi tajriba olish, kodni qayta istemol qilish va barkamol dasturlarni yaratishda. Java, C++, Python OOP tili misol bo'lib kiradi. 4. **Functional Programming**: Funksional dasturlash tizimi funktsiyalarga ta'sir ko'rsatadi, funktsiyalarni bir xil sintaksisda yozish orqali. Bu tizim murakkab amallar va operatsiyalarni simpllashtiradi va dasturchilarga xato qilish imkonini tezlashtiradi. Haskell, Lisp funksional dasturlash tili misol bo'lishi mumkin. 5. **Event-Driven Programming**: Bu tizimda dasturlar belgilangan hodisalar (event) bo'yicha ish olib boradi va dastur tizimini boshqarishda yoki dasturlardagi voqealarga javob berishda yordam beradi. JavaScript, Visual Basic, Node.js bu tizimga misol bo'lib kiradi. Har bir dasturlash tizimi o'zining xususiyatlari va qulayliklari bilan ajratiladi va kelajakda dasturchilarga moslashtirilgan vazifalarni bajarishda yordam beradi. Dasturchilar tizimlar va maqsadlari bo'yicha eng mos dasturlash tizimini tanlashadi. 8. Kompyuter dasturining komponentlari Tizimli dasturlashda kompyuter dasturining komponentlari quyidagi tartibda ko'rsatiladi: 1. **Kod muharriri**: Bu, dastur kodini yozish va tahrirlash uchun mahsulot. Kod muharriri kompyuter dasturining asosiy qismidir va dastur yozuvchi tomonidan ishlatiladi. 2. **Kompyuter dasturlash til(eri)**: Bu, dasturning yozilishi uchun ishlatilayotgan tildir. Ko'plab til va tizimlar dastur yozishda kullaniladi, masalan, Python, Java, C++, JavaScript kabi. 3. **Kompilyator (Interpreter)**: Bu, kompyuter dasturining yozilgan kodini kompyuter tezkoriklangan tiliga (binary kod) o'giradi. Kompilyator yoki interpretator, dasturni kompyuterda bajarish uchun kerakli vaqti to'ldiradi. 4. **Ma'lumotlar bazasi tizimi**: Ma'lumotlarni saqlash va boshqarish uchun ma'lumotlar bazasini tartibga soluvchi vosita. SQL, MySQL, MongoDB kabi ma'lumotlar bazasi tizimlari foydalanuvchi ma'lumotlarini saqlashda va ularga kirishda yordam beradi. 5. **Grafika va interfeys yaratish vositalari**: Dasturlarda grafika va interfeyslarni yaratish uchun dasturiy ta'minotlar va vositalar. Misol uchun Adobe XD, Figma, Sketch kabi vositalar interfeys yaratishda yordam beradi. 6. **Fayl tizimi**: Fayllarni saqlab, o'qib-olish va yozish vositalari, masalan, kompyuter dasturining fayllar tuzilmasi. Bu tizim fayllarni boshqarishda yordam beradi. 7. **Debuger (xatoni to'g'risi)**: Bu, kodni xatolarini topish va to'g'rilashda yordam beruvchi dastur. Dastur yozish jarayonida xatolarni aniqlashda va tez vaqt va zahoti xatolarni to'g'rilashda xizmat qiladi. Bu komponentlar tizimli dasturlashning turli jarayonlarini osonlashtirish uchun qo'llaniladi va dasturchilarga amalga oshirishni normallashtiradi. Har bir komponent dastur yaratish va uni ishga tushirish jarayonlarida muhim ahamiyatga ega. 9. Protsessor arxitekturasi. Tizimli dasturlashda protsessor arxitekturasi, dasturlarga kompyuterda ishlarini bajarish uchun kerakli protsessor (kompyuter doimiy xotirasi) usullarini aniqlashda muhimdir. Protssorlar kompyuter dasturlari va vinchiqli amallarni bajarishda muhim bir ahamiyatga ega. Quyidagi protsessor arxitekturalari eng mashhur variantlardan ba'zilari: 1. **Von Neumann Arxitekturasi**: Bu arxitektura kompyuter dasturi va xotira birikmalarini birlashtiradi. Protsessor xotiradagi ma'lumotni o'qib, yozib va unga murojatda bulishi mumkin. Bu arxitektura klassik kompyuter arxitekturasi deb ataladi. 2. **Harvard Arxitekturasi**: Bu arxitektura Von Neumann arxitekturasiga o'xshashdir, lekin ma'lumotlarni o'qish va yozish uchun ikkita ajoyiblar (bus) mavjud. Bir joyda instruksiya (komanda) ajoyib, boshqa joyda esa ma'lumotlar ajoyibidan ma'lumotlar olinadi. 3. **RISC (Reduced Instruction Set Computing)**: Bu arxitektura bir qancha oddiy komandalarga (instruksiyalarga) asoslangan protsessorlarni ifodalaydi va oddiy yoziladigan komandalarni qo'llash uchun mahsulot. Bu arxitektura barcha instruksiya bir xil uzunlikda bo'ladi. 4. **CISC (Complex Instruction Set Computing)**: Bu qiyosiy qo'llaniladigan arxitektura kompleks instruksiya qat'iyati protsessorlarini ifodalaydi va oddiy va moslashtirilgan operatsiyalarni amalga oshirish uchun yuqori darajadagi instruksiyalardan foydalanadi. 5. **Multicore Arxitekturasi**: Bu arxitektura bir necha nuqtadan kelib chiqish protsessorlari yoki yadroli protsessorlarni samarali ishlash uchun bir bog'lanuvchi tizimga ishga tushiradi. Protsessor arxitekturasi mahsulotdagi performans, qisqartirish, yuvish va yuqori darajadagi komandalarni qo'llash mumkinligi kabi ko'plab xususiyatlarni ta'sir etadi. Dasturchilar protsessor o'ziga mos ta'sir etadigan dasturlarni yaratishda protsessor arxitekturasini kuzatib borishadi. 10. Struktura, xotira, registrlar. Tizimli dasturlashda struktura, xotira va registrlar kompyuter dasturlarini amalga oshirishda muhim komponentlar hisoblanadi. Ularning har biri kompyuter dasturining ishlashini ta'minlashda va ma'lumotlarni boshqarishda ahamiyatga ega: 1. **Struktura**: Dastur strukturasini ko'rsatish uchun 3 asosiy qismga ega: - **Ishchilar va moslashtiruvchilar**: Dastur bajarilishi kerak bo'lgan amallar, belgilar, yoki ma'lumotlar - **Control Instructions**: Shartlar, sikllar, va bajarilayotgan qadamni tanlash instruksiyalari - **Ma'lumotlar**: Dastur orqali ishlatiluvchi ma'lumotlar, o'zgaruvchilar, va xotiralar 2. **Xotira**: Kompyuterda ma'lumotlar o'zi yoki dastur faoliyati uchun ajratilgan joy. Xotira dastur o'zi uchun vaqtni eslatadi, yordamchi ma'lumotlarni saqlashda, ma'lumot almashishda va amalga oshirishda foydalaniladi. 3. **Rejistrlar**: Rejistrlar kompyuter dasturi uchun ma'lumotni o'z ichida saqlab turadigan kuchli xotiradagi joylar hisoblanadi. Rejistrlar faqat bir xil ma'lumot turi yoki instruksiya (komanda) uchun ishlatiladi. Rejistrlar kompyuter dasturi amaliyati va instruksiyalarini amalga oshirish uchun xavfsiz, tez va samarali bo'lishdi. Struktura, xotira va registrlar kompyuter dasturi o'zining ishlashini aniqlashda muhim bo'lgan qismlar hisoblanadi. Dasturchilar bu komponentlarni samarali dastur yaratishda va dasturlarni boshqarishda ishlatishadi va ular qismlarini dastur yozuvchi tomonidan aniqlash kerak. Bu komponentlar kompyuter dasturlashning asosiy asoslari hisoblanadi va dasturchilar ularga dastur yaratish va ishlashda yordam beradi. 11. Adreslash. Adreslash, tizimli dasturlashda obyektning joylashuvi yoki ma'lumotlarni topish uchun ishlatiladigan qisqartirilgan nomdir. Bu, biror ma'lumotni aniqlash uchun kerak bo'lgan ma'lumotlar o'rnini ifodalovchi o'zgaruvchi yoki ma'lumotlar strukturasi nomi bo'lishi mumkin. Adreslashning muhimligi tizimli dasturlashda, ma'lumotlarni qidirish va ularga murojaat qilish uchun mo'ljallangan usulni beradi. Bunda, ma'lumotlar tuzilmasi tarkibidagi obyektlarning birorini aniqlash uchun foydalaniladi. Bu, ko'plab dasturlash tillarida amalga oshiriladi, masalan, ob'ektlarni identifikatsiya qilish uchun SQL so'rovlari yoki ma'lumotlar strukturasi tili (JSON, XML, yana ko'plab boshqalar). Bu usul ob'ektlar orasida bog'liqlikni ta'minlash va dasturchilarga ma'lumotlarga murojaat qilish imkoniyatini beradi. Adreslash, tizimli dasturlashda obyekt, funksiya yoki ma'lumotni topish uchun amalga oshiriladigan amaldir. Bu amalni o'z ichiga olgan dastur, o'zgaruvchilar, sinflar yoki modullar orqali amalga oshirish mumkin. Masalan, bir obyektdan boshqasiga yoki ma'lumotni o'qib yoki yozish uchun, uni identifikatsiya qilish zarur bo'ladi. Bu, kodni tuzish va uni boshqa komponentlar bilan integratsiyalashni osonlashtiradi. Kod yordamida adreslashning bir qancha usullari mavjud bo'lishi mumkin, masalan: 1. **Funksiyalar orqali:** Boshqa funksiyani chaqirish orqali obyektga murojaat. ```python def salom(): return "Assalomu alaykum" x = salom() # funksiyani chaqiramiz print(x) # "Assalomu alaykum" chiqadi ``` 2. **Obyekt atributlariga murojaat orqali:** Obyektning atributlariga murojaat qilish orqali ma'lumotlarga kirish. ```python class MeningObyektim: def __init__(self): self.x = 10 obyekt = MeningObyektim() print(obyekt.x) # 10 chiqadi ``` 3. **Indeks orqali:** Agar sizda ro'yxat yoki ro'yxat kabi tartiblangan ma'lumotlar bo'lsa, siz indeks orqali ularga murojaat qila olasiz. ```python royxat = [1, 2, 3, 4, 5] print(royxat[0]) # 1 chiqadi ``` 4. **Kalit so'z orqali:** Agar siz bir lug'at (dictionary) yoki lug'atga o'xshash obyektga ega bo'lsangiz, siz kalit so'z orqali murojaat qila olasiz. ```python lugat = {"nom": "John", "yosh": 30} print(lugat["nom"]) # "John" chiqadi ``` Bu usullar sizga tizimli dasturda kerakli ma'lumotlarga murojaat qilishda yordam beradi. Har bir kontekstda qaysi usulni ishlatishni qaror qilish o'zingizga qarab qoladi. 12. Kompilyator. Tizimli dasturlashda kompilyator, kodni yozgan dastur tushunchalarini yoki ko'dini o'qib, uni ma'lumotlarga aylantirish va uni dasturni ishga tushirish uchun interpretaga o'tkazuvchi dasturdir. Bu jarayonning eng muhim qismi, kodni o'qish va uni ma'lumotlar tizimiga o'girishdir. Kompilyatorning bir nechta ustunliklari mavjud: 1. **Ishga tushirish tezligi:** Kompilyator kodni interpretaga o'qitishdan oldin uni o'qib tushunar va uni ma'lumotlar tizimiga o'giradi. Shuningdek, yozilgan kodni uchun takrorlangan muhitda bajarish tezligi oshiriladi. 2. **O'zaro aloqa yo'qotish:** Kompilyator, kodni o'qish va uni ma'lumotlarga aylantirish jarayonida yozilgan kodni o'z ichiga oladi va unga o'zaro aloqani yo'qotadi. Bu, dasturlar o'qish va ishga tushirish jarayonlari davomida o'zgarishlarni ta'minlashda qulaylik yaratadi. 3. **Platforma g'amxo'rligi:** Kompilyator dasturi, tushunchalar ko'rsatilgan platforma (masalan, Windows, macOS, Linux) uchun ma'lumotlarga aylantirilgan kodni yaratadi. Shuningdek, kodning platforma o'zgarishi bo'lmaydi, shuning uchun uni bir platformadan boshqasiga o'tkazish vaqti to'xtatiladi. 4. **Xavfsizlik va maxfiylik:** Kompilyator, yozilgan kodni dastur foydalanuvchilari uchun tarjima qiladi, shuningdek, kodning ochiq matnni yozish va uni yopish mumkin bo'lgan interpretaga nisbatan xavfsizligi va maxfiylikni ta'minlaydi. Bular kompilyatorning muhim ustunliklari, lekin u ko'p bo'lmagan maqbul muammo bo'lishi mumkin. Masalan, kompilyatorga ega bo'lgan dastur kodni ishga tushirishdan oldin kodning to'liq yozilgan va to'g'ri ishlashi kerak. Bu esa dasturni o'zgartirish va yangilashning so'nggi o'rinlarini olishni qiyinlashtirishi mumkin. Buning bilan birga, kompilyator dasturlari umumiy holda o'zlarini ma'lumotlarga aylantirish va ishga tushirish jarayonlarida boshqa dasturlardan yengilroq va cheklanmaganroq bo'lsa, ularda boshqa qator muammolar paydo bo'ladi. 13. Dasturni translyatsiya qilish sxemasi. Tizimli dasturlashda, dastur kodining amalga oshirilish jarayonini tushunish uchun uni translyatsiya qilishning og'ir jarayonlari mavjud. Bu jarayonlarni umumlashtirilgan tushuncha quyidagi bosqichlar orqali tasvirlash mumkin: 1. **Yozish (Writing):** Dastur yozilganda, dastur uchun kod matni yaratiladi. Bu kod matni odatda ma'muriyat va funksiyalarni ifodalaydi. 2. **Tahlil (Lexical Analysis):** Bu bosqichda, dastur kod matni lexemes (lexemalar)ga bo'linadi. Lexema, dastur tili bo'yicha tushunchalardan iborat eng kichik bo'lgan betakror qator. Bu bosqichda, blanklar, operatorlar, so'zlar va raqamlar kabi lexemalar aniqlanadi. 3. **Tasni (Parsing):** Tasni, dastur kodini syntactic structure (sintaksis strukturasiga) ko'chirishni o'z ichiga oladi. Bu bosqichda, dastur tili bo'yicha yozilgan kod sintaksis qoidalarga mos kelishi tekshiriladi. Agar kodning sintaksisida xato yoki aniqsizlik topilsa, tashqi tushunchalar (parse error) yuzaga keladi. 4. **Tafsilotlar (Semantic Analysis):** Bu bosqichda, sintaksis tekshirilgandan so'ng, kodni ma'naviy tahlil qilinadi. Bu, dasturni kodini to'g'ri ifodalash va uni to'g'ri ishga tushirish uchun o'zgaruvchilar, funksiyalar va obyektlar kabi dastur tili yordamida ifodalangan obyektlarga murojaat qilishni o'rganadi. 5. **Translyatsiya (Translation):** Bu jarayonning asosiy bosqichi. Bu bosqichda, dastur kodining natijaviy maqomga o'girilish jarayonlari amalga oshiriladi. Bu jarayonlar tarjima (translation) va bajarish (execution) jarayonlarini o'z ichiga oladi. 6. **Bajarish (Execution):** Bajarish jarayonida, tarjima qilingan dastur kodining ma'lumotlar tizimi orqali amalga oshiriladi. Bu natijada, dastur ma'lumotlarni o'qish, yozish, hisoblash va ma'lumotlar bilan amalga oshirish jarayonlarini amalga oshiradi. Bu bosqichlar translyatsiya jarayonining asosiy qismi hisoblanadi. Bu bosqichlar to'g'risida tushunchangiz borligi uchun, siz dastur kodining qanday ishlab chiqilganligi va uni dastur tili yordamida nima anglatishni tushunishingiz mumkin. 14. Kompilyatsiya fazalari. Tizimli dasturlashda kompilyatsiya, kodning dastur tili yordamida tuzilgan sintaksis va ma'noda tekshirilishi, uni masofaviy ma'lumotlar omboriga aylantirilishi va keyin amalga oshirilish jarayonlarini o'z ichiga oladi. Kompilyatsiya jarayoni odatda quyidagi fazalarda amalga oshiriladi: 1. **Lexical Analysis (Lexema tahlili):** Bu fazoda, dastur kodining matni yagona lexemalarga bo'linadi. Lexemalar, dastur tili bo'yicha qoidalarga muvofiq belgilangan yozuvlarning eng kichik birliklari. Misol uchun, `if`, `else`, `while`, `int`, `float` kabi so'zlarni yoki raqamlarni (masalan, `123`, `3.14`) yagona lexemalar deb hisoblash mumkin. 2. **Syntactic Analysis (Sintaksis tahlili):** Bu fazoda, lexemalar sintaksis strukturasi bo'yicha tekshiriladi. Ya'ni, dastur kodining sintaksis to'g'ri bo'lishi uchun qoidalarga amal qilish tekshiriladi. Agar sintaksisda xato aniqlansa, tashqi tushuncha (parse error) chiqadi. 3. **Semantic Analysis (Ma'naviy tahlil):** Bu fazoda, dastur kodining ma'naviy to'g'ri bo'lishi tekshiriladi. Bu, o'zgaruvchilar, funksiyalar, operatorlar va boshqa tushunchalar uchun to'g'ri kontekstda bo'lishini tekshirishni o'z ichiga oladi. Agar xato yoki aniqsizliklar aniqlansa, dastur kompilyator tomonidan xabar yoki xato bildiradi. 4. **Optimization (Optimizatsiya):** Bu fazoda, dastur kodining amalga oshirish tezligini oshirish uchun avtomatik optimallashtirishlar amalga oshiriladi. Misol uchun, qo'shimcha kodni olib tashlash, katta ifoda yig'indisini yengillashtirish va boshqalar. 5. **Code Generation (Kod yaratish):** Bu fazoda, dastur kodining natijaviy maqomga o'girilish jarayonlari amalga oshiriladi. Bu natijada, ma'lumotlar ombori va instruksiyalar ma'lumotlar tizimi bo'yicha amalga oshirish uchun yaratiladi. Natijaviy kod amaliyot o'chirilishga tayyor bo'ladi. Har bir fazada xato aniqlansa, kompilyator tomonidan diagnos qilinadi va dastur yozuvchisi uchun xabar yoki xato bildiriladi. Tizimli dasturlashda, kompilyatsiya fazalari kodning yordamida sodda va to'g'ri ishlashini ta'minlashda muhim ahamiyatga ega. 15. Formal til va formal grammatikaning asosiy tushunchalari. Tizimli dasturlashda formal til va formal grammatika tushunchalari, dasturlar yozishda qo'llaniladigan formal usullarni ifodalaydi. Bu usullar dastur tili, sintaksis, va ma'naviy tahlilning qanday ifodalanganligi haqida ma'lumot beradi. Quyidagi tushunchalarga e'tibor bering: 1. **Formal Til (Formal Language):** Formal til, ma'lum bir tuzilishga ega bo'lgan belgilangan elementlardan iborat tilda yozilgan dastur tili bo'lib, unga xos qoidalarga amal qiladi. Formal tillar va ularning qoidalari, dastur yozuvchilari tomonidan dastur yozishda qo'llaniladi. Formal tillar, ma'lumotlarni kategoriyalar va huquqni ifodalash, kompilyatorlar, avtomatlar va boshqa formal modellar, shuningdek, dasturlar va ma'lumotlar bazalari uchun ishlatiladi. 2. **Formal Grammatika (Formal Grammar):** Formal grammatika, formal til yordamida yozilgan dastur tili uchun qo'llaniladigan sintaksis va ma'naviy tahlilning qoidalari va belgilanishi. Bu, dastur tili bo'yicha yozilgan kodning sintaksisi va ma'naviy to'g'ri ishlovchi elementlarni aniqlash uchun kerakli qoidalarni belgilaydi. Formal grammatika, dastur tili yordamida yozilgan kodning to'g'ri va mavzuli ishlovchisini ta'minlashda muhim ahamiyatga ega. Formal til va formal grammatika quyidagi tushunchalarni o'z ichiga oladi: - **Alfabet (Alphabet):** Formal tilning tashkil qilgan belgilardan iborat to'plami. - **So'zlar (Words):** Formal tilning ma'noyatcha va sintaksisni ifodalaydigan belgilangan qatorlar. - **Sintaksis (Syntax):** Formal grammatika yordamida belgilanadigan belgilangan qoidalar to'plami, dastur kodining to'g'ri sintaksisiga rioya qiladi. - **Ma'na (Semantics):** Formal tilning ma'naviy tahlili, dastur kodining to'g'ri ishlovchi ma'noyatcha elementlarini aniqlaydi. - **Axborot (Information):** Formal til yordamida yozilgan dastur kodining o'qilishi va ifodalashini ta'minlashda ishlatiladi. Formal til va formal grammatika, dastur tili yordamida yozilgan kodning to'g'ri va mavzuli ishlovchisini ta'minlashda muhim ahamiyatga ega. 16. Sintaksis va semantika. Tizimli dasturlashda sintaksis va semantika dastur tili yordamida yozilgan kodning aniq va to'g'ri bo'lishini ta'minlashda muhim rollarga ega. 1. **Sintaksis:** Sintaksis, dastur kodining qanday yozilishi kerakligini belgilovchi formal qoidalarning to'plamidir. Bu qoidalarga amal qilish orqali, dastur yozuvchilari yozgan kodning to'g'ri sintaksisini ta'minlaydilar. Sintaksisni buzuvchi yoki xato yozilgan kodlar kompilyator tomonidan aniqlanadi va diagnos qilinadi. Misol uchun, bir dastur tilida funksiya (function) tuzilishi quyidagi sintaksisni talab qiladi: ``` def funksiya_nomi(parametr1, parametr2): # funksiya tanasi return natija ``` Bu sintaksisga mos kelmagan kodlar sintaksis xatosi deb taniladi va kompilyator tomonidan aniqlanadi. 2. **Semantika:** Semantika, dastur kodining ma'noda to'g'ri bo'lishini ta'minlashda muhimdir. Bu esa dastur yozilganligining to'g'ri maqsadlarga mos ravishda amalga oshirilishini ta'minlaydi. Semantik xato, sintaksisni buzgan bo'lsa ham, dastur kodining koding ravishda to'g'ri ishlay olmayishi mumkin. Misol uchun, bir funksiya ichida `return` bayonoti to'g'ri ko'rsatilmasa yoki xato ma'lumotlar o'rgani (variable) ishlatilsa, bu semantik xato hisoblanadi. Sintaksis va semantika, dastur yozuvchilari uchun birinchi bo'lib, kodlarini to'g'ri yozishda va ishga tushirishda kritik ahamiyatga ega. Sintaksis va semantika qoidalari, dastur kodining to'g'ri va ishlovchi bo'lishini ta'minlashda yordam beradi, shuningdek, kodning qo'llanilganligini oshiradi va dastur kodini o'qib tushishda dastur tili modifikatsiyalarini osonlashtiradi. 17. Tillar va grammatikaning tasnifi Tizimli dasturlashda tillar va grammatikaning tasnifi, dastur tili turlari va ularning sintaksis va semantika qoidalari bo'yicha turli xil sinflandirishlarga asoslangan. Quyidagi bosqichlar tizimli dasturlashda tillar va grammatikaning tasnifi haqida ko'proq ma'lumot beradi: 1. **Dastur Tillari Turli xil dastur tillari mavjud bo'lgan, ularning har biri ma'lumotlarni ifodalash va amalga oshirish usullari bo'yicha maxsus qoidalarga ega:** - **Prosedural Tiller:** Bu turdagi tillar dasturlashdagi boshlang'ich dasturlash tili sifatida bo'lib, amalga oshirish jarayonlarini tartibga soluvchi operatsiyalar, funksiyalar va ko'rsatkichlar kabi vositalar yordamida dastur kodini bajarishga asoslanadi. Misol uchun, C, Pascal, va Fortran tillari bunga misoldir. - **Obyektorientirovannye Tiller:** Bu turdagi tillar dastur kodini obyektlar va ularning o'zlarini metodlari orqali ifodalaydigan obyektlar jamlanmasiga asoslanadi. Bu turdagi tillar dastur kodini qulay, organizatsiyalangan va aniq bo'lishga imkon beradi. Python, Java va C++ obyektorientirovannye tillarga misol bo'lishi mumkin. - **Funksional Tiller:** Bu turdagi tillar dastur kodini funksiyalarga va o'zgaruvchilarga asoslanadi. Funksiyalar matematik funksiyalarga o'xshash, uni alohida joylashuvda yozish va ulardan foydalanish asoslanadi. Lisp, Haskell, va Scala funksional tillarga misol bo'lishi mumkin. - **Logikaviy Tiller:** Bu turdagi tillar dastur kodini if-then-to'g'ri qoidalari asosida tuzilgan dasturlash tili bo'lgan. Bu, savollar va yechimlarni ifodalash uchun xususiy bo'lishi mumkin. Prolog logikaviy tilga misol bo'lishi mumkin. 2. **Grammatika Tasnifi: Tillarning sintaksis va semantika qoidalari bo'yicha turli xil grammatika turlari mavjud:** - **Formal Grammatika:** Formal grammatika, formal tillar yordamida yozilgan dastur kodini ifodalash uchun belgilangan sintaksis va semantika qoidalarning to'plamidir. Bu turdagi grammatika, dastur kodini sintaksis va ma'naviy to'g'ri bo'lishini ta'minlashda foydalaniladi. - **Kontekstual Grammatika:** Kontekstual grammatika, belgilangan sintaksis va semantika qoidalarni amal qilishda muhitning belgilanishi yoki tariflanishi mumkin bo'lgan til turlari uchun ishlatiladi. - **Regulyarni Grammatika:** Regulyarni grammatika, dastur kodini ifodalashda ishlatiladigan belgilangan kalit so'zlar yoki alifbo elementlarining belgilanishi uchun ishlatiladi. Bu grammatika turida yozilgan til Yuzlab so'zlar, matematik ifodalar va boshqa qismlar uchun mos keladi. - **Bezkontekstual Grammatika:** Bezkontekstual grammatika, sintaksis va semantika qoidalarning barcha qatorlari uchun belgilangan bo'lgan formal tili yordamida yozilgan dastur kodini ifodalashda foydalaniladi. Bu turdagi grammatika, tilning qo'llanilgan ma'naviy va sintaksis qoidalari bo'yicha yoziladi. Tillar va grammatikaning tasnifi, dastur yozishda foydalaniladigan turli xil tuzilish va qoidalarga ega bo'lgan formal tillarning asosiy sinflandirishlari bo'yicha ta'rifi beradi. Bu, dastur tili yordamida yozilgan kodni to'g'ri, aniq va to'g'ri maqsadlarga mos ravishda amalga oshirish uchun muhimdir. 18. Leksik tahlil va sintaktik tahlil. Tizimli dasturlashda leksik tahlil (lexical analysis) va sintaktik tahlil (syntax analysis) kodning tahlil (analysis) jarayonlaridir. Bu jarayonlar kodni yozgan dastur yozuvchisining yozgan kodini dastur tili qoidalari va sintaksisiga mos ravishda tahlil qilishni ta'minlaydi. Quyidagi qismlarda har bir tahlilning maqsadi va asosiy vazifalari ta'riflangan: 1. **Leksik Tahlil (Lexical Analysis):** - **Maqsad:** Leksik tahlilning maqsadi, kod yozilgan dastur yozuvchisining yozgan kodini yagona lexemalar (tokens) bo'yicha ajratib berishdir. Bu lexemalar, dastur tili bo'yicha belgilangan qoidalarga muvofiq yozilgan dastur yozuvchisining eng kichik to'plamlaridir. - **Vazifalar:** - Dastur kodini bo'sh joy, operatorlar, o'zgaruvchilar, sonlar, so'zlar kabi lexemalarga bo'lib ajratib berish. - Blanklar va kommentarlar kabi ma'nasiz elementlarni e'tiborsiz qabul qilish. - Lexemalarning turini va ma'nasini aniqlash. - Aniqlangan lexemalarni dastur yozuvchisi uchun ko'rsatmalar (tokens) ro'yhatida saqlash. 2. **Sintaktik Tahlil (Syntax Analysis):** - **Maqsad:** Sintaktik tahlilning maqsadi, kod yozilgan dastur yozuvchisining yozgan kodini sintaksis qoidalari bo'yicha tekshirish va tark etishdir. Bu jarayon dastur tili qoidalari bo'yicha to'g'ri yozilgan kodni aniqlash va syntactic structure (sintaksis strukturasiga) ko'chirishni ta'minlaydi. - **Vazifalar:** - Lexemalar (tokens) ro'yhatini sintaksis qoidalari va sintaksis strukturasi bo'yicha tekshirish. - Aniqlangan sintaksis xatolarni (syntax errors) aniqlash va dastur yozuvchisiga xabar berish. - Agar kod sintaksis to'g'ri bo'lsa, sintaksis strukturasi bo'yicha kodning ma'nasini aniqlash. Ko'p mashhur dastur tillarining (masalan, Python, C++, Java) kompilyatorlarida leksik va sintaktik tahlil o'zaro aloqa qilib boriladi. Leksik tahlil syntactic analysis (sintaktik tahlil) jarayonidan oldin amalga oshiriladi, chunki sintaktik tahlil uchun yozilgan kodning lexemalari (tokens) kerak. Leksik tahlil natijasida aniqlangan lexemalar sintaktik tahlil orqali sintaksis qoidalari bo'yicha tekshiriladi. Natijada, kodning to'g'ri va to'g'ri ishlovchi bo'lishi ta'minlanadi. 19. Sintaksis tahlilning sinflari Tizimli dasturlashda sintaksis tahlili turli sinflardagi bo'lishi mumkin, ularning har biri dastur tili sintaksisini tekshirishda o'z vazifalarini bajaradi. Quyidagi sinflar sintaksis tahlilining asosiy turini ifodalaydi: 1. **Top-down Parser (Yuqoriga qarab tahlilchi):** Bu sintaksis tahlilning bir turidir, u sintaksis tahlilini tepadan pastga (top-down) qo'llaydi. U holda, tahlilchi dastur tili qoidalari va sintaksis strukturasi bo'yicha yozilgan dastur kodini boshlang'ich sintaksis elementlaridan boshlab tahlil qiladi va keyin qadam qadam bilan pastga (pastga) yoki ko'zdan kechadi. 2. **Bottom-up Parser (Pastdan yuqoriga tahlilchi):** Bu sintaksis tahlilning ikkinchi turidir, u pastdan yuqoriga (bottom-up) qo'llanadi. Bu tahlilchi dastur kodini eng yolg'iz sintaksis elementlaridan boshlab, kodning boshlang'ich elementlaridan boshlab boshlanadi va keyin yuqoriga (yuqoriga) yoki qadami qadam bilan ko'zdan kechadi. 3. **Recursive Descent Parser (Qayta tikish tahlilchi):** Bu tahlilchi sintaksis tahlilining yana bir turidir, u dastur tili sintaksisini qayta tikish (recursive descent) usuli asosida tekshiradi. Bu tahlilchi rekursiv funksiyalar yordamida dastur kodini tahlil qiladi. Har bir sintaksis qismi uchun alohida funksiya mavjud bo'ladi. 4. **LL Parser (Left-to-right, leftmost derivation):** Bu sintaksis tahlilning boshqa turidir, u kodni o'qishda o'ngdan chapga (left-to-right) qo'llaniladi va dastur kodini boshlang'ich tushunchalardan boshlab tahlil qiladi. Bu tahlilchi yuqoriga qarab tahlilchiga o'xshash bo'lsa, ammo uni qo'llash tartibi pastdan yuqoriga qarab bajariladi. 5. **LR Parser (Left-to-right, rightmost derivation):** Bu sintaksis tahlilning ikkinchi boshqa turidir, u kodni o'qishda o'ngdan chapga (left-to-right) qo'llaniladi va dastur kodini boshlang'ich tushunchalardan boshlab tahlil qiladi. Bu tahlilchi pastdan yuqoriga tahlilchi bilan o'xshab, ammo o'ngdan chapga yuqoriga tahlilchi bilan o'xshash bo'lgan tartibda tahlil qiladi. Har bir sintaksis tahlil sinfi dastur kodini sintaksis qoidalari bo'yicha tekshiradi va ma'naviy tahlilini amalga oshiradi. Ularning har biri o'zining afzalliklari va noyobliklari mavjud bo'lib, ular ma'lum bir dastur tilining maqsadlari va talablari bo'yicha foydalaniladi. 20. Chekli avtomat Tizimli dasturlashda "chekli avtomat" (finite automaton) dastur tili tahlilining bir qismini tashkil etadi. U dastur yozuvchisining sintaksisini tahlil qilishda ishlatiladi va kodning boshlang'ich tushunchalarni aniqlash va tushuntirishda o'z vazifasini bajaradi. Chekli avtomatning (FA) asosiy elementlari quyidagilardan iborat: 1. **Holatlar qatori (States):** Bu avtomatning murakkab qismlaridan biri. Uning har bir holati dastur yozuvchisining kodning biror ma'nodagi aloqasini ifodalaydi. 2. **Alfabet (Alphabet):** Dastur tili bo'yicha yozilgan belgilangan elementlarni o'z ichiga oladi. Bu belgilar dastur yozuvchisining ishlatgan belgilar to'plamidan iborat bo'ladi. 3. **Boshlang'ich holat (Start State):** FA tahlilining boshlanishi uchun kerak bo'lgan boshlang'ich holatni belgilovchi holat. 4. **Qabul qiluvchi holatlar (Accepting States):** FA tahlilining bajarilgan holatlari, ya'ni dastur yozuvchisi tomonidan kodni to'g'ri tanilgan va qabul qilindi deb tanilgan holatlar. 5. **Ulashish funksiyalari (Transition Functions):** Har bir holatdan keyingi holatga o'tishni va qanday belgilangan belgilangan belgilar bilan o'tishni aniqlaydigan funksiyalar. Chekli avtomat dastur yozuvchisining sintaksisini tahlil qilishda quyidagi jarayonlarni bajaradi: 1. **Lexical Analysis (Leksik tahlil):** Dastur yozuvchisi tomonidan yozilgan kodning lexemalarini yoki belgilarini aniqlash uchun chekli avtomat ishlatilishi mumkin. 2. **Tokenization (Kodlarning Tokenizatsiyasi):** Lexemalar belgilangan bo'lsa, ularga mos keladigan tokenlar tuziladi. 3. **Syntax Analysis (Sintaksis Tahlili):** Dastur kodini sintaksis qoidalari bo'yicha tekshirishda chekli avtomatdan foydalanilishi mumkin. Har bir syntax elementini belgilash va yechimini aniqlash uchun. Chekli avtomat sintaksis tahlili va leksik tahlilning boshqa ko'rsatkichlaridan biri bo'lib, u dastur yozuvchisining sintaksisini va lexemalarini tahlil qilishda qulaylik yaratadi. 21. Deterministik bo'lmagan va deterministik avtomat Tizimli dasturlashda, deterministik va deterministik bo'lmagan avtomatlar, avtomat tahlilining turli xil usullarini ifodalaydi. Bu avtomatlar dastur tili tahlilida, lexemalar (belgilar) va sintaksis elementlarini tanish va aniqlashda ishlatiladi. 1. **Deterministik Avtomat (Deterministic Finite Automaton - DFA):** - Bu avtomatning har bir holati (state) uchun har bir belgilangan kirish belgisi (input symbol) uchun faqatgina bir o'tish funksiyasi mavjud. - Bir holatdan boshqa faqatgina bir o'tish yoki o'zini qaytarish amalga oshirilishi mumkin. - Agar avtomat holati bir qator belgilardan iborat bo'lsa, u deterministik avtomat deyiladi. - Deterministik avtomatlar qiyinlik bilan aniqlangan holatlar uchun qo'llaniladi. 2. **Deterministik bo'lmagan Avtomat (Nondeterministic Finite Automaton NFA):** - Bu avtomatda, har bir holat uchun bir nechta o'tish funksiyalari (transitions) mavjud bo'lishi mumkin. - Avtomat bir belgi kelsa, undan keyingi holatni aniqlashda bir nechta o'tishlardan biri (yoki bir nechta) tanlanishi mumkin. - Holatlardan bir nechtasida qaytib bo'lish (epsilon transitions) ham bo'lishi mumkin. - Nondeterministik bo'lmagan avtomatlar, deterministik bo'lmagan holatlarni aniqlashda qo'llaniladi. Tizimli dasturlashda, leksik tahlil (lexical analysis) va sintaksis tahlili (syntax analysis) uchun avtomatlar keng qo'llaniladi. Deterministik va deterministik bo'lmagan avtomatlar, dastur kodini tahlil qilishda, lexemalarni aniqlashda va sintaksisni tekshirishda foydalaniladi. Har bir avtomat turining o'zining afzalliklari va cheklovchi kuchlari mavjud bo'lib, ular dastur tili tahlilida yoki boshqa maqsadlarda foydalanish uchun mos ravishda tanlanishi kerak. 22. Kod yaratish. Tizimli dasturlashda kod yaratish, dastur yozuvchisining yozgan kodning maqsadiga mos ravishda amalga oshiriladi. Kod yaratish jarayoni, dastur tili sintaksis va semantikasiga rioya qiladi va kodning ishlovchi va to'g'ri bo'lishini ta'minlaydi. Quyidagi bosqichlar kod yaratishda amalga oshiriladi: 1. **Dastur Maqsadini Tushunish:** Kod yaratishning birinchi qadamidir, dastur yozuvchisining maqsadini va talablarni tushunish. Bu, dastur yozuvchisi uchun kerakli funksional va ma'naviy talablarni aniqlashga yordam beradi. 2. **Algoritmlar va Algoritmlar Strukturasini Tanlash:** Dastur yozuvchisi tomonidan amalga oshirilishi kerak bo'lgan amallarni va operatsiyalarni aniqlash, shuningdek, ularni bajarish uchun kerak bo'lgan algoritmlar va algoritmlar strukturasini tanlash. Bu qadam, dastur maqsadiga muvofiq kerakli amallarni amalga oshirishda yordam beradi. 3. **Dastur Tili va Platformasini Tanlash:** Kod yaratishda foydalaniladigan dastur tili va platformasini tanlash. Bu, dastur tili, o'zgarmas va o'zgarmasiz o'zgarishlarni aniqlashga va dastur yozuvchisining dastur yozishdagi qulayliklariga ta'sir qiladi. 4. **Kodningni Boshlash:** Dastur yozuvchisining maqsadiga muvofiq, kodningni boshlash. Bu dastur yozuvchisi uchun foydalaniladigan kodni yozish, komponentlarni aniqlash va ularni bir-biriga bog'lashni o'z ichiga oladi. 5. **Debug Qilish va Testlash:** Kod yaratish jarayonida kodni debug qilish va testlashning muhim ahamiyati bor. Bu, kod yozuvchisi tomonidan yozilgan kodning to'g'ri va ishlovchi bo'lishini ta'minlash uchun kerakli bo'lgan qadamdir. 6. **Optimizatsiya va Takrorlanish:** Kod yaratishdan so'ng, kodni optimallashtirish va takrorlanishning muhim ahamiyati bor. Bu, kodni ishlovchi va daromadni oshirishga yordam beradi. Kod yaratish, dastur yozuvchisi tomonidan yozilgan kodni to'g'ri va mavzuli ishlovchi qilishni ta'minlashda muhim ahamiyatga ega. Bu jarayon, dastur tili va platformasi, dastur yozuvchisi uchun maqsad va talablarga mos ravishda amalga oshirilishi kerak. 23. Kod yaratish usullari. Tizimli dasturlashda kod yaratishda bir nechta usullar mavjud. Bu usullar, dastur yozuvchisining maqsadi, dastur tili, platforma va dastur yozilayotgan loyiha kengligiga qarab o'zgaradi. Quyidagi, kod yaratishda keng qo'llaniladigan usullarni ta'riflashim mumkin: 1. **Imperativ (Procedure-Oriented) Yoki Protsedural Yondashuv:** Bu usulda, dastur yozuvchisi biror qanday amalni qilish uchun kerakli operatsiyalarni tartibga soladi. Dastur kodining qat'iy tartibi va boshidan oxirigacha o'tish mumkin. Bu usul bilan kod tuzilishini o'rganish oson va qulay bo'lishi mumkin, lekin katta dasturlar o'rganishni va saqlashni qiyinlashtirishi mumkin. 2. **Obyektga yo'naltirilgan (Object-Oriented) Yondashuv:** Bu usulda, dastur yozuvchisi obyektlarni aniqlab, ularga xususiyatlar va metodlar (funksiyalar) yaratadi. Har obyekt o'z xususiyatlari bilan biror turdagi boshqa obyektlar bilan aloqada bo'ladi. Bu usul o'rganishni va kodni saqlashni osonlashtradi. 3. **Funksional (Functional) Yondashuv:** Bu usulda, dastur yozuvchisi funksiyalarni asosiy yaratish vositalari sifatida foydalanadi. Dastur tuzilishida funksiyalar o'zgaruvchilardan o'zgarmaydigan amallar o'zlashtiradi. Bu usul, o'zgaruvchilarni tark etish va dastur tuzilishida amallar qonuniyatini osonlashtirishga yordam beradi. 4. **Deklarativ (Declarative) Yondashuv:** Bu usulda, dastur yozuvchisi belgilangan natijani olish uchun kerakli amallarni aytadi, ammo dastur tuzilishida qanday ravishda amalga oshirilishini belgilamaydi. Misol uchun, SQL so'rovlari bu usulga misol bo'lishi mumkin. 5. **Komponentlar (Component-Based) Yondashuv:** Bu usulda, dastur yozuvchisi dastur tuzilishida modullarga (komponentlar) bo'lib ajratiladi, har bir modul o'zining maqsadiga mos ravishda amalga oshiriladi. Komponentlar o'zaro aloqadagi modullar bilan bog'lanadi. Har bir usulning o'zining afzalliklari va chegaralari mavjud bo'lib, qaysi usulni qo'llashning dastur loyihasi uchun eng muhim va mos ravishda bo'lganligini aniqlash uchun kerak. Bundan tashqari, ko'p dastur yozuvchilari birlashgan usullardan foydalanishadi, masalan, obyektorientirovanniy va funksional yondashuvni bir vaqtda. 24. Kod yaratishning umumiy tamoyillari Tizimli dasturlashda kod yaratishning umumiy tamoyillari quyidagilardan iborat bo'ladi: 1. **Maqsad va Talablar:** Kod yaratishning birinchi qadamidir, dastur yozuvchisi tomonidan maqsadlarni va talablarni tushunish. Bu, dastur yozuvchisining kerakli funksional va ma'naviy talablarni aniqlashga yordam beradi. 2. **Dastur Tili va Platforma:** Kod yaratishda foydalaniladigan dastur tili va platformani tanlash. Bu, dastur yozuvchisining maqsadi va talablari bo'yicha mos ravishda yozilgan kodni amalga oshirish uchun muhimdir. 3. **Algoritmlar va Algoritmlar Strukturalari:** Dastur yozuvchisi tomonidan amalga oshirilishi kerakli amallarni aniqlash, shuningdek, ularni bajarish uchun kerakli bo'lgan algoritmlar va algoritmlar strukturalarini tanlash. Bu qadam, dastur maqsadi va talablari bo'yicha muhim algoritmlarni amalga oshirishda yordam beradi. 4. **Kodning Usuli va Arxitektura:** Dastur yozuvchisi tomonidan kerakli kodni yozish, komponentlarni aniqlash va ularni bir-biriga bog'lashni o'z ichiga oladi. Kodning usuli, dastur yozuvchisi tomonidan yozilgan kodni to'g'ri va mavzuli ishlovchi bo'lishni ta'minlashda muhim ahamiyatga ega. Arxitektura, dastur tuzilishini va modullarni tartibga solishda yordam beradi. 5. **Debug va Test:** Kod yaratish jarayonida kodni debug qilish va testlashning muhim ahamiyati bor. Bu, kod yozuvchisi tomonidan yozilgan kodning to'g'ri va ishlovchi bo'lishni ta'minlash uchun kerakli bo'lgan qadamdir. 6. **Optimizatsiya va Takrorlanish:** Kod yaratishdan so'ng, kodni optimallashtirish va takrorlanishning muhim ahamiyati bor. Bu, kodni ishlovchi va daromadni oshirishga yordam beradi. Umumiy ravishda, kod yaratish jarayoni dastur yozuvchisi tomonidan yozilgan kodning to'g'ri va mavzuli ishlovchi bo'lishni ta'minlashda muhim ahamiyatga ega. Bu jarayon, dastur tili va platformasi, dastur yozuvchisi uchun maqsad va talablarga mos ravishda amalga oshirilishi kerak. 25. Xotirani taqsimlash tamoyillari. Tizimli dasturlashda xotirani taqsimlashning muhim tamoyillari quyidagilardan iborat: 1. **Xotira Mavzusi:** Xotira mavzusi, dastur yozuvchisining amaliyotini qanday o'lchashni belgilaydi. Ma'lumotlar o'lchamini, xotira to'plamini, yuk kiritish va olish tezligini ta'sirlayadi. 2. **Xotira Turini Tanlash:** Xotira turini tanlash, dastur yozuvchisining kerakli amalni bajarish uchun kerakli xotira turi. Bu shu jumladan, massivlar, qatorlar, yig'indilari, bog'lanuvchilar, va qo'shimcha xotira turini o'z ichiga oladi. 3. **Xotira Mavjudligi va Muhimlik Darajasi:** Dastur yozuvchisining ish unumdorligini va dastur ishga tushishi davrida kerakli ma'lumotlar xotirasiga murojaat qilishning tezligini ta'minlashda muhimdir. Xotira mavjudligi va muhimlik darajasi, dastur yozuvchisining daromad va ishlovchi bo'lishini ta'minlaydi. 4. **Xotira Kirish va Chiqish Tezligi:** Xotira kirish va chiqish tezligi, dastur yozuvchisining ma'lumotlar olish va yuklash jarayonlarini ta'sirlayadi. Bunday jarayonlarda tezlik muhimdir, shuning uchun xotira strukturasi va xotira kirish/chiqish protokollari optimallashtirilishi kerak. 5. **Xotira Zaruratlari va Qavatlar Aralig'i:** Dastur yozuvchisining kerakli xotira miqdori va qavatlar aralig'i aniqlanishi kerak. Bu, dastur yozuvchisi uchun zarur bo'lgan xotira miqdorini belgilaydi va xotira ishlab chiqish qavatlarini optimallashtirishga yordam beradi. 6. **Xavfsizlik va Xavfsizlik:** Xotira xavfsizligi, ma'lumotlar maxfiy va ishonchli saqlanishini ta'minlaydi. Maxfiylik, dastur yozuvchisi tomonidan taqdim etilgan maxfiylik talablari va ma'lumotlar himoyalashni ta'minlash uchun kerakli xavfsizlik protokollariga rioya qilishi mumkin. Xotira taqsimlashning bu tamoyillari, dastur yozuvchisi uchun maqsad va talablarga mos ravishda dastur ishlovchisining ishonchli va yuqori darajada faol bo'lishini ta'minlaydi. Bu jarayon, dastur tili va platformasiga qarab o'zgaradi va dastur yozuvchisi uchun qo'llanilishi kerak. 26. Ob'ekt kodini optimallashtirish Tizimli dasturlashda ob'ekt kodini optimallashtirish, dastur yozuvchisining daromadini va ishlovchi bo'lishini ta'minlash uchun muhimdir. Ob'ekt kodini optimallashtirish quyidagi yo'llar orqali amalga oshiriladi: 1. **Effektiv Data Strukturasi va Algoritmlar:** Kerakli ma'lumotlar turlarini va ularga xos optimal strukturalarni tanlash. Masalan, kerakli ma'lumotlar turi uchun massivlar, qatorlar, yig'indilar yoki foydalanishga muvofiq boshqa strukturalar. 2. **Funksiyalar va Metodlar Optimallashtirishi:** Ob'ektning metodlari va funksiyalari ma'lumotlarni qanday qilib ishlovchi bo'lishini ta'minlash uchun mos ravishda yaratilishi kerak. Bu funksiyalar va metodlar juda ko'p takrorlanuvchi ishlar (repetitive tasks) uchun optimal yechimlar taklif etishi mumkin. 3. **Kerakli Ma'lumotlarni to'plash va Jo'natishni Optimallashtirish:** Ob'ektning ma'lumotlarni olish va jo'natish jarayonlari, masalan, bazaga so'rov yuborish yoki fayl yozish va o'qish uchun optimallashtirilishi kerak. Bundan tashqari, ma'lumotlarni yuklab olish va saqlash jarayonlari ham optimallashtirilishi mumkin. 4. **Obyektlarning Yuklanishi va Yaratilishi:** Ob'ekt yaratilishi va uni ishlatish, masalan, singleton o'yini, faqat bir marta yaratilishi uchun yaratilganlik jarayonlari optimallashtirilishi mumkin. 5. **Xotiraga Ko'paytirish va Tashqi Xotira Foydalanishni Cheklash:** Obyektlarning xotirasi va tashqi xotira foydalanishi juda muhimdir. Xotira ko'paytirishni (memory duplication) minimalizatsiya qilish, ma'lumotlar almashinishni cheklash va turli ob'ekt turlari orasidagi almashtiruvni optimallashtirish uchun kerakli bo'lishi mumkin. 6. **Ko'd optimallashtirishi:** Ob'ekt kodining oson vaqtda ishlovchi va daromadli bo'lishi uchun ko'd optimallashtirishni amalga oshirish juda muhimdir. Bu jarayonda yorliq ko'd, juda katta ob'ekt modellari va arxitektura (overly complex architecture)ni kamaytirish yoki cheklash masalalari hal qilinishi mumkin. Ob'ekt kodini optimallashtirish, dastur yozuvchisining yozilgan kodni to'g'ri, ishlovchi va daromadli bo'lishini ta'minlashda muhim ahamiyatga ega. Bu, dastur yozuvchisi tomonidan yozilgan kodni yaxshi tahlil qilish va ishlovchi bo'lishni ta'minlashda yordam beradi. 27. Assembler dasturlash tili asoslari. Assembler dasturlash tili, tizimli dasturlashda tezkor va samarali dasturlar yaratish uchun keng foydalaniladi. U boshqaruv dasturlarini yaratish va ishga tushirishda yordam beradi. Assembler dasturlash tilining asosiy ko'rsatkichlari quyidagilar: 1. **Komandalar va O'zgaruvchilar:** Assembler tilida dasturlar ko'p qatorlarda yoziladi. Har bir qatorning boshida komanda yoki instruksiya, keyin esa uni bajargan o'zgaruvchilar va operandlar keladi. Masalan, `MOV AX, BX` komandasi, AX o'zgaruvchisiga BX ning qiymatini ko'chirish komandasini ifodalaydi. 2. **Registry va Ma'lumot Turlari:** Assembler tilida ko'p o'rnatilgan registrylar va ma'lumot turlari mavjud. Registrylar kompyuterning xotirasida ma'lumotlarni saqlash uchun ishlatiladi, masalan, AX, BX, CX, DX va boshqalar. Ma'lumot turlari esa bit, byte, word, va dword kabi bo'lishi mumkin. 3. **Direktivlar va Metodlar:** Assembler tilida amaldagi dastur kodini taqsimlash uchun direktivlar va metodlar ham mavjud. Direktivlar, assemblerga ko'rsatilgan ma'lumotlarni ushlab qolish va yuklash, oyna uzunligi va proqram boshida yoki oxirida ma'lumotlarni saqlash uchun ishlatiladi. Metodlar esa o'zgaruvchilarning joylashtirish va funksiyalarni tuzish uchun ishlatiladi. 4. **Kommentariylar:** Assembler tilida kodning o'qilishi va tushunilishi uchun kommentariylar yoziladi. Bu qanday qo'llanilayotgan koddagi funksiyalarni, qatorlarni va qanday bo'lishini tushunishga yordam beradi. 5. **Kodning Qoidalari:** Har bir assembler dasturlash tili o'zining kodning qoidalari va sintaksisiga ega. Bu qoidalar komandalar va o'zgaruvchilarning to'g'ri ishlovchi bo'lishini ta'minlaydi. Assembler dasturlash tili, bilish uchun tez-tez ishlatiladigan, operatsiyon tizimining asosiy tushunchalarini anglash uchun juda foydali bo'lgan dasturlash tilidir. Bu tilni foydalanish orqali, dastur yozuvchisi tez-tez bajariladigan jarayonlarni to'g'ri amalga oshirish mumkin. 28. Assembler formati. Assembler formati, assembler dasturlarining yozilishida va o'qilishida qo'llaniladigan strukturani va sintaksisni belgilaydi. Bu format dastur yozuvchisi uchun dastur kodini to'g'ri va ma'qul ko'rinishda yozishni ta'minlaydi. Assembler formatining boshqa dasturlash tillariga qaraganda ko'p farqlari mavjud, ammo ularning o'zlariga xos yoki umumiy elementlari mavjud bo'ladi. Quyidagi ko'rsatmalarda, klassik assembler formati misol keltirilgan: ```assembly ; Bu qator kommentariya sifatida qabul qilinadi section .text ; Amalni bajarish bo'limi global _start ; Dasturni boshlash nuqtasi _start: ; Dasturni boshlash etiketi mov eax, 4 ; 4 raqamli kodning mov komandasi - ax o'zgaruvchiga qiymat o'rnating mov ebx, 1 ; 1 raqamli kodning mov komandasi - bx o'zgaruvchiga qiymat o'rnating mov ecx, msg ; msg nomli xotirani ecx o'zgaruvchiga o'rnating mov edx, msg.len ; msg.len nomli xotirani edx o'zgaruvchiga o'rnating int 0x80 ; INT 0x80 komandasi - System call mov eax, 1 xor ebx, ebx int 0x80 ; Programni to'xtatish uchun ; Xotirani tozalash uchun ; INT 0x80 komandasi - System call section .data ; Ma'lumotlar bo'limi msg db 'Assalom, dunyo!', 0xA ; msg nomli ma'lumotlar ketma-ketligi len equ $-msg ; msg o'zgaruvchisi uzunligi ``` Bu misolda, `section .text` bo'limida amalni bajarish uchun dastur kodini joylashtirish uchun `global _start` va `_start` etiketi ko'rsatilgan. `mov` komandasi orqali o'zgaruvchilarga qiymatlar o'rnatilgan va `int 0x80` orqali sistem chaqirilgan. `section .data` bo'limida esa ma'lumotlar joylashtirilgan va `db` komandasi yordamida matn va `equ` yordamida matn uzunligi aniqlanadi. Assembler formati kodni o'qish va yozishni osonlashtirish uchun yordam beradi va kodni o'qish paytida dastur yozuvchisining to'g'ri tushunishini ta'minlaydi. 29. Assembler dasturining strukturasi. Assembler dasturining strukturasi ko'rsatilgan komandalarning to'plamidir, ulardan iborat bo'lgan. Assembler dasturining oddiy strukturasi quyidagi qismlardan iborat bo'lishi mumkin: 1. **Sarlavha va Ishonchli Bo'lish**: Dastur yozuvchisi tomonidan dasturni tavsiflovchi sarlavha (header) qismi, dasturni maqsadi va muhitini aniqlaydi. Bu qismi odatda kommentariyalardan foydalanib, dastur haqida umumiy ma'lumotlar taqdim etiladi. 2. **Bo'limlar va Seksiyalar**: Assembler dasturlarining o'zida, kodni boshqarish uchun bo'limlar va seksiyalar (sections) mavjud bo'ladi. Bu bo'limlar `.text`, `.data`, `.bss`, `.rodata`, `.rsrc`, `.debug` kabi nomlar bilan ifodalangan bo'lishi mumkin. `.text` bo'limida amalni bajarish uchun dastur kodlari joylashadi, `.data` bo'limida ma'lumotlar joylashadi, `.bss` bo'limida ishlatilmagan ma'lumotlar uchun joy beriladi. 3. **Komandalarning Joylashuvi**: Assembler dasturida komandalarning joylashuvi muhimdir. Har bir komanda o'z joylashuvi va sintaksisiga ega. Kod qatorlari, direktivlar va etiketlar to'g'risida to'g'ri joylashuvi ta'minlanishi kerak. 4. **Etiketlar va Metodlar**: Dastur yozuvchisi o'zgaruvchilar, metdodlar va etiketlar yordamida kodni tuzishni osonlashtiradi. Etiketlar dasturning belgilangan nuqtalarini ifodalaydi va dastur yozuvchisi tomonidan qo'llaniladi. Metodlar esa belgilangan funksiyalarni amalga oshirish uchun ishlatiladi. 5. **Kommentariyalar**: Assembler dasturining qo'llaniladigan qismi kommentariyalar bo'ladi. Bu qismi dastur yozuvchisi tomonidan yozilgan kodni o'qish va tushunishni osonlashtiradi. 6. **Ma'lumotlar Turi va Ma'lumotlar**: Ma'lumotlar, misol uchun matnlar, sonlar yoki boshqa ma'lumotlar, dastur yozuvchisi tomonidan foydalaniladigan ma'lumotlar turlaridir. Bu ma'lumotlar odatda `.data` yoki `.rodata` seksiyalarda saqlanadi. 7. **Sistem Chaqiruvlari**: Assembler dasturlari dastur yozuvchisining to'xtatish, tizimcha xizmatlarni chaqirish va dastur yozuvchisining qo'llanishi uchun sistem chaqiruvlaridan foydalanadi. Assembler dasturlarining strukturasi dastur yozuvchisi tomonidan yozilgan kodning to'g'ri va ishlovchi bo'lishini ta'minlaydi. Bu strukturani o'rganish va qo'llash, dastur yozuvchisi uchun dasturni yaxshi tahlil qilish va uni to'g'ri ishlatishni ta'minlaydi. 30. Assembler dasturining elementlari. Assembler dasturlarining boshqa dasturlash tillariga qaraganda kichik va murakkab bo'lishi mumkin. Assembler dasturining elementlari quyidagi tartibda ko'rsatiladi: 1. **Komandalar (Instructions)**: Assembler tilida yozilgan komandalar, boshqa dasturlash tillaridagi operatorlarga o'xshashdir. Har bir komanda kompyuter arxitekturasi va operatsion tizimiga bog'liq ravishda amalga oshiriladi. Misol uchun, `MOV`, `ADD`, `SUB`, `JMP` kabi komandalar odatda assembler tilida yoziladi. 2. **Operandlar**: Komandalarning bajarilishi uchun kerakli ma'lumotlarni o'z ichiga oladi. Operandlar o'zgaruvchilar, registrylar, qiymatlar yoki joylashuvlar bo'lishi mumkin. Misol uchun, `MOV AX, 10` komandasida `AX` registrysiga `10` qiymati yuklanadi. 3. **Etiketlar (Labels)**: Kodning belgilangan nuqtalari. Etiketlar odatda dastur to'plamidagi amallar va shartlar uchun foydalaniladi. Misol uchun, `LOOP:` etiketi tsikl yaratish uchun foydalanilishi mumkin. 4. **Registrylar**: Kompyuter arxitekturasiga bog'liq ravishda to'plamda ma'lumotlar o'rnatingan joylar. Registrylar odatda `AX`, `BX`, `CX`, `DX` kabi nomlar bilan ifodalangan bo'ladi. 5. **Direktivlar (Directives)**: Dastur yozuvchisiga ma'lumotlar o'zgartirish uchun xususiy direktivlar mavjud. Misol uchun, `ORG`, `DB`, `DW`, `DS` kabi direktivlar ma'lumotlarni saqlash, joylashtirish va ko'rsatish uchun foydalaniladi. 6. **Kommentariyalar**: Assembler dasturlarida `;` belgisi orqali yozilgan qism kompyuter tomonidan e'tibor qilmaydi va faqat kodni tushunish uchun foydalaniladi. Bu qism dastur yozuvchisi tomonidan yozilgan kodni tushunishni osonlashtiradi. Assembler dasturlarining elementlari kodni to'g'ri va ishlovchi bo'lishini ta'minlaydi. Bu elementlar yordamida dastur yozuvchisi kodni yaxshi tahlil qilishi va uni to'g'ri ishlatishi mumkin. 31. Tilning konstruksiyalari va operatsiyalari Tilning konstruksiyalari va operatsiyalari, dasturlash tillarining asosiy qismidir va dasturlar yozuvchisi tomonidan kod yozishning asosiy vositasini ifodalaydi. Tizimli dasturlashda tilning konstruksiyalari va operatsiyalari quyidagi tartibda ko'rsatiladi: 1. **O'zgaruvchilar va Ma'lumot Turlari**: Dasturlash tillarida o'zgaruvchilar va ma'lumot turlari bilan ishlovchi bo'lish mumkin. O'zgaruvchilar, ma'lumotlarni saqlash uchun ishlatiladi, va ular son, matn, boolean (mantiqiy), qator, massiv yoki ob'ektlar shakllarida bo'lishi mumkin. 2. **Operatorlar**: Dasturlash tillaridagi operatorlar, ma'lumotlarni ishlovchi va dastur bajaruvchilarini boshqarish uchun ishlatiladi. Mos ravishda, operatorlar arifmetik, solishtirish, mantiqiy, qiyoslash, taqsimlash, tizimni boshqarish va boshqalar bo'lishi mumkin. 3. **Shartlar va To'g'ri O'tishlar**: Shartlar (if/else) va to'g'ri o'tishlar (switch/case) operatorlari, dasturlashda belgilangan shartlarni tekshirish va to'g'ri bajaruvchini tanlash uchun ishlatiladi. 4. **Tsikllar**: Tsikllar, bir nechta qatorlarni bir nechta marta bajarish uchun ishlatiladi. Mos ravishda, `for`, `while`, `do-while` tsikllari dastur bajaruvchilarini bir nechta marta takrorlash uchun ishlatiladi. 5. **Funksiyalar va Metodlar**: Funksiyalar va metodlar, qo'llanuvchi tomonidan yozilgan kodni qayta qayta ishlatishni ta'minlaydi. Ular, kodni qayta qayta ishlatishni ta'minlaydi va dasturlashda kodni tuzishni osonlashtiradi. 6. **Massivlar va Qatorlar**: Massivlar va qatorlar, bir nechta ma'lumotlarni bir joyda saqlash uchun ishlatiladi. Ular, ko'plab ma'lumotlarni birlashtirish va ularga birlashgan amallar bajarish uchun ishlatiladi. 7. **Funksional va Ob'ekt-Oriented Programming (OOP)**: Funksional va ob'ektoriented programming (OOP) konseptlari, kodni yozish va tuzishni osonlashtiradi. Bu konseptlar dasturlash tillarini yordamida dastur yozuvchisiga kodni yozish va tuzishda yordam beradi. Tilning konstruksiyalari va operatsiyalari, dasturlash tillarida qo'llaniladigan asosiy qismidir va kodni to'g'ri va ishlovchi bo'lishni ta'minlaydi. Bu konseptlar dasturlash tillarini o'rganishda asosiy ahamiyatga ega. 32. Assembler direktivalari Assembler direktivalari, assembler dasturlarini yozishda va kodni tuzishda foydalaniladigan xususiy ko'rinishlardir. Bu direktivalar dastur yozuvchisiga ma'lumotlarni o'zgartirish, joylashtirish, saqlash va ko'rsatish uchun yordam beradi. Assembler direktivalari quyidagi ko'rinishlarda bo'lishi mumkin: 1. **ORG**: Ma'lumotlar joyini (memory location) o'zgartirish uchun ishlatiladi. Misol uchun, `ORG 100h` direktivasi 100h joylashuvi bilan boshlangan ma'lumotlar joyini ko'rsatadi. 2. **DB, DW, DD, DQ**: Ma'lumotlar saqlash uchun foydalaniladi. `DB` byte (1 bayt), `DW` word (2 bayt), `DD` double word (4 bayt), `DQ` quad word (8 bayt) ma'lumotlar uchun ishlatiladi. 3. **EQU**: O'zgaruvchilarni aniqlash uchun foydalaniladi. Misol uchun, `LENGTH EQU 10` direktivasi LENGTH o'zgaruvchisini 10 qiymati bilan aniqlaydi. 4. **SEGMENT**: Ma'lumotlar joyini segmentlarga bo'lish uchun ishlatiladi. Bu direktiva odatda `.data`, `.code`, `.stack` kabi segmentlarga misol beradi. 5. **END**: Dastur kodini tugatishni belgilaydi. Odatda dastur yozuvchisi tomonidan kodning oxiriga joylashtiriladi. 6. **INCLUDE**: Boshqa fayldagi kodni jamlash uchun ishlatiladi. Misol uchun, `INCLUDE "filename.asm"` direktivasi kodni "filename.asm" fayldan olish uchun foydalaniladi. 7. **EXTERN, PUBLIC**: Dasturlar o'rtasida o'zaro ma'lumot almashish uchun foydalaniladi. `EXTERN` dasturda boshqa fayl o'zgaruvchisini aniqlaydi, `PUBLIC` esa boshqa dasturlarga o'zgaruvchi yoki metodni e'lon qiladi. 8. **SECTION**: Dastur kodini turli bo'limlarga bo'lish uchun foydalaniladi. Bu direktiva `.text`, `.data`, `.bss` kabi bo'limlarni ta'rifi uchun ishlatiladi. 9. **REPEAT, ENDM**: Kodni takrorlash uchun foydalaniladi. Misol uchun, `REPEAT 5` direktivasi kodni 5 marta takrorlaydi va `ENDM` takrorlashni tugatadi. 10. **MACRO**: O'zgartirish uchun o'z joylashtiruvchi kod (code template) tuzish uchun foydalaniladi. Bu assembler direktivalari, kodni tuzish va tahlil qilishda foydali bo'lgan vositalardir. Raqamli va matn ma'lumotlarini saqlash, segmentlarga bo'lish, o'zgaruvchilarni aniqlash va ko'rsatish, kodni takrorlash va kodni boshqa fayllardan olish uchun foydalanish mumkin. 33. Assemler ko‘rsatmalari Assembler, tizimli dasturlashda kompyuterlarning boshqarilishi uchun ishlatiladigan dasturlar yozishda asosiy vosita bo'ladi. Assembler ko'rsatmalari, kompyuter arxitekturasiga, operatsion tizimga va amaliyotlarga bog'liq ravishda yozilgan dasturlar to'plami haqida ma'lumotlar taqdim etadi. Bu ko'rsatmalar dastur yozuvchisi tomonidan yozilgan kodni to'g'ri tushunish va ishga tushirishni osonlashtiradi. Assembler ko'rsatmalari quyidagi ma'lumotlarni o'z ichiga oladi: 1. **Kompyuter Arxitekturasi**: Assembler ko'rsatmalari kompyuter arxitekturasi haqida umumiy ma'lumotlar beradi, masalan, xotirani, registrlarni, instruksiyalar to'plamini, to'plamdagi boshqa komponentlarni va ularga qanday murojaat qilinishi kerakligini ta'rifi. 2. **Instruksiyalar**: Ko'rsatmalarda kompyuter arxitekturasiga xos instruksiyalar va ularning sintaksisi, operandlari, va bajarilishi haqida to'liq ma'lumotlar beriladi. 3. **Boshqarish (Control)**: Ko'rsatmalarda dastur yozuvchisi tomonidan yozilgan kodni boshqarishni o'rganish uchun shartlar, to'g'ri o'tishlar, va tsikllar haqida ma'lumotlar beriladi. 4. **Ma'lumotlar Strukturasi**: Ma'lumotlarni saqlash, o'qish, yozish va boshqa operatsiyalar haqida ma'lumotlar ko'rsatiladi. Bu ma'lumotlar odatda ma'lumotlar to'plami (segmentlar), ma'lumot turlari, ma'lumotlarni joylashuv va yetkazish usullari kabi ma'lumotlar tizimi haqida bo'ladi. 5. **Kodni Yozish Qoidalari**: Ko'rsatmalarda kodni yozish uchun qoidalarni ta'rifi beriladi. Bu qoidalar kodni yozishda to'g'ri sintaksisni ta'minlash, instruksiyalarni va operandlarni to'g'ri qo'llash, va dastur kodining aniq bo'lishini ta'minlashga yordam beradi. Assembler ko'rsatmalari kodni tushunish va ishga tushirishda juda foydali bo'lgan resurslardir. Bu ko'rsatmalar dastur yozuvchisi tomonidan yozilgan kodni to'g'ri va ishlovchi bo'lishni ta'minlaydi. 34. Uzilishlar Uzilishlar (Interrupts) tizimli dasturlashda operatsion tizimga to'xtab, kiritilgan bo'limni bajarish uchun foydalaniladigan vosita. Uzilishlar dastur yozuvchisi tomonidan aniqlangan hodisalar bo'lib, odamlarning klaviatura tugmachalarini bosish, diskdagi yozuvlarga murojaat qilish, yoki vaqt o'tgandan so'ng avtomatik ravishda bajarilishi mumkin. Uzilishlar tizimni tezligi va bir qatorda bir nechta amallarni bajarish imkoniyatini ta'minlaydi. Uzilishlar dastur bajarayotgan vaqtida paydo bo'ladi va dastur yozuvchisi tomonidan belgilanadi. Uzilish sodir bo'lganda, dastur bajarilishi to'xtaydi va uzilish manbai (interrupt source) aniqlanadi. Keyin, operatsion tizim uzilish manbaini identifikatsiya qiladi va shu manbani qanday qilib qaytadan bajarish kerakligini aniqlab beradi. Uzilishlar quyidagi turlarga bo'linadi: 1. **Tartiblangan Uzilishlar (Hardware Interrupts)**: Bunday uzilishlar fizikaviy qurilmalardan kelib chiqadi, masalan, klaviatura tugmachasining bosilishi yoki diskga murojaat qilish. Ular kompyuter tomonidan avtomatik ravishda aniqlanadi. 2. **Intizomli Uzilishlar (Software Interrupts)**: Dastur yozuvchisi tomonidan qo'llanilgan uzilishlar, dastur tomonidan operatsion tizimga murojaat qilish uchun ishlatiladi. Ular dastur yozuvchisi tomonidan belgilangan vaqtda chaqiriladi. Uzilishlar tizimda foydalaniladigan katta qismlardan biri hisoblanadi, ular dasturlar va operatsion tizim orasidagi kommunikatsiyani ta'minlaydi. Uzilishlar dastur bajarishni to'xtatadi va kerakli operatsiyalarni bajarish uchun kerakli dasturlar bajarilishiga ruxsat beradi. 35. Uzilishlarni boshqarish Uzilishlarni boshqarish, tizimli dasturlashda operatsion tizimning bajarilish jarayonini boshqarish uchun muhim bo'lgan amaldir. Uzilishlar dastur yozuvchisi tomonidan aniqlangan va dastur ishlashi paytida operatsion tizimga murojaat qilish uchun foydalaniladi. Uzilishlarni boshqarish quyidagi bosqichlardan iborat bo'ladi: 1. **Uzilishlar Ro'yxati**: Dastur yozuvchisi uzilishlar ro'yxatini, shuningdek ularga mos keladigan hodisalarni aniqlab belgilaydi. Bu ro'yxatda tartiblangan tartibda uzilishlar joylashadi va ularga mos keladigan boshqa ma'lumotlar saqlanadi. 2. **Uzilishlar Boshqarish Tizimi**: Uzilishlar boshqarish tizimi, uzilishlar sodir bo'lganida qanday amallarni bajarmoqchi bo'lsak, operatsion tizimga bu haqda xabar berish uchun yaratiladi. Uzilishlar boshqarish tizimi uzilishni aniqlab oladi va kerakli ishlarni bajarish uchun kerakli ma'lumotlarni joylashtiradi. 3. **Uzilishlarga Reagirovchi Dasturlar**: Uzilish sodir bo'lganda, operatsion tizim aniqlangan uzilishning manbani aniqlab, kerakli dasturlarni chaqiradi va ularga kerakli vazifalarni bajarish uchun buyruqlar beradi. Bu dasturlar uzilishlar boshqarish tizimi tomonidan ishga tushiriladi. 4. **Uzilishlar Xususiyatlari**: Har bir uzilishning xususiyatlari (priority level, maskable/unmaskable, etc.) mavjud bo'lib, bu xususiyatlar uzilishni qanday ko'rsatish va uni boshqarishning qanday usullari mavjudligini aniqlaydi. 5. **Uzilishlar Turlari**: Uzilishlar tartiblangan va tartiblangan emas uzilishlar o'rinli va tartiblangan emas uzilishlar mavjud. Tartiblangan uzilishlar avtomatik ravishda sodir bo'ladi va tartiblangan emas uzilishlar dastur yozuvchisi tomonidan chaqirilishi kerak. Uzilishlarni boshqarish, operatsion tizim va dastur yozuvchisi o'rtasidagi kommunikatsiya tizimining asosiy qismidir va to'xtash, diskga yozuvlarga murojaat qilish, vaqt o'tgandan so'ng amallarni bajarish kabi jarayonlarni boshqarishda muhim rol o'ynaydi. 36. Apparatli uzilishlar Apparatli uzilishlar (hardware interrupts) kompyuter tizimining fizikaviy qurilmalari tomonidan sodir bo'lgan voqealardir. Ular dastur yozuvchisi tomonidan aniqlanmaydi, balki avtomatik ravishda kompyuter tizimi tomonidan identifikatsiya qilinadi. Apparatli uzilishlar dastur yozuvchisining dasturini to'xtatadi va kerakli jarayonni boshlash uchun operatsion tizimga xabar beradi. Apparatli uzilishlar quyidagi voqealarga olib keladi: 1. **Klaviatura tugmachalarining bosilishi**: Foydalanuvchi klaviaturada tugmachani bosganda, kompyuter tizimi klaviaturaga bog'liq uzilishni sodir etadi. 2. **Tayanch tizimning vaqtining o'tishi**: Tayanch tizimning interfeysi tizim vaqti o'tganda, kompyuter tizimi tayanch tizimidan kelib chiqqan uzilishni qabul qiladi. 3. **Disk va boshqa xotiradagi voqealar**: Diskga yozuvlar qilish, fayllarga murojaat qilish, yoki boshqa xotiradagi amallar sodir bo'lganda, kompyuter tizimi disk va boshqa xotiradagi apparatlar tomonidan kelib chiqqan uzilishni aniqlaydi. Apparatli uzilishlar kompyuter tizimining avtomatik ravishda bajarilishi uchun tayyorlangan bo'lib, bu uzilishlar dastur yozuvchisining kodini to'xtatadi va kerakli ishni bajarish uchun operatsion tizimga buyruq beradi. Uzilishlar tizimni energiya samaradorligini oshirish, vaqtni boshqarish, fayllarni saqlash va ko'chirish kabi asosiy amallarni bajarishda juda muhimdir. 37. Dasturiy uzilishlar Dasturiy uzilishlar (software interrupts) dastur yozuvchisi tomonidan chaqirilgan va operatsion tizimga ish bajarilishi uchun mo'ljallangan xususiy voqealardir. Bu uzilishlar dastur yozuvchisi tomonidan aniqlanadi va operatsion tizimga murojaat qilish uchun foydalaniladi. Dasturiy uzilishlar quyidagi muhim vazifalarni bajarishda foydalaniladi: 1. **Sistem xizmatlarini chaqirish**: Dasturiy uzilishlar operatsion tizimga murojaat qilish uchun ishlatiladi. Masalan, fayllarni ochish, yopish, yoki o'qish uchun dasturiy uzilishlar ishlatilishi mumkin. 2. **Dastur tashqi operatsiyalarni bajarish**: Dasturlar o'zgaruvchilarni yoki boshqa dasturlarni chaqirish uchun dasturiy uzilishlardan foydalanishlari mumkin. 3. **Taqdimot tizimlari bilan ishlash**: Grafik interfeyslarni yaratish, o'zgaruvchilarni ko'rsatish, xatolarni to'g'rilash va boshqa taqdimot tizimlari bilan ishlashda dasturiy uzilishlar qo'llanilishi mumkin. Dasturiy uzilishlar kompyuter tizimining oddiy jarayonlarni bajarish uchun ishlatiladi va dastur yozuvchisi tomonidan to'xtatiladi. Ular sodir bo'lganda, operatsion tizim aniqlangan uzilish manbasini identifikatsiya qiladi va dastur yozuvchisi tomonidan belgilangan dasturni bajarish uchun ma'lumotlarni yuboradi. Dasturiy uzilishlar operatsion tizim va dastur yozuvchisi o'rtasidagi kommunikatsiyani ta'minlaydi va asosiy dastur jarayonlarini bajarishda yordam beradi. 38. Satrlar (matnlar) va ularni qayta ishlash Satrlar yoki matnlar, dasturlashda ma'lumotlarni o'z ichiga olgan to'plamlardir. Ular odatda ko'p qatorli matnlar, yoki bir qatorli matnlar shaklida bo'lishi mumkin. Satrlar yoki matnlar qayta ishlash, ularni tahrirlash va ularga operatsiyalar qo'llashni tashkil etadi. Bu amallar dasturlarning qismlarini bir-biriga bog'lashda va ma'lumotlarni tekshirishda juda muhimdir. Dasturlash tillarida, satrlarni qayta ishlash uchun quyidagi amallar odatda ishlatiladi: 1. **Satrlarni Qo'shish**: Yangi satrni mavjud matnga qo'shish uchun qo'shish amali ishlatiladi. Bu amal odatda matn yozuvchisi tomonidan taqdim etiladi. Masalan, Python dasturlash tilida `+` operatori yordamida satrlar bir-biriga qo'shiladi. 2. **Satrlarni Almashtirish**: Matnda mavjud bo'lgan biror bir qatorni boshqa qator bilan almashtirish uchun almashtirish amali ishlatiladi. Bu amal odatda ma'lumotlar tahlili dasturlarida yoki ma'lumotlar bazasida ma'lumotlarni yangilashda foydalaniladi. 3. **Satrlarni Kesish**: Matnda mavjud bo'lgan biror qatorni kesib olish uchun kesish amali ishlatiladi. Bu amal odatda matn yozuvchisi tomonidan taqdim etiladi. 4. **Matnlar orasida Izlash**: Ma'lum bir matnda belgilangan so'z, kalima yoki qatorni izlash uchun izlash amaliyoti ishlatiladi. Bu amal odatda qidiruv operatorlari yordamida bajariladi. 5. **Matnni Ta'qib Qilish**: Matnda mavjud bo'lgan qatorlar yoki so'zlar sonini aniqlash va ularga qo'shimcha amallar qo'llash uchun ta'qib qilish amaliyoti ishlatiladi. Satrlar va ularni qayta ishlash, dasturlarni o'rganish va tuzishning asosiy qismidir, chunki ma'lumotlarni tekshirish va ularga operatsiyalar qo'llash barcha dasturlarda juda ko'p ishlab chiqariladi. 39. Fayllar va fayl tizimlarining asosiy operatsiyalari Fayllar va fayl tizimlari, dasturlashda ma'lumotlarni saqlash va boshqa dasturlar bilan ma'lumot almashish uchun muhim vositalardir. Fayllar tizimlarining asosiy operatsiyalari quyidagilardir: 1. **Fayl yaratish**: Fayllar tizimlarida yangi fayl yaratish amaliyoti juda muhimdir. Yangi fayl yaratish uchun kerakli direktoriyada va nom bilan faylni yaratish mumkin. 2. **Faylni ochish**: Ma'lum bir faylni ochish uchun foydalaniladigan amaliyot. Faylni ochish orqali, fayldagi ma'lumotlarni o'qish va uni boshqa dasturlarga uzatish mumkin. 3. **Faylga yozish**: Faylga ma'lumot yozish amaliyoti, faylni ochishdan so'ng uni o'zgartirish yoki yangi ma'lumotlarni yozish uchun foydalaniladi. 4. **Faylni yopish**: Faylni ochish va yozish jarayonlarini tugatish uchun foydalaniladi. Faylni yopish bilan, fayldagi o'zgarishlar saqlanadi va fayl operatsion tizim tomonidan ruxsat berilgan bo'lsa uni boshqa dasturlarga uzatish mumkin bo'ladi. 5. **Fayl bilan ishlash**: Fayl bilan ishlash, ma'lum bir faylga ma'lumot qo'shish, ma'lumotlarni o'qish va yozish, yoki fayl tarkibini boshqarishni o'z ichiga oladi. 6. **Fayl nomini o'zgartirish**: Ma'lum bir faylning nomini o'zgartirish uchun foydalaniladi. Fayl nomini o'zgartirish bilan, faylga yangi nom beriladi va uni yangi manbalar o'rganishi osonlashadi. 7. **Faylni o'chirish**: Ma'lum bir faylni ochirish amaliyoti. Faylni o'chirish bilan, fayl operatsion tizimdan olib tashlanadi va uni qayta tiklash mumkin bo'ladi. 8. **Fayl bilan ishlash so'nggi vaqtini aniqlash**: Ma'lum bir faylga oxirgi marta qo'yilgan ma'lumotni o'qish va uni boshqa dasturlar bilan ishlash vaqtini aniqlash amaliyoti. Fayllar va fayl tizimlarining asosiy operatsiyalari dasturlashda ma'lumotlar saqlash va boshqa dasturlar bilan ma'lumot almashish uchun asosiy qismidir. Raqamli va matn ma'lumotlarini saqlash, fayllarni yaratish va ochish, fayllarga ma'lumot yozish va o'qish, yoki fayl tarkibini o'zgartirish, barcha dasturlarda juda ko'p ishlab chiqariladi. 40. Operatsion tizim buyruq qatorini qayta ishlash Operatsion tizim buyruq qatorini qayta ishlash, dastur yozuvchisi tomonidan berilgan buyruq qatorini bajarishdan oldin yoki keyin, uning ishonchliligini ta'minlash uchun foydalaniladi. Bu amal yordamida dastur yozuvchisi tomonidan berilgan buyruq qatorining bajarilishi o'qilgan yoki bajarilmaganligini tekshirish va bajarishni takrorlash mumkin bo'ladi. Operatsion tizim buyruq qatorini qayta ishlashning muhim qismlari quyidagilardir: 1. **Buyruqni Tekshirish**: Berilgan buyruq qatorining to'g'ri ishga tushganligini aniqlash uchun uning bajarilishi o'qiladi. Bu operatsiya qat'iyoq tekshiriladi. 2. **Buyruqni Qayta Ishlash**: Agar berilgan buyruq qatori noto'g'ri ishga tushgan bo'lsa, uni qayta ishlash lozim bo'ladi. Bu jarayon boshqaruvchi tomonidan amalga oshiriladi. 3. **Xatolarni Aniqlash va Xabar Berish**: Agar buyruq qatori noto'g'ri ishga tushgan bo'lsa, xato xabarini generatsiya qilish va dastur yozuvchisiga xatolik haqida ma'lumot berish muhimdir. 4. **Qayta ishlashning Avtomatik Kriteriyalari**: Bir qatorning qayta ishlash sharti vaqti, shartlarini va tekshirilishi tartibini aniqlash uchun avtomatik kriteriyalarni belgilash kerak bo'ladi. Operatsion tizim buyruq qatorini qayta ishlash dastur yozuvchisi tomonidan yozilgan kodning to'g'ri ishga tushishini ta'minlaydi. Agar buyruq qatori qandaydir sababga ko'ra noto'g'ri ishga tushgan bo'lsa, u to'g'ri ishga tushishgacha qayta ishlanishi kerak bo'ladi. Bu jarayon dastur yozuvchisining dasturini aniqlashda va dasturda xatolar aniqlashda juda muhimdir. 41. Leksik tahlil qilish. Leksik analizator jadvallari Leksik tahlil, dasturlashda matnlar yoki dastur yozuvchisi tomonidan berilgan kod qatorini so'zlarga bo'lib ajratish va ularni qayta ishlashni amalga oshirish jarayonidir. Bu, matndagi har bir belgini (harf, raqam, alohida belgilar) o'qib chiqish, ularni so'zlarga ajratish va ularni dastur tushunchalariga mos keluvchi belgilar, o'zgaruvchilar, funktsiyalar va boshqa elementlar sifatida tanib berishni o'z ichiga oladi. Leksik analizatorlar (lexer) dastur yozuvchisi tomonidan yozilgan kod qatorini o'qib chiqib, uni belgilangan leksik elementlarga (tokenlar) ajratadi. Bu tokenlar dastur yozuvchisi tomonidan yozilgan kodning sintaksisini tahlil qilishda muhimdir. Leksik analizator jadvali, leksik tahlil jarayonida belgilangan belgilar va ularning mos keluvchi tokenlar (so'zlar) orasidagi bog'lovchi qarashlar to'plamidir. Leksik analizator jadvallari, har bir belgini va unga mos keluvchi tokenlarni aniqlash uchun yaratilgan qayta ishlovchi maydonlar to'plamidir. Bu jadvallar to'plami dastur yozuvchisining yozgan kodni o'qib chiqib, uni muayyan belgilar va so'zlarga ajratadi va uni tokenlar sifatida o'rganadi. Masalan, quyidagi Python kodining leksik analizator jadvalida `if`, `else`, `for`, `while` kabi kalit so'zlar va raqam, matn qatorlaridan iborat tokenlar bo'lishi mumkin: ```python if (x == 5): print("X is equal to 5") else: print("X is not equal to 5") ``` Leksik analizatorlar, kod qatorini o'qib chiqib, uni leksik elementlarga bo'lib ajratishda juda muhimdir. Bu, dastur yozuvchisining to'g'ri tushunish va dastur tushunchalariga mos keluvchi sintaksisni amalga oshirishda yordam beradi. 42. Debug yordamida mikroprotsessor uchun dasturlash Mikroprotsessorlar uchun dasturlash debug qilish juda muhimdir, chunki dasturlarda xatolar yoki noto'g'ri amallar sodir bo'lishi odatda o'zgartirishni talab qiladi. Debug qilish, dastur yozuvchisinin xatolarini aniqlash va ularga echim topish uchun amaliy usuldir. Mikroprotsessorlar uchun dasturlashda debug qilish uchun quyidagi asosiy vositalar foydalaniladi: 1. **Mikroprotsessorlar o'zini boshqaruv tizimi (Microcontroller Debugging Tools)**: Ko'p mikroprotsessorlar o'zlarining o'zini boshqaruv tizimlari (JTAG, SWD kabi) orqali debug qilish imkoniyatini ta'minlaydi. Bu tizimlar mikroprotsessorning ichki hodisalarni ko'rish va dastur yozuvchisi bilan aloqani ta'minlash imkoniyatini beradi. 2. **Emulyatorlar (Emulators)**: Emulyatorlar, mikroprotsessorning emulyatsiyasini yaratadi, ya'ni haqiqiy boshqa mikroprotsessor o'rniga xar tomonlama ishlaydigan dastur. Bu emulyatorlar dastur yozuvchisi uchun o'rtadagi xatoliklarni aniqlash uchun qulaydir. 3. **Litsenziyalashgan debug uskunalari (Licensed Debugging Tools)**: Ba'zi kompaniyalar, mahsulotlarining rasmiy dasturlash vositalarini olish uchun litsenziyalashgan debug uskunalarni taklif etadi. Ular ko'p funksiyalarni o'z ichiga oladi va xatolar va dastur yozuvchisi masalalarni aniqlash va tuzatish uchun qulaydir. 4. **Monitor dasturlar (Monitor Programs)**: Monitor dasturlar, mikroprotsessorning boshqa funksiyalari bilan birga, debug qilish uchun eng sodda yondashuvdir. Ular odatda konsol dasturlari yoki grafik interfeyslar sifatida taklif etiladi. 5. **Tarqatishlar (Probes)**: Tarqatishlar, mikroprotsessorning yordamchi signalini o'qish uchun ishlatiladi. Ular kishilar dasturlashida xatoliklarni aniqlashda yordam beradi. Mikroprotsessorlar uchun dasturlashning debug qilinishi o'z ichiga ko'p jarayonlarni o'z ichiga oladi va har bir dastur yozuvchisiga mos ravishda yondashuv beradi. Debug qilish, dastur yozuvchisining xatoliklarini aniqlash, ularga echim topish va dasturni to'g'rilash uchun zarur bo'lgan asosiy qismlardan biridir. 43. Assambler ko'rsatmalari bilan ishlash Assamble ko'rsatmalari assembler dasturlash tilida yozilgan dasturlarni yozish va o'qishda juda muhim bo'lgan qismlardan biridir. Assembler ko'rsatmalari, dastur yozuvchisining ko'rsatkichlarini, direktivalarini va instruksiyalarini tushuntiradi. Bu ko'rsatmalar dastur yozuvchisiga, kompilyatorga va dasturni yoki komponentni tuzuvchiga qanday ish bajarish kerakligini aytadi. Assemble dastur yozuvchisining boshqa tillardagi ko'rsatmalar bilan o'xshash ravishda, assembler ko'rsatmalari koddagi qismni tushuntiradi va uni ma'noga keltiradi. Quyidagi ko'rsatmalar assembler dasturlash tilida o'zbekiston tili orqali ko'zdan kechirilgan misol: - **.data**: Bu direktiva, ma'lumotlarni saqlash uchun xotira bo'limini belgilaydi. Dastur yozuvchisining dasturida foydalanish uchun o'zgaruvchilarni yaratish, ma'lumotlarni o'z ichiga olgan ma'lumotlar ro'yxatini yaratish uchun ishlatiladi. - **.text**: Bu direktiva, dastur yozuvchisining asosiy kodini yozish uchun xotira bo'limini belgilaydi. Dastur yozuvchisining asosiy qismlarini, funktsiyalarini, instruksiyalarini va boshqa asosiy qismlarini shu bo'limda yozish uchun foydalaniladi. - **mov**: Bu instruksiya, ma'lumotlarni bir joydan boshqa joyga ko'chirish uchun ishlatiladi. Masalan, `mov ax, 10` ko'rinishidagi instruksiya, `ax` o'zgaruvchisiga 10 qiymatini beradi. - **add**: Bu instruksiya, ikki operandni qo'shish uchun ishlatiladi. Masalan, `add ax, bx` ko'rinishidagi instruksiya, `ax` o'zgaruvchisiga `bx` o'zgaruvchisini qo'shadi. - **jmp**: Bu instruksiya, bajarilishi kerak bo'lgan kodning joylashuvi (manbani) o'zgartiradi. Misol uchun, `jmp start` ko'rinishidagi instruksiya, `start` belgilangan manbaga o'tkazib beradi. Assembler ko'rsatmalari bilan ishlash, dastur yozuvchisining asosiy qismlarini yozish va uni to'g'ri ishga tushirishda yordam beradi. Bu ko'rsatmalar dastur yozuvchisining strukturasi va ishlashini aniqlashda juda muhimdir. 44. Interrupt ishlov beruvchisini yaratish. Interrupt ishlov beruvchisini yaratish uchun, dastur yozuvchisining firqalarni aniqlash va ularga javob berish uchun xususiy funksiyani yaratish kerak bo'ladi. Bu funksiya, firqani aniqlab, uni qabul qiladi va kerakli amallarni bajaradi. Quyidagi misol C dasturlash tilida interrupt ishlov beruvchisini yaratish uchun oddiy misolni ko'rsatadi: ```c #include <avr/io.h> #include <avr/interrupt.h> // Interrupt ishlov beruvchisi funksiyasi ISR(INT0_vect) { // Kerakli amallarni bajarish } int main() { // INT0 pinini firqani qabul qilish uchun sozlash DDRD &= ~(1 << DDD2); // INT0 pinini kirish ko'rinmasiga sozlash PORTD |= (1 << PORTD2); // INT0 pinini yuqori qiymatga sozlash // FIRQni aktivatsiya qilish EICRA |= (1 << ISC01) | (1 << ISC00); // Harakatdan oldin firqani yoqish (INT0) EIMSK |= (1 << INT0); // INT0 firqasini yoqish // Global firqalarni yoqish sei(); while (1) { // Dasturni bajarish } return 0; } ``` Bu misolda, `ISR(INT0_vect)` funksiya INT0 firqasini aniqlaydi va uni qabul qiladi. `INT0_vect` mikrokontroller arxitekturasiga bog'liq o'zgaruvchi nomi bo'ladi, ya'ni uni yaratish uchun sizning ishlatgan mikrokontroller arxitekturangizga qarab o'zgartirilishi mumkin. `main` funksiyasida esa INT0 pinini firqani qabul qilish uchun sozlash va uni aktivatsiya qilish jarayonlari bajariladi. Keyin, `sei()` funksiyasi orqali global firqalarni yoqish amalga oshiriladi. Interrupt ishlov beruvchisini yaratishda dikkat qilinish kerak bo'lgan nuqta, dastur yozuvchisining firqalarni aniqlash va ularga javob berishda qanchalik tez ishlayotganligidir. Qurilmangizning arxitekturasi va nomlanishi ishlatilgan dasturlash tillariga bog'liq ravishda o'zgartirilishi mumkin. 45. bat, com va exe fayllarini yaratish Bu fayllar, tizimli dasturlashda juda oson foydalaniladigan va maqsadga mos ravishda yaratiladigan fayllardir. Bu fayllarni yaratish bilan bog'liq amallar odatda ilgari tizimlar uchun mo'ljallangan dasturlarni ishga tushirishda yuzaga keladi. 1. **Bat Fayli (Batch File)**: - Bat fayllari Windows operatsion tizimida skriptlarni yozishda foydalaniladi. - Uning keng tarqalgan maqsadi komandalar ketmasdan amallar ketmasini amalga oshirishdir. - Misol uchun, siz dasturlarni birlashtirish, skanerlarni yopish yoki ma'lumotlar saqlash uchun fayllar yaratish va boshqa dasturlarni ishga tushirish uchun bat fayllaridan foydalanishingiz mumkin. - Bat fayllarining keng tarqalgan nomlari `*.bat` ko'rinishidadir. 2. **Com Fayli (Command File)**: - Com fayllari ham Windows operatsion tizimida ishlatiladi, ammo ular bajarilish jarayonida ikkilik (binary) yoki matn (text) ko'rinishida emas, balki to'g'ri bajarilishi mumkin bo'lgan fayllardir. - Ular keng tarqalgan komandalar bilan dastur yozuvchisi va interpreteri (ko'chirgich) orqali amalga oshiriladi. - Com fayllarining keng tarqalgan nomlari `*.com` ko'rinishidadir. 3. **Exe Fayli (Executable File)**: - Exe fayllari amalga oshiriladigan boshqa barcha fayllardan farq qiladi. Ular tizimda faqatgina ijro etish uchun ma'lumotlar va instruksiyalar majmuasini o'z ichiga oladi. - Exe fayllari ilovani boshlash uchun ishlatiladi. - Dastur yozuvchilari (Assembler, C++, C#, Java, Python, va h.k.) yordamida yaratiladi. - Exe fayllarining keng tarqalgan nomlari `*.exe` ko'rinishidadir. Shunday qilib, bat fayllari qisqa amallarni bajarish uchun ishlatiladi, com fayllari to'g'ri bajarilishi mumkin bo'lgan fayllardir va exe fayllari amalga oshiriladigan dasturlarni ishga tushirish uchun ishlatiladi. 46. Ilova serverlari. Tizimli dasturlashda ilova serverlari, istemolchilarning dasturlarga bog'liq so'rovlarini qabul qilib, ularni bajarib berish uchun xizmat qiladigan dastur komponentlari yoki tizimlardir. Ular ko'pgina istemolchilar va ilovalar orasida bo'g'lanishni ta'minlaydi va bir necha muammolarni hal qilish uchun qo'llaniladi. Ilova serverlari yordamida istemolchilar, biron-bir platforma, xizmat yoki dastur orqali so'rov yuborish va ma'lumot olishadi. Bu ilova serverlari, aloqani boshqarish, autentifikatsiya, ma'lumotlar bazasiga kirish, ma'lumotni saqlash va uni o'qish, texnologiyalarga moslangan protokollar (masalan, HTTP, TCP/IP) orqali aloqa o'rnatish va boshqalar kabi keng qo'llanmalarni amalga oshirish uchun ishlatiladi. Quyidagi ilova serverlariga misol bo'lishi mumkin: 1. **HTTP Serverlar**: Bu serverlar, Hypertext Transfer Protocol (HTTP) protokoli orqali ma'lumot almashish va tarqatish uchun ishlatiladi. Ular veb ilovalarga xizmat qilish uchun foydalaniladi va istemolchilarga veb sahifalarini ko'rsatish, fayllarni yuklash va boshqa amallarni bajarish imkoniyatini ta'minlaydi. 2. **API Serverlar**: API (Application Programming Interface) serverlar, dasturlar orasida ma'lumot almashish uchun interfeys tashkil etadi. Bu serverlar, istemolchilarga dasturlar orqali ma'lumot almashish, ma'lumotni saqlash va uni o'zgartirish, shuningdek qo'shimcha funksiyalarni amalga oshirish imkoniyatini beradi. 3. **Socket Serverlar**: Socket serverlar, TCP/IP protokollarini asoslashgan birliklar orqali ma'lumot almashish va tarqatishni ta'minlaydi. Ular odatda real vaqt rejimida aloqa, multimediya uchun streaming va boshqa yordamchi xizmatlarni taqdim etish uchun foydalaniladi. 4. **Database Serverlar**: Bu serverlar, ma'lumotlar bazasiga kirish va ma'lumotni saqlash va o'qish uchun ishlatiladi. Ular dasturlarga ma'lumotlar bazasiga bog'lanish imkoniyatini beradi va ma'lumotlar bazasining samaradorligi va xavfsizligi uchun qo'llaniladi. Ilova serverlari, tizimli dasturlashda muhim ahamiyatga ega, chunki ular istemolchilar va ilovalar orasidagi aloqalarni ta'minlashda asosiy qism hisoblanadi. Bu serverlar to'g'risidagi juda muhim qarorlar o'rganilishi kerak, masalan, arxitektur va to'g'ri tekshiruv. 47. Tarmoq ilovalari Tarmoq ilovalari, tarmoq ustida ma'lumot almashish, tarqatish va aloqa qilish uchun yaratilgan dasturlardir. Ular internet, lokal tarmoq yoki boshqa tarmoq turlari orqali istemolchilar o'rtasida ma'lumot almashishni va manbalararo ishlab chiqarishni ta'minlaydi. Tarmoq ilovalari o'rtasida elektron pochta, veb saytlar, ijtimoiy tarmoqlar, ma'lumotlar bazalari almashish interfeysi (API) va boshqalar kabi ko'plab xizmatlar mavjud. Quyidagi tarmoq ilovalaridan ba'zilari: 1. **Elektron Pochta Ilovalari**: Bu ilovalar istemolchilarga elektron xat yuborish, qabul qilish va boshqarish imkoniyatini beradi. Masalan, Gmail, Outlook, va Yahoo kabi elektron pochta xizmatlarining veb versiyalari yoki dasturlari bu tur ilovalarga misoldir. 2. **Ijtimoiy Tarmoq Ilovalari**: Bu ilovalar istemolchilarga aloqa o'rnatish, xabar yuborish va qabul qilish, rasm, video va boshqa ma'lumotlarni ulashish imkoniyatini beradi. Misol uchun, Facebook, Twitter, Instagram, va LinkedIn kabi ilovalar bu tur tarmoq ilovalariga misoldir. 3. **Veb Saytlar va Portallar**: Bu ilovalar internet orqali ma'lumot almashish va tarqatish imkoniyatini beradi. Ular xabarnomalar, maqolalar, fayllar, rasm va boshqa ma'lumotlarni taqdim etishi mumkin. Masalan, yangiliklar portallari, bloglar va onlayn xaritalar bu tur ilovalarga misoldir. 4. **Ma'lumotlar Bazalari Ilovalari**: Bu ilovalar istemolchilarga ma'lumotlarni saqlash, boshqarish va ulashish imkoniyatini beradi. Masalan, MySQL, PostgreSQL, MongoDB, va Redis kabi ma'lumotlar bazalari dasturlari bu tur ilovalarga misoldir. 5. **Boshqa Tarmoq Xizmatlari**: Bu tur ilovalar internet tarmoqlarida qo'llaniladigan boshqa xizmatlar uchun yaratiladi. Masalan, DNS serverlar, DHCP serverlar, VPN xizmatlari, va tarmoq monitoring vositalari kabi ilovalar bu tur ilovalarga misoldir. Tarmoq ilovalari tarmoqning kengaytirilgan imkoniyatlaridan foydalanib, istemolchilar o'rtasida ma'lumot almashish, taqdim etish va boshqarish imkoniyatlarini yaratish uchun juda muhimdir. Bu ilovalar, iste'molchilarning komforti, aloqalarini boshqarish va ma'lumotlarni amalga oshirishini ta'minlashga yordam beradi. 48. Leksik analizator. Leksik analizator, dastur yozuvchisi tomonidan yozilgan kodni tahlil qilishning bir qismidir. Ushbu komponent, dastur yozuvchisining sintaksis va semantikasi uchun foydalanish uchun avvalgi adamlar tomonidan yozilgan ma'lumotlarni o'qish va yozish uchun kerakli formatga o'girish uchun foydalaniladi. Leksik analizatorning asosiy vazifalari quyidagilardir: 1. **Kodni tahlil qilish**: Leksik analizator dastur yozuvchisining kodini qo'llabquvvatlash uchun uni biron-bir kalit so'zlarga, operatorlarga, o'zgaruvchilarga, sonlar va boshqalar kabi tahlil qiladi. 2. **Ma'lumotlarni ajratish**: Dastur yozuvchisidagi har bir belgi, operator yoki qatorni ajratib chiqadi va ularga kerakli ma'lumotlar vaqtincha saqlanadi. 3. **Taxminiy xatolar aniqlash**: Leksik analizator dastur yozuvchisidagi taxminiy leksik xatolarini aniqlay oladi, masalan, noma'lum belgilar yoki xato qo'llangan kalit so'zlar. 4. **Tokenlarni generatsiya qilish**: Tokenlar, leksik analizator tomonidan qo'llaniladigan sintaktik va semantik tahlil uchun kerakli bo'lib, leksik analizator bu tokenlarni generatsiya qiladi. 5. **Qoida tekshirish**: Leksik analizator dastur yozuvchisidagi belgilar va qatorlar qoidalariga muvofiq bo'lishini tekshiradi va qoidalarga mos ravishda amal qilishini ta'minlaydi. Leksik analizatorning vazifalari dastur yozuvchisi tahlili jarayonidagi birinchi qadamni tashkil etadi. Ushbu qadam, dastur yozuvchisining boshqaruv mekanizmini to'g'ri va samarali ishga tushirish uchun juda muhimdir. 49. Leksik analizatorni loyihalash Leksik analizatorni loyihalash jarayoni quyidagi bosqichlardan iborat bo'ladi: 1. **Talablar tahlili**: Birinchi navbatda, dastur yozuvchisi uchun talablar aniqlanadi va tahlil qilinadi. Bu talablar kod yozuvchisining qo'llab-quvvatlanishi, syntax tuzilishi va qoidalariga muvofiq bo'lishini ta'minlaydi. Misol uchun, dastur yozuvchisining qo'llanadigan kalit so'zlar, operatorlar, o'zgaruvchilar va sintaksisni aniqlash talablari belgilanishi mumkin. 2. **Kalit so'zlar va operatorlar ro'yxati**: Leksik analizatorning foydalanishi kerak bo'lgan kalit so'zlar va operatorlar ro'yxati tuziladi. Bu ro'yxatlar dastur yozuvchisidagi belgilangan so'zlarni va operatorlarni tanilash uchun yordam beradi. Ushbu ro'yxatlar yordamida dastur yozuvchisining tahlili amalga oshiriladi. 3. **Regular ifodalar yaratish**: Leksik analizatorning qabul qilishi kerak bo'lgan belgilar va so'zlar uchun regular ifodalar yaratiladi. Bu ifodalar, ma'lum bir belgi yoki so'zni aniqlash uchun yordam beradi. Misol uchun, "if", "while", "for" kabi so'zlar uchun regular ifodalar yaratiladi. 4. **Tokenlar va yordamchilar**: Leksik analizator tomonidan generatsiya qilingan tokenlar va yordamchilar belgilanadi. Tokenlar, dastur yozuvchisidagi har bir belgi, so'z yoki operatorni ifodalaydi. Yordamchilar esa dastur yozuvchisi tomonidan ishlatilmaydigan belgilar, so'zlar yoki operatorlar bo'ladi. 5. **Taxminiy leksik xatolar uchun nazorat**: Leksik analizator, dastur yozuvchisidagi taxminiy leksik xatolarni aniqlash va ularga ishonchli javob bermasligi uchun nazorat qiladi. Ushbu xatolar odatda noma'lum belgilar yoki kalit so'zlar kabi ommaviy xatolar bo'ladi. Leksik analizatorning loyihalash jarayoni, dastur yozuvchisining to'g'ri va samarali ishga tushirilishi uchun juda muhimdir. Ushbu jarayonda qo'llaniladigan talablar, kalit so'zlar va operatorlar ro'yxati, regular ifodalar va tokenlar katta e'tibor talab etadi. 50. Sintaktik analizator. Sintaktik analizator, dastur yozuvchisi tomonidan yozilgan kodning sintaksisini tekshirish va tahlil qilishning bir qismidir. Ushbu komponent, dastur yozuvchisidagi belgilar, so'zlar va operatorlar qatorini sintaksis bo'yicha tekshiradi va ularga to'g'ri vaqtincha o'qish tartibini o'rnatadi. Sintaktik analizatorning asosiy vazifalari quyidagilardir: 1. **Sintaksisni tekshirish**: Sintaktik analizator dastur yozuvchisidagi har bir belgi, so'z va operatorni sintaksis qoidalari boyicha tekshiradi. Ushbu tekshirish jarayonida dastur yozuvchisining to'g'ri sintaksisiga rioya qilinadi. 2. **Parsing qilish**: Sintaktik analizator belgilangan dastur yozuvchisini tarkibidagi belgilar va so'zlar qatorini sintaksis bo'yicha tahlil qiladi va unga mos ravishda tokenlar va qo'llaniladigan sintaksis strukturalarini generatsiya qiladi. 3. **Sintaksis shablonlarini tuzish**: Sintaktik analizator dastur yozuvchisidagi belgilar va so'zlar qatorini biron-bir sintaksis shabloniga mos ravishda tuzadi. Ushbu shablonlar odatda formal grammar yordamida belgilanadi. 4. **AST yaratish**: Abstract Syntax Tree (AST), dastur yozuvchisidagi sintaktik tuzilmalarni ifodalovchi grafik yoki yuqori darajadagi sintaktik qurilmalarni ifodalovchi dasturiy yagona strukturani ifodalaydi. Sintaktik analizator dastur yozuvchisini AST sifatida ifodalaydi, bu esa dasturni sintaksisini o'rganish va ishlab chiqish jarayonini osonlashtiradi. 5. **Sintaktik xatolar uchun nazorat**: Sintaktik analizator dastur yozuvchisidagi sintaktik xatolarni aniqlaydi va ularga javob beradi. Ushbu xatolar odatda sintaksis shablonlariga mos ravishda emaslik, ko'p yoki yetarli belgilar va boshqalar kabi xatolardan kelib chiqadi. Sintaktik analizatorning vazifalari, dastur yozuvchisidagi sintaksisni to'g'ri va samarali ravishda tahlil qilish va dastur yozuvchisining ishga tushirilishi uchun to'g'ri sintaksisini ta'minlashga qaratilgan. 51. Sintaksis grafik dasturlash Sintaksis grafik dasturlash, dastur yozuvchisidagi sintaksisni tavsiflash uchun sintaksis qurilmalari (syntax structure)ni ifodalovchi bir metodologiyadir. Bu metodologiya dastur yozuvchisining sintaksisini tavsiflashda ishlatiladi va odatda formal grammatika va sintaksis qurilmalari yordamida belgilanadi. Sintaksis grafik dasturlashda dastur yozuvchisining sintaksisini tasvirlash uchun qo'llaniladigan sintaksis qurilmalari (syntax structure) va sintaksis tahlili qurilmalari (parsing algorithms) mavjud bo'ladi. Sintaksis qurilmalari, dastur yozuvchisidagi belgilar va so'zlar qatorini to'g'ri va tartiblangan sintaksis strukturalariga o'girishda yordam beradi. Sintaksis grafik dasturlashning asosiy ko'nikmalari: 1. **Sintaksis qurilmalari**: Bu qurilmalar, formal grammatika yordamida dastur yozuvchisidagi sintaksisning tavsifi uchun ishlatiladi. Ular dastur yozuvchisidagi belgilar va so'zlar qatorini to'g'ri tartiblangan sintaksis strukturalariga o'girish uchun belgilanganlar. 2. **Sintaksis tahlili qurilmalari**: Bu qurilmalar, dastur yozuvchisidagi belgilar va so'zlar qatorini sintaksis qurilmalari bo'yicha tahlil qilishda ishlatiladi. Ular belgilangan sintaksis qurilmalariga mos ravishda dastur yozuvchisidagi sintaksisni tarkibdagi belgilar va so'zlar qatorini tahlil qilish uchun ishlatiladi. 3. **Abstract Syntax Tree (AST)**: AST, dastur yozuvchisidagi sintaksisni ifodalovchi grafik yoki yuqori darajadagi sintaktik qurilmalarni ifodalaydi. Bu dasturiy yagona struktura, dastur yozuvchisidagi sintaksisni tarkibdagi belgilar va so'zlar qatorini ifodalaydi va dastur yozuvchisining o'zining sintaksisini o'rganish va ishlab chiqish jarayonini osonlashtiradi. 4. **Sintaksis grafik dasturlash tillari**: Bu tillar, sintaksis qurilmalarini va sintaksis tahlili qurilmalarini o'rganish va dastur yozuvchisidagi sintaksisni ifodalash uchun ishlatiladi. Bu tillar ko'p mashhur dasturlash tillari, masalan, EBNF (Extended Backus-Naur Form), BNF (Backus-Naur Form), va ANTLR (ANother Tool for Language Recognition) kabi. Sintaksis grafik dasturlash metodiologiyasi, dastur yozuvchisidagi sintaksisni to'g'ri va samarali ravishda ifodalash va dastur yozuvchisining ishga tushirilishi uchun to'g'ri sintaksisini ta'minlashda juda muhimdir. 52. Kod yaratish. Kod yaratish, dastur yozuvchisi tarkibidagi funksiyalarni, qatlarini va ma'lumotlar strukturalarini birlashtirib, kompyuter uchun amalga oshirish uchun kod ko'rinishida yozish jarayonidir. Bu jarayon, dastur yozuvchisining maqsadlarini, talablarni va muhitini tushunish bilan boshlanadi. Kod yaratishning asosiy bosqichi quyidagilardan iborat bo'ladi: 1. **Tanishuv**: Birinchi navbatda, dastur yozuvchisining yaratish jarayonida yoki amaliyotda bajarilishi kerak bo'lgan vazifalarni tushunish lozim. Bu, dasturni qanday ishlata olamiz va nima uchun ishlatamiz, savollarga javob topish uchun juda muhimdir. 2. **Dastur yozuvchisini tanlash**: Keyingi bosqich, dastur yozuvchisini tanlashdan iborat. Bu, dastur yozuvchisi uchun mos keluvchi dasturlash tili, o'quvchi yoki qulayliklarni hisobga oladi. 3. **Dastur yozuvchisini tuzish**: Dastur yozuvchisini tanlaganidan so'ng, kod yaratish jarayonida ishlatiladigan qoidalarni va sintaksisni tuzish lozim. Bu, dastur yozuvchisidagi belgilangan funksiyalarni va ma'lumotlar strukturalarini to'g'ri yozishga yordam beradi. 4. **Kodni yozish**: Bu bosqich, maqsadga mos ravishda dastur yozuvchisidagi funksiyalarni va ma'lumotlar strukturalarini yozishdan iborat. Bu, belgilangan vazifalarni bajarish uchun dastur yozuvchisidagi sintaksis qurilmalari va komponentlaridan foydalanishni o'z ichiga oladi. 5. **Test va tekshirish**: Yozilgan kodni tekshirish va sinovdan o'tkazish, dasturni ishga tushirishdan oldin juda muhimdir. Bu, dasturning to'g'ri ishlashini ta'minlash uchun xato va kamchiliklarni aniqlashga yordam beradi. 6. **Optimallashtirish va to'liqroq tekshirish**: Kod yaratilgandan so'ng, uning darajasini oshirish va samarali ishga tushirilishi uchun optimallashtirish lozim. Bundan tashqari, kodni to'liqroq tekshirish, muvaffaqiyatli ishga tushirish uchun zarur bo'ladi. Kod yaratish jarayoni, dastur yozuvchisining maqsadlari va vazifalariga qarab, shuningdek, dastur yozuvchisining tanlangan tili va muhitiga qarab o'zgaradi. Boshqacha aytganda, to'g'ri ishlovchi va samarali dastur yozish uchun sodda va o'rganilgan yondashuvlar yordam beradi. 53. Xoare triadalari va tetradalariga tarjimasi. Xoare triadalari va tetradalariga tarjimasi mavjud dastur yozuvchilari va yozilgan dasturlarni tahlil qilishda keng qo'llaniladi. Bu terminologiya, dastur yozuvchilari uchun yozilgan formal grammatika va sintaksis qurilmalari uchun ishlatiladi. 1. **Token (Xoare Triadasi)**: - **Xoare Triadasi**: Bu terminologiyaning qanday ma'noda ishlatilganligi to'g'risida aks etib, "token" terminologiyasi kod yozuvchisidagi eng kichik betik qismi yoki bir belgi, so'z, operator yoki ifodani ifodalaydi. 2. **Parse Tree (Pars-qarva aql bo'yi)**: - **Pars-qarva aql bo'yi**: Bu terminologiyada, "parse tree" yoki "parsing tree" sintaktik tahlilning natijasini ifodalovchi grafik tarkibidagi strukturani anglatadi. Bu qurilma dastur yozuvchisidagi belgilangan belgilar va so'zlar qatorini sintaksis bo'yicha tahlil qilishda yordam beradi. 3. **Syntax Tree (Sintaksisli aql bo'yi)**: - **Sintaksisli aql bo'yi**: Bu terminologiyada, "syntax tree" yoki "abstract syntax tree (AST)" dastur yozuvchisidagi sintaksisni ifodalovchi grafik yoki yuqori darajadagi sintaktik qurilmalarni ifodalaydi. Bu qurilma dastur yozuvchisining sintaksisini tarkibdagi belgilar va so'zlar qatorini ifodalaydi va dastur yozuvchisining o'zining sintaksisini o'rganish va ishlab chiqish jarayonini osonlashtiradi. 4. **Quadruple (Tetradasi)**: - **Tetradasi**: Bu terminologiyaning qanday ma'noda ishlatilganligi to'g'risida aks etib, "quadruple" terminologiyasi tetradaning uch xususiyatini belgilaydi. Tetrada, boshlang'ich qatlam, operator, operandlar va natija o'zgaruvchisidan iborat bo'ladi. Bu qurilma ifodalangan dastur yozuvchisining avvalgi belgilangan ifodasini, keyingi amalni va natijani ifodalaydi. Xoare triadalari va tetradalariga tarjima qilish, dastur yozuvchisining tahlilida yordam beradi va kod yaratish jarayonida dastur yozuvchisidagi ifodalar va amallarni tushunishga yordam beradi. 54. Past darajadagi assembler tilida kiritish va chiqarish Past darajadagi assembler tillarida kiritish va chiqarish, dastur yozuvchisi ko'plab amalni amalga oshirish uchun assembler kodini yozish uchun foydalaniladi. Bu assembler tillari, ko'plab muhim amallarni bajarish uchun o'qib yozishga yordam beradi va kompyuterda bajarilishi kerak bo'lgan avvalgi darajadagi tilni o'z ichiga oladi. Past darajadagi assembler tillarida ko'plab yordamchi funksiyalar mavjud bo'lib, ular boshqaruv tizimining tarkibiy qismi va ma'lumotlar strukturalariga murojaat qilish uchun ishlatiladi. Ular, ma'lumotlar o'qish, yozish, qayta ishlash, kiritish va chiqarish uchun yordamchi komandalarga ega bo'ladi. Past darajadagi assembler tillarining ba'zi ko'rinishlari quyidagilardir: 1. **MOV**: Bu assembler komandasi, ma'lumotlarni kuzatish va ma'lumotlar o'girishini amalga oshirish uchun ishlatiladi. Misol uchun, MOV AX, BX, ma'lumotlarni AX va BX o'zgaruvchilariga ko'chiradi. 2. **ADD**: Bu komanda, ikki yoki undan ko'p operandni qo'shish uchun ishlatiladi. 3. **SUB**: Bu komanda, ikki operandni ajratib oladi va ulardan birini ikkinchisidan ayiradi. 4. **JMP**: Bu komanda, belgilangan manzilga jarayonga o'tkazadi. Shuningdek, shart operatorlari bilan bog'liq shartlarni tekshirish uchun ham ishlatiladi. 5. **INT**: Bu assembler komandasi, interrupt tizimlariga chaqirish uchun ishlatiladi. Masalan, INT 21h, DOS funksiyalarini chaqirish uchun o'zaro aloqani yaratadi. Past darajadagi assembler tillari ko'plab vaqtincha odatiy instruksiyalarga yoki direktivalarga asoslanadi. Bu tillar kompyuterning asosiy funksiyalarini yuklatish va bajarganida dasturning istalgan qismi uchun to'g'ri assembler kodini yaratishda yordam beradi. 55. Uzilishlarni boshqarish Uzilishlar, dastur yozuvchisining maqsadlarini va vazifalarini bajarish uchun zarur bo'lgan muhim qismlardan biridir. Uzilishlar dastur yozuvchisi tomonidan ma'lumotlarni saqlash, ularga murojaat qilish, ularni tahrirlash, o'chirish va boshqa amallarni bajarish uchun foydalaniladi. Uzilishlar, dastur yozuvchisinin kuchli va samarali bo'lishini ta'minlash uchun juda muhimdir. Uzilishlarni boshqarishning asosiy vazifalari quyidagilardir: 1. **Ma'lumotlarni saqlash**: Uzilishlar ma'lumotlarni saqlash va ularning tahrir qilinishi uchun zarur bo'lgan joylar bo'lib, bu ma'lumotlar odatda fayllar, bazalar yoki o'zgaruvchilar shaklida bo'ladi. 2. **Ma'lumotlarga murojaat qilish**: Uzilishlar dastur yozuvchisining ma'lumotlarga murojaat qilishini, ularni o'qish va ularni tahrirlashni ta'minlash uchun foydalaniladi. Bu murojaat, fayllardan ma'lumot o'qish, bazalardagi qatorlarga murojaat qilish va o'zgaruvchilardan ma'lumot olish shakllarida bo'lishi mumkin. 3. **Ma'lumotlarni tahrirlash**: Uzilishlar ma'lumotlarni o'zgartirish, qo'shish, o'chirish va boshqa tahrirlarni amalga oshirish uchun foydalaniladi. Bu, dastur yozuvchisining ma'lumotlar bilan ishlashining asosiy qismlaridan biridir. 4. **Xavfsizlik**: Uzilishlar ma'lumotlarni xavfsiz saqlash va foydalanuvchilarning boshqa dasturlarning kirishidan himoya qilish uchun xavfsizlikni ta'minlashda muhim rol o'ynaydi. Bu, fayllarni shifrlash, foydalanuvchilarni identifikatsiya qilish, kirishning tekshirilishi va boshqa xavfsizlik choralari bilan bog'liq bo'lishi mumkin. 5. **Ma'lumotlarni qayta ishlash**: Uzilishlar o'zgaruvchilarni ma'lumotlar bazasiga qayta yuklash, ularni sozlash va boshqa qayta ishlash amallarini bajarishda yordam beradi. Bu, ma'lumotlar tuzilmasining bo'shlig'ini to'ldirish, yoki o'zgaruvchilarni o'zgartirish jarayonida ishlatiladi. Uzilishlar dastur yozuvchisining ishlashini samarali va aniq qilish uchun juda muhimdir. Bu, dastur yozuvchisining amaliyotini bajarishda qo'llaniladigan asosiy vositalar va funksiyalarni ta'minlashda yordam beradi. 56. Apparatli uzilishlar Apparatli uzilishlar, dastur yozuvchisining maqsadlarini bajarish uchun asosiy qurilmalardan biri bo'lib, kompyuter arxitekturasining asosiy qismini tashkil etadi. Bu uzilishlar kompyuterda ma'lumotlar o'qish, yozish, xotirani boshqarish va boshqa amallarni amalga oshirish uchun qo'llaniladi. Apparatli uzilishlar quyidagi asosiy qismlardan iborat bo'lishi mumkin: 1. **Processor (Protsessor)**: Protsessor, kompyuterda amaliyotlarni bajarish uchun ma'lumotlarni qabul qilish, ularni qayta ishlash va natijalarni chiqarishdan mas'ul bo'lgan qurilma. U yozilgan dasturni o'qish, unga amalni bajarish va natijalarni chiqarishda katta rol o'ynaydi. 2. **Memory (Xotira)**: Xotira, kompyuterda ma'lumotlarni saqlash uchun ishlatiladi. Bu, dastur yozuvchisi tomonidan ishlatiladigan ma'lumotlarni va dastur yozuvchisining o'zining ishlab chiqishi uchun zarur ma'lumotlarni saqlash uchun foydalaniladi. 3. **Input/Output (Kiritish/Chiqarish)**: Kiritish/chiqarish qurilmalari, kompyuterda ma'lumotlarni kiritish va chiqarish uchun ishlatiladi. Bu, klaviatura, ekran, printer, disk va boshqa kiritish/chiqarish qurilmalari bilan bog'liq bo'lishi mumkin. 4. **Control Unit (Boshqarish bloki)**: Boshqarish bloki, kompyuterda amalga oshirilayotgan amallarni boshqarish uchun javobgar bo'lgan qurilma. U, protsessor va qurilmalarning amalini boshqarishda katta rol o'ynaydi. 5. **Arithmetic Logic Unit (Aritmetika-Mantiqiy blok)**: Aritmetika-mantiqiy blok, kompyuterda arifmetik va mantiqiy amallarni bajarish uchun mas'ul bo'lgan qurilma. U, protsessor ichidagi amaliyotlarni amalga oshirishda muhim rol o'ynaydi. Apparatli uzilishlar, dastur yozuvchisining maqsadlarini bajarish uchun zarur bo'lgan qurilmalar bilan bog'liq bo'lib, kompyuterda dastur yozuvchisi yozilgan dasturni amalga oshirish uchun zarur ma'lumotlarni saqlash, qayta ishlash, kiritish/chiqarish va boshqa amallarni bajarishda juda muhimdir. 57. Dasturiy uzilishlar Dasturiy uzilishlar, dastur yozuvchisi yoki dastur ishlab chiqaruvchilari tomonidan dastur yozuvchisining maqsadlarini amalga oshirish uchun yaratilgan asosiy vositalar va resurslar to'plamini ifodalaydi. Bu uzilishlar dastur yozuvchisi uchun kerakli ma'lumotlar, funksiyalar, modullar va qo'llanmalar bilan bog'liq bo'lib, dastur yozuvchisining ishlashini samarali va aniq qilish uchun muhimdir. Dasturiy uzilishlar quyidagi asosiy qismlardan iborat bo'lishi mumkin: 1. **Integrated Development Environment (IDE)**: IDE, dastur yozuvchisi uchun ma'lumotlar yozish va dasturlarni ishlab chiqish jarayonini osonlashtirish uchun o'z ichiga olgan muhitdir. Bu muhitning asosiy qismlari redaktor (editor), dastur yozuvchisi, debug oynasi, boshqaruv paneli va boshqa dasturiy vositalardir. 2. **Libraries (Kutubxonalar)**: Kutubxonalar, dastur yozuvchisi uchun amaliyotlar uchun foydalaniladigan o'zgaruvchilar, funksiyalar va modullar to'plamini ifodalaydi. Bu kutubxonalar dastur yozuvchisiga qo'llanma yozish va dasturini ishlab chiqishda yordam beradi. 3. **Frameworks (Kerakliklar)**: Kerakliklar, dastur yozuvchisi uchun yaratilgan keng tarqalgan tizimlar to'plamidir, u barcha asosiy va ko'p ishlatiladigan funksiyalarni o'z ichiga oladi. Kerakliklar, dastur yozuvchisining dasturini tezkor yaratish va ishlab chiqish jarayonini osonlashtirish uchun foydalaniladi. 4. **Documentation (Hujjatlar)**: Dastur yozuvchisi uchun yaratilgan dastur haqida to'liq va aniq hujjatlar, qo'llanmalar va ko'rsatmalar to'plami. Bu hujjatlar dastur yozuvchisining dasturini ishlatish, yaratish va muammolarini hal qilishda yordam beradi. 5. **Version Control Systems (Versiyalash Tizimlari)**: Versiyalash tizimlari, dastur yozuvchisinin yaratgan dasturlarining, dastur yozuvchisinin ishchi versionlarining va tahrirlarining nazoratini olib boradigan dasturiy vositalar to'plamidir. Dasturiy uzilishlar, dastur yozuvchisining ishini osonlashtirish, samarali qilish va yaxshi tahlil qilish uchun muhimdir. Bu uzilishlar dastur yozuvchisinin maqsadlarini bajarishda yordam beradi va dastur yozuvchisining ishlashini yaxshi ko'rsatishga qaratilgan. 58. Berilgan dasturning Leksik tahlilining jadvallarini hosil qiling: Leksema turlari jadvali, Kalit so‘zlar jadvali, Ajratkichlar jadvali, Raqamlar jadvali, Identifiatorlar jadvali, <Simvol><kod> turidagi Leksemalar ketma-ketligi jadvali. Leksik tahlilning jadvallari dasturlashda dasturning ma'lumotlarni tahlil qilishda yordam beradi. Quyidagi jadvallar berilgan dasturning leksik tahlilini ifodalayadi: 1. **Leksema turlari jadvali**: | Leksema turining nomi | Belgi | |------------------------|-------| | Identifikator | id | | Kalit so‘z | keyword | | Ajratkich | separator | | Raqam | number | | Operator | operator | | Simvol | symbol | 2. **Kalit so‘zlar jadvali**: | Kalit so‘z | |---------------| | if | | else | | while | | for | | int | | float | | return | | break | | continue | | etc. | 3. **Ajratkichlar jadvali**: | Ajratkichlar | |--------------| |; | | () | | {} | [] |, |: | etc. | | | | | 4. **Raqamlar jadvali**: Raqamlar jadvalida barcha sonlar ketma-ketligi ko'rsatiladi. 5. **Identifikatorlar jadvali**: Identifikatorlar jadvalida dasturda ishlatilgan barcha identifikatorlar ko'rsatiladi. 6. **<Simvol><kod> turidagi Leksemalar ketma-ketligi jadvali**: Bu jadvallarda dasturda ishlatilgan xususiy simvollar va ularning kodlari ko'rsatiladi. Leksema turlari jadvallari, berilgan dasturning har bir leksemalarni aniq turlarga bo'lishda yordam beradi. Bu jadvallar dastur yozuvchisining leksik tahlilini tuzishda yoki dasturni tahlil qilishda qulaylik yaratish uchun foydalaniladi. 59. Berilgan ifodaning sintaktik tahlil daraxtini quring Sintaktik tahlil daraxti, berilgan dasturning sintaksisini tahlil qilish uchun foydalaniladi va ifodalarning qanday qatorlarda tuzilganligini ko'rsatadi. Quyidagi misol ifoda bo'lsa: ``` if (x > 5) { y = 10; } else { y = 5; } ``` Bu ifodaning sintaktik tahlil daraxtini quyidagi ko'rinishda ko'rsatish mumkin: ``` if | ├─ (condition)─┐ │ │ x>5 { } | └─── assignment ────┐ │ y = 10 if-else | ├─ (condition)─┐ │ │ x>5 { } | └─── assignment ────┐ │ y = 10 else | └── { } | └─── assignment ────┐ │ y=5 ``` Bu sintaktik tahlil daraxti, `if` va `else` shartlarini, shartlar ichidagi ifodalarni va ularga mos keladigan amallarni tuzilgan shaklida ifodalaydi. Daraxtda `if` sharti bo'lgan qismi yuqoridagi, `else` sharti bo'lgan qismi esa pastdagidir. Har bir shart qismida `condition`ni tekshirish va boshqa amallarni bajarish uchun joylar bo'lgan qism tahlil qilingan.