“Kompyuter injiniringi” fakult ti
Download 0.63 Mb. Pdf ko'rish
|
ushbu uslubiy korsatma telekommunikatsiya texnologiyalari talim yonalishi talabalari uchun moljallangan. (1)
- Bu sahifa navigatsiya:
- MASALA 6
- MASALA 19
- MASALA 21
- MASALA 25
- Mavzu: Identifikatorlar jadvalini tashkil etish Ishdan maqsad
- Leksem turidagi kod Jadvaldagi rakam I 5
- Dastur ishining ifodalanishi
- Tajriba ishining bajarilish tartibi (algoritmi)
- 5,6-tajriba ishining yechilishiga doir masala varianti. Masala
- Xulosa
MASALA 4 Matn redakt rining quyidagi el ntlarini bajaruvchi dasturni tuzish: faylni str lkalar rqali qarab chiqish –o’ngga, - chapga,- t paga,- pastga. MASALA 5 Grafik r dakt rning kuyidagi el ntlarini bajaruvchi dasturni tuzish: figuralarni chizish va saklash (faylga yozish). MASALA 6 Matn b rilgan: matnning arf va pr llardan farkli b lgilari b r yoki yukligini aniklash. Shunday b lgi t pilganda t vush chikarish. MASALA 7 Matn b rilgan: Ushbu matn a) id ntifikat rmi b) butun kurinishli unlik yozuvmi aniklash dasturini tuzish. MASALA 8 Ekran mayd nida o’z g’irlik markazi atr fida aylanuvchi turli t nli uchburchakni if dalash dasturini tuzish. MASALA 9 Ekran mayd nida o’z markazi atr fida aylanuvchi to’g’ri t nli uchburchakni if dalash dasturini tuzish. MASALA 10 Ekran mayd nida o’z markazi atr fida aylanuvchi to’g’ri turtburchakni if dalash dasturini tuzish.
Ekran mayd nida o’z cho’qqilarining biri atr fida aylanuvchi tugri turtburchakni if dalash dasturini tuzish.
Ekranda uz qdan yaqinlashuvchi sharni if dalash dasturini tuzish. MASALA 13 Tuganmas tsikl dasturini tuzish. Chiqish “Enter” klavishasini b sish rqali amalga shiriladi.
tiyoriy yo’nalishda arakatlanuvchi sharni if dalash dasturini tuzish. B shqaruv str lkalar rqali amalga shiriladi.
Ekranda tas difiy ravishda 100 ta nuqtani chizish dasturini tuzish. MASALA 16 Kurs r va ekran rangini aniql vchi dasturni tuzish. So’ngra i tiyoriy rangni o’rnating. MASALA 17 Ekranda i tiyoriy b lgini shriftini o’zgartirish dasturini tuzish. MASALA 18 So’zlarni k nt kst qidirish va o’zgartirish dasturini tuzish. MASALA 19 18 Matnni f rmatlash va ushbu matnni print r va ekranga chiqarishni amalga shirish dasturini tuzish.
Quyidagi cho’qqilarga ega (100,100), (150,100), (170,120), (150,140), (100,140) shburchakni if dalash dasturini tuzish. Mayd nni b shqa rang bilan bo’yash.
Ekranda arakatlanuvchi pirpirakni dasturini tuzish. MASALA 22 Ekranda billiard sharini arakatini luzasiz b shqarish dasturini tuzish. MASALA 23 Ekran o’lch viga t ng spiral matritsani qurish dasturini tuzish. MASALA 24 9 ta bir-birini ichiga j ylashgan yashil, qizil va jigar rangga bo’yalgan k ns ntrik aylanalarni chizish dasturini tuzish.
10 ta bir-birini ichiga j ylashgan yashil va qizil rangga bo’yalgan kvadratlarni chizish dasturini tuzish.
19 Mavzu: Identifikatorlar jadvalini tashkil etish Ishdan maqsad: Regulyar grammatika nazariyasining asosiy tushunchalarini leksik taxlilchilarning ish printsiplari bilan tanishgan xolda o’rganish, berilgan sodda til misolida skanerni ko’rish bilimlarini olish.
Kompilyatorning ishi alfavitni, leksikani, sintaksisni semantikani (mazmunni) saqlagan xolda o’zgartirishdir. Alfavit – til konstruktsiyasini ko’rishda foydalaniladigan mumkin bo’lgan belgilar to’plamidir. Leksika – tilning aloxida ma’noli birliklari to’plamidir (leksemalar). Leksema – tilning ma’noga ega bo’lgan minimal konstruktsiyasidir. Leksemalarga o’zgaruvchilar ismlari, xizmatchi so’zlar, konstantalar, amal belgilari, ajratkichlar va x.k. Sintaksis – tilning tugri ifodalash imkonini beradigan qoidalar tizimidir. Semantika – sintaksis jixatidan tugri konstruktsiyalarning ma’noviy bo’lagini ifodalaydi. Alfavit, leksika, sintaksis formal ko’rinishda berilishi mumkin. Semantika esa ko’pincha formallashgan emas, semantika qoidalarining tekshirish algoritmlari ko’rinishida beriladi. Kompilyator ishining umumiy chizmasi ikki fazadan tashkil topadi: 1. taxlil fazasi 2. sintez fazasi 1. Taxlil fazasi leksik analizator ishidan boshlanadi. (skanerdan). U kiritilgan dasturning karab chikishdan boshlanadi, turli leksemlarni ajratish va klassifikatsiyasi va keyingi bosqichga uzatiladigan mos jadvallarni to’ldirishdan iborat. Skaner quyidagi jadvallardan foydalanadi: 1) Tilning terminal belgilari jadvali. U skaner ishi uchun boshlang’ich hisoblanadi va kompilyatorni ishlab chiqaruvchisi tomonidan quriladi. Terminal belgilar quyidagilardir: ajratkichlar amal ishoralari tilning kalit suzlari 2) Belgili ismlar jadvali (identifikatorlar). Skaner bu jadvalga xar bir uchragan ismni kiritadi, agar u qoidaga asosan qurilgan va kalit so’zlarga tegishli bo’lmasa. 3) Konstantalar jadvali. Xar bir konstanta uchun quyidagi xarakteristikalar tegishlidir: Qiymat
Tur Asosi (Osnovanie SS) Kenglik (xotira soxasi ulchami) Natijada dastur jadvallar to’plamiga aylanadi. Bunday shakl kompilyator ishining quyidagi bo’lagi uchun qulay xisoblanadi. Bundan tashqari, xar birida 2 tadan maydoni bo’lgan yozuvlardan tashkil topgan leksemlar jadvali quriladi.
20 I – leksema identifikator ekanligini belgisidir. 5 – identifikatorlar jadvalidagi o’rin. Xar bir leksemaga leksemalar kodlari jadvalidagi o’z yozuvi mos keladi, bu erda birinchi yozuvga birinchi leksema mos keladi.
Leksik taxlilchi turli konstantalar, identifikatorlar va kalit so’zlar bilan ish yuritadi. Konstanta va identifikatorlar tili kup xollarda regulyar buladi, ya’ni regulyar grammatikalar yordamida ifodalangan buladi. Regulyar grammatikalar uchun anglovchilar bulib chekli avtomatlar xisoblanadilar. Ixtiyoriy regulyar grammatika uchun nodeterminirlangan avtomat kurish mumkin bulgan, ushbu grammatika bilan berilgan tilni zanjirlarini anglovchi, koidalar mavjud. Avtomat ishi taktlar bo’yicha bajariladi. Har bir navbatdagi I taktda avtomat qandaydir q i
belgini kiruvchi belgilar zanjiridan o’qiydi va uz xolatini q iQ1 q (q
i ,w) uzgartiradi, sungra kiruvchi belgilar zanjirining kursatkichi keyingi belgiga suriladi va iQ1 takt boshlanadi. Bu jarayon kiruvchi belgilar zanjiri tugaguniga kadar davom etadi. Belgilar zanjiri oxirini maxsus belgi bilan belgilanadi. 1 takt oldidan avtomat boshlangich q 0 xolatda buladi deb xisoblanadi. Avtomat chizma ravishda birtomonga yunaltirilgan grafda ifodalanadi, unda chukkilar xolatni, kobiklar esa bir xolatdan ikkinchi xolatga utishni ifodalaydilar. Kobikdagi belgilarning belgilanishi esa utish funktsiyasiga mos keladilar. Agar utish funktsiyasi bir necha belgi buyicha q xolatdan q’ xolatga utishni kuzda tutsa, u xolda ular urtasida bitta kobik kuriladi, va belgilanishda barcha utishlar yuz berayotgan belgilar yoziladi.
Tilning kiruvchi zanjirlarini anglash uchun foydalanilayotgan chekli determinirlangan avtomatning grafi 3 rasmda keltirilgan. Leksik taxlilchini normal ish xolatida boshlangich va oxirgi xolati mos keladi (rasmda "q" xolat). Xatolik kiruvchi zanjir xolatida avtomat ERROR xatolik xolatiga tushadi. Bu xolda avtomat ishi tuxtatiladi. Bundan tashkari, avtomat uchun tipik bulib ID (uzgaruvchi) va CONSTANT (konstanta) xolati xisoblanadi. Avtomatning kolgan xolatlari kompilyator uchun mumkin bulgan kiruvchi til leksemalari bilan aniklanadilar. Xar bir oxirgi "q" xolatga utish joriy kiruvchi zanjirning oxiri xakida ma’lumot beradi. Bu xolatda anglangan zanjirni taxlili va avtomatni navbatdagi kiruvchi belgilar zanjiri uchun kaytaishlatilishi amalga oshiriladi. Kiruvchi belgilar zanjirining ba’zi bir belgilarining takroriy kayta ishlanishi mumkin. Bu avtomatni oxirgi xolatga olib keluvchi belgi keyingi belgilar zanjirining boshlanishi xisoblangan xolda zarurdir. Natijalar Leksik taxlilning dasturiy realizatsiyasi LexFSM va LexAnalyser modullari kurinishida keltirilgan. LexFSM – belgilarning kiruvchi zanjirini anglovchi avtomat ishini aks ettiradi. LexAnalyser kiruvchi fayl matnini uni belgilarini LexFSM modulni suroviga kura junatish uchun tayyorlaydi. U kiruvchi matnni probel belgilari va keraksiz belgilarini tashlab yuboradi (tabulyatsiya belgilari, karetkani kaytishi va x.k.). LexFSM oxirgi xolatlardan biriga utgan xolda, u boshkaruvni LexAnalyser modulga uzatadi. U uz navbatida ish natijalarini ekranga chikaradi va xato uchragan kator xakidagi xatoliklarni bildiradi. Bundan tashkari, agar LexFSM "q" oxirgi xolatga utsa va shunday kilib kiruvchi belgilar zanjirini anglasa, u olingan leksemani u xakidagi ma’lumot bilan birga LexAnalyser ga uzatadi, u esa uni uz leksemalari ruyxatiga kushib kuyadi. Faylni kayta ishlash tugashi bilan LexAnalyser modul leksemalar
21 ruyxatini LexTab grafik moduliga yuboradi, u esa natijaviy leksemalar ruyxatini jadvallar kurinishida aks ettiradi. Xuddi shunday modullardan xar biri uz xarakatlari ketma-ketligi xakidagi ma’lumotni berib turadi, bu esa uz navbatida taxlilchi ishini kuzatib turish imkonini beradi. Bu ma’lumotlar xam LexTab grafik modul yordamida ekranda aks etadi. Matnli faylni kayta ishlash misolini karaymiz: program
begin begine:q1; a:q5; repeat
if a>3 then a:q3 else i:q0 endif until iq0 end; end.
Leksik taxlilchining ish natijalari kiskacha 1 jadvalda keltirilgan. 1 jadval Leksema Leksemalar turi Identifikatorlar jadvalidagi identifikator rakami Program 'program' kalit suzi Begin 'begin' kalit suzi Begine Uzgaruvchi 1 :q Uzlashtirish operatori ':q' 5 Konstanta ; Ajratuvchi A Uzgaruvchi 2 :q Uzlashtirish operatori ':q' 5 Konstanta ; Ajratuvchi Repeat 'repeat' kalit suzi If 'if' kalit suzi A Uzgaruvchi 2 > Amal belgisi '>' 3 Konstanta Then 'then' kalit suzi A Uzgaruvchi 2 :q
':q' 3 Konstanta Dastur ishining ifodalanishi Chekli determinirlangan avtomatning grafi asosida leksik taxlilchining dasturi realizatsiyasi ishlab chikildi. Faylni yuklash vkladkasi (1 rasm) foydalanuvchiga yuklanuvchi faylni karab chikish, leksik taxlil xatoligi xolatida xato katorni kurish va tanlash imkonini beradi.
22 5.1rasm – Faylni yuklash vkladkasi Leksik taxlilchining ish natijalari «Leksemalar jadvali» vkladkasida chikariladi (2 rasm).
5.2 rasm – Vkladka "Leksemalar jadvali" Kiruvchi fayldagi leksik xato uchragan xolda ekranga xatolik xakidagi ma’lumot chikariladi va faylni yuklash vkladkasida xatolik qator qizil rang bilan chiqadi (3 rasm).
23 5.3 rasm – Xatoliklar chiqishi Tajriba ishining bajarilish tartibi (algoritmi): 1.Masalaning qo’yilishini ifodalash. 2. Amalga oshirilayotgan tilda tekshiruv misollarini tuzish.Juda bo’lmaganda bitta misol translyatsiya qilinayotgan fayldagi bo'lishi mumkin bo’lmagan belgilarga dasturni javobini tekshirishi kerak 3.Dasturlash tilida skanerlash moduli dasturini tuzish va tekshiruv misollarida test o’tkazish. 4.Ish natijasida leksemalar va ularning sinflarini belgilariga ega jadval hosil qilinadi. 5.Natijalarni qog’oz yoki monitor ekraniga chiqarish. 6.Tajriba ishi bo’yicha hisobot tayyorlash. Hisobotga talablar:
Xisobotda qo’yilgan masalaning berilishi, ishdan maqsad, nazariy qismi, ishning bajarilishi algoritmi, dastur matni, olingan natijalar, xulosalar va foydalanilgan adabiyotlar aks ettirilishi kerak.
1.Taxlil fazasi nima? 2. Sintez fazasi nima? 3. Tilning terminal belgilari jadvalida nimalar aks etadi? 4. Konstantalar jadvalida nimalar aks ettiriladi?. 5. Leksemalar kodlari jadvali nima uchun tashkil etiladi? 24 6. Bir-ikki va uch utishli kompilyatorlarning yutuklari nimalarda kurinadi? 7. Kompilyator va interpretatorning farki nimada? 8. Regulyar grammatikaning yutuk va kamchiliklari nimalardan iborat? 9.Ikkidarajali grammatikani kim birinchi bulib ifodalagan va ular nima maksadlarda kullaniladi? 10. Atributiv grammatikadan kanday maksadlarda foydalaniladi?
ifodalar identifikatorlardan tashkil topgan, konstantalar 0 va 1, o’zlashtirish belgisi :q, amal ishoralari or, xor, not, and va () (4-rasm).
25 5.4-rasm. Masalaning qo’yilishining grafik chizmasi. Dastur matni #include #pragma hdrstop #include "Unit2.h" G’G’--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm2 *Form2; G’G’--------------------------------------------------------------------------- __fastcall TForm2::TForm2(TComponent* Owner) : TForm(Owner) { SG->Cells[0][0]q" "; SG->Cells[1][0]q"Znachenie leksemo’"; SG->Cells[2][0]q"Tip leksemo’"; OD->InitialDirqExtractFilePath(Application->ExeName); SD->InitialDirqExtractFilePath(Application->ExeName); } G’G’--------------------------------------------------------------------------- 26 void __fastcall TForm2::BitBtn1Click(TObject *Sender) {if(FileExists(ExtractFilePath(Application->ExeName)Q"Test.txt")qq1) Memo->Lines- >LoadFromFile(ExtractFilePath(Application->ExeName)Q"Test.txt"); else if (OD->Execute()) Memo->Lines->LoadFromFile(OD->FileName);} G’G’--------------------------------------------------------------------------- void __fastcall TForm2::BitBtn2Click(TObject *Sender) {if (SD->Execute()) Memo->Lines- >SaveToFile(SD->FileName);} G’G’--------------------------------------------------------------------------- AnsiString KeyWords[]q{"or","xor","and","not"}; AnsiString SI[]q{" ","g’n","g’t",")","(",":",";"}; int *A;
AnsiString ParseString(AnsiString Src,int StP,int &EnP) { for(int iqStP;i if (Src.SubString(i,1)qqSI[j] || Src[i]qq'g’n' || iqqSrc.Length()) { EnPqi;
if(Src[i]qq'g’n') return Src.SubString(StP,EnP-StP-1); else return Src.SubString(StP,EnP-StP); } }
void __fastcall TForm2::GoBtnClick(TObject *Sender) { Memo->TextqMemo->TextQ" "; AnsiString TEMP;int xq0,scq1,ZSq0; G’G’
for(int iq1;i {
if(Memo->Text[i]qq'{') {kaq1;iQQ;continue;} if(Memo->Text[i]qq'}') {kaq0;iQQ;continue;} if(kaqq1) {iQQ;continue;} if(int(Memo->Text[i])qq13) {iQQ;continue;} if(Memo->Text.SubString(i,2)qq":q") {
SG->Cells[1][sc]qMemo->Text.SubString(i,2);SG->Cells[0][sc]qsc;scQQ; SG->RowCountqsc;iQq2;continue; } TEMPqParseString(Memo->Text,i,x); if(x!qi && Memo->Text[i]!q'g’n') { SG->Cells[1][sc]qTEMP; SG->Cells[0][sc]qsc;scQQ; SG->RowCountqsc; iqx;
} 27 else
{ if(Memo->Text[i]qq'(' || Memo->Text[i]qq')' || Memo->Text[i]qq';' || Memo- >Text[i]qq':') {
SG->Cells[1][sc]qMemo->Text[i];SG->Cells[0][sc]qsc;scQQ; SG->RowCountqsc; } iQQ;}}
Aqnew int[SG->RowCount]; for(int iq1;i { if (SG->Cells[1][i]qq"") {SG->Cells[2][i]q"";goto end;} for(int jq0;j<4;jQQ) if(SG->Cells[1][i]qqKeyWords[j]) {SG->Cells[2][i]q"Logicheskiy operator ";goto end;} if (SG->Cells[1][i]qq":q") {SG->Cells[2][i]q"Operator prisvaivaniya";goto end;} if (SG->Cells[1][i]qq'0' || SG->Cells[1][i]qq'1') {SG->Cells[2][i]q"Binarnaya konstanta";goto end;} if (SG->Cells[1][i]qq';') {SG->Cells[2][i]q"Razdelitel";goto end;} if (SG->Cells[1][i]qq'(') {SG->Cells[2][i]q"Otro’vayuhayasya skobka";goto end;} if (SG->Cells[1][i]qq')') {SG->Cells[2][i]q"Zakro’vayuhayasya skobka";goto end;}
for(int jq1;j if((int(SG->Cells[1][i][j])<65 || int(SG->Cells[1][i][j])>90) && (int(SG->Cells[1][i][j])<97 || int(SG->Cells[1][i][j])>122)) {SG->Cells[2][i]q"Nedopustimo’y simvol";A[ZS]qi;ZSQQ;goto end;} SG->Cells[2][i]q"Identifikator"; end:; } delete[] A; } G’G’--------------------------------------------------------------------------- void __fastcall TForm2::SGDrawCell(TObject *Sender, int ACol, int ARow, TRect &Rect, TGridDrawState State) { int x,y;
G’G’----------- Poluchenie koordinat dlya vo’voda teksta i sam vo’vod ---------------- xqRect.leftQ2; G’G’ (Rect.Width()-SG1->Canvas->TextWidth(SG1- >Cells[ACol][ARow]))G’2; yqRect.topQ3; G’G’(Rect.Height()-SG1->Canvas->TextHeight(SG1- >Cells[ACol][ARow]))G’2; SG->Canvas->Font->ColorqclBlack; SG->Canvas->TextOut(x,y,SG->Cells[ACol][ARow]); G’G’---------------------- Zakraska tekuhey vo’delennoy stroki -------------------- 28 if(A!qNULL && ARow!q0) for(int iq0;i if(ARowqqA[i]) {SG->Canvas->Brush->ColorqclRed;SG->Canvas->Font->ColorqclWhite; SG->Canvas->FillRect(Rect); SG->Canvas->TextOut(x,y,SG->Cells[ACol][ARow]);} } Dastur natijasi Xulosa: Tajriba ishini bajarish natijasida C++ Builder 7 muxitida dastur matni yozildi 5,6-tajriba ishiga doir berilishi mumkin bo’lgan masala variantlari: 1
Variant 2
29 Variant 3
Variant 4
Variant 5
30 Variant 6
kilish > ::q Var Variant 7
kilish > ::q Var Variant 8
kilish > ::q Var 31 Variant 9
kilish > ::q Var Variant 10
kilish > ::q Integer Variant 11
kilish > ::q Variant 12
32 kilish > ::q Int e’lon kilish >
Download 0.63 Mb. Do'stlaringiz bilan baham: |
ma'muriyatiga murojaat qiling