Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Кафедра прикладної математики

Інформація про роботу

Рік:
2010
Тип роботи:
Лабораторна робота
Предмет:
Системне програмування
Група:
ПМ-31

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти та науки України Національний університет «Львівська політехніка» кафедра прикладної математики ЛАБОРАТОРНА РОБОТА №5 з системного програмування на тему: «Польський інверсний запис» Мета: написати програму, що перетворює звичайний запис арифметичних виразів в програмі в інверсний польський тип запису. Попередньо програма аналізує вхідні дані з файлу у вигляді програми написаної на мові Pascal, проводить лексичний, синтаксичний та семантичний аналізи. Вихідні дані – ланцюжок чисел, що ідентифікують однозначно ту чи інше операцію або змінну записаних у порядку польського інверсного запису. Перед тим потрібно скласти таблиці ідентифікаторів, цілочисельних констант та операцій. Варіант №9. Завдання: Розглянути підмножину мови Pascal, у якій є ідентифікатори (довжина – не більше 10 символів), цілі константи (довжина – не більше 6 символів), які використовуються у операторах опису (типи змінних – real , integer,boolean), оператори присвоєння, оператори циклу типу while (умова – логічний вираз, утворений з логічних змінних і відповідних логічних операцій). Код програми: #include <fstream.h> #include <string.h> #include <stdio.h> #include <iostream.h> #include <ctype.h> #include <windows.h> //*********************Opus Global'nuh zminnuh***********************// FILE *in; char *f1 = "input.txt"; char *lex, syn, lit = ' ', ch = 0; int cl = 9, f = 0, num = 1, id_num = 0, co_num = 0, op_num = 0, pol = 0, t = 0, k = 0, w = 0, br = -1, bz = -1, temp_while1 = 0, temp_while2 = 0; struct st { char *id; int type; }; st M_id[100]; char *M_co[100]; char *M_op[100]; int Pol_Zap[100]; char *Pol_Zap_True[100]; //************************Prototupu fynkcij**************************// int getlit(); int zarezerv(char*); void scan(); void S(); void R(); void P(); void Z(); void Y(); void T(); void A(); void B(); void V(); void W(); void L(); void U(); void M(); void N(); void G(); void D(); void Vudilutu_Lexemy(); void New_Id(); int Check_Id(); void SetWindowRect(); void Check_Type(); void Add_Const(); void Add_Operator(); int Search_Const(); int Search_Operator(); int Search_Id(); void Out_Tables(); void Out_Polskuj_Zapus(); //****************************MAIN***********************************// void main(void) { SetWindowRect(); in=fopen(f1, "r"); S(); if(f) Vudilutu_Lexemy(); else cout<<"\n\nV programi nemae pomulok...\n"; Out_Tables(); Out_Polskuj_Zapus(); fclose(in); } //*************************Opus fynkcij******************************// int getlit() { lit = fgetc(in); if(ch != 0) putchar(ch); ch = lit; if(lit >= 'A' && lit <= 'Z') lit -= 'A' - 'a'; switch (lit) { case '+': return 3; break; case '-': return 3; break; case '*': return 3; break; case '/': return 3; break; case ';': return 3; break; case '(': return 3; break; case ')': return 3; break; case ',': return 3; break; case '.': return 3; break; case '<': return 4; break; case ':': return 5; break; case '=': return 6; break; case '>': return 7; break; } if(isalpha(lit)) return 1; else if(isdigit(lit))return 2; else return 9; } int zarezerv(char* lex) { if (!stricmp(lex,"begin")) {syn ='G';return 1;} if (!stricmp(lex,"end")) {syn ='N';return 1;} if (!stricmp(lex,"integer")) {syn ='I';return 1;} if (!stricmp(lex,"real")) {syn ='R';return 1;} if (!stricmp(lex,"boolean")) {syn ='L';return 1;} if (!stricmp(lex,"do")) {syn ='T';return 1;} if (!stricmp(lex,"while")) {syn ='W';return 1;} if (!stricmp(lex,"var")) {syn ='V';return 1;} if (!stricmp(lex,"program")) {syn ='M';return 1;} if (!stricmp(lex,"or")) {syn ='O';return 1;} if (!stricmp(lex,"and")) {syn ='U';return 1;} if (!stricmp(lex,"not")) {syn ='C';return 1;} if (!stricmp(lex,"true")) {syn ='Y';return 1;} if (!stricmp(lex,"false")) {syn ='Z';return 1;} return 0; } void scan() { int i; lex=new char[30]; if(cl&&!feof(in)) { i=0; while (lit==' ' || lit=='\n' || lit=='\t') { if(lit == '\n') num++; cl=getlit(); } switch(cl) { case 1: lex[i++]=lit; cl=getlit(); while ((cl<=2)&&(cl!=0)) {lex[i++]=lit;cl=getlit();} lex[i]='\0'; if(zarezerv(lex)) { break;} else if(i<=10) syn='A'; else {syn='E';break;} break; case 2: lex[i++]=lit; cl=getlit(); while ((cl==2)&&(cl!=0)) {lex[i++]=lit; cl=getlit();} lex[i]='\0'; if(i<=6) syn='B';else syn='F';break; case 3: lex[0]=lit;lex[1]='\0'; syn=lit; cl=getlit();break; case 4: lex[i++]=lit; cl=getlit(); if (cl==7) {lex[i++]=lit; lex[i]='\0'; syn='D'; cl=getlit();break;} if (cl==6) {lex[i++]=lit; lex[i]='\0'; syn='H'; cl=getlit();break;} lex[i]='\0';syn='J';break; case 5: lex[i++]=lit; cl=getlit(); if (cl==6) {lex[i++]=lit; lex[i]='\0'; syn='K'; cl=getlit();break;} lex[i]='\0';syn=':';break; case 6: lex[i++]=lit;cl=getlit(); lex[i]='\0'; syn='P';break; case 7: lex[i++]=lit;cl=getlit(); if (cl==6) {lex[i++]=lit; lex[i]='\0'; syn='Q'; cl=getlit();break;} lex[i]='\0';syn='S';break; case 9: lex[0]=lit;lex[1]='\0'; syn='X';cl=getlit();break; } } } void S() { scan(); if(syn != 'M'){f = 1; cout<<"\n\n!!!ERROR!!!\n\nLine "<<num<<": Programa povuna po4unatus' zi slova Program!!!\n"; return;} scan(); if(syn != 'A'){f = 1; cout<<"\n\n!!!ERROR!!!\n\nLine "<<num<<": Nekorektne imja programu!!!\n"; return;} New_Id(); scan(); if(syn != ';'){f = 1; cout<<"\n\n!!!ERROR!!!\n\nLine "<<num<<": O4ikyet'sja ';'!!!\n"; return;} scan(); if(syn != 'V' && syn != 'G'){f = 1; cout<<"\n\n!!!ERROR!!!\n\nLine "<<num<<": O4ikyet'sja BEGIN abo VAR!!!\n"; return;} if(syn == 'V') R(); if(f) return; T(); } void R() { if(f) return; scan(); P(); } void P() { if(f) return; Z(); if(f) return; if(syn != ':'){f = 1; cout<<"\n\n!!!ERROR!!!\n\nLine "<<num<<": O4ikyjet'sja ':'!!!\n"; return;} scan(); Y(); if(f) return; if(syn != ';'){f = 1; cout<<"\n\n!!!ERROR!!!\n\nLine "<<num<<": O4ikyjet'sja ';'!!!\n"; return;} scan(); while(syn != 'G') { Z(); if(f) return; if(syn != ':'){f = 1; cout<<"\n\n!!!ERROR!!!\n\nLine "<<num<<": O4ikyjet'sja ':'!!!\n"; return;} scan(); Y(); if(f) return; if(syn != ';'){f = 1; cout<<"\n\n!!!ERROR!!!\n\nLine "<<num<<": O4ikyjet'sja ';'!!!\n"; return;} scan(); } } void Z() { if(f) return; if(syn != 'A'){f = 1; cout<<"\n\n!!!ERROR!!!\n\nLine "<<num<<": O4ikyjet'sja identufikator!!!\n"; return;} New_Id(); if(f) return; scan(); while(syn != ':') { if(syn != ','){f = 1; cout<<"\n\n!!!ERROR!!!\n\nLine "<<num<<": O4ikyjet'sja ':'!!!\n"; return;} scan(); if(syn != 'A'){f = 1; cout<<"\n\n!!!ERROR!!!\n\nLine "<<num<<": O4ikyjet'sja identufikator!!!\n"; return;} New_Id(); if(f) return; scan(); } } void Y() { if(f) return; if(syn != 'I' && syn != 'R' && syn != 'L'){f = 1; cout<<"\n\n!!!ERROR!!!\n\nLine "<<num<<": Nevidomuj typ danuh!!!\n"; return;} int j = id_num - 1; while(M_id[j].type == 4) { if(syn == 'I') M_id[j--].type = 1; //Integer else if(syn == 'R') M_id[j--].type = 2; //Real else if(syn == 'L') M_id[j--].type = 3; //Boolean } scan(); } void T() { if(f) return; if(syn != 'G'){f = 1; cout<<"\n\n!!!ERROR!!!\nLine "<<num<<": O4ikyjet'sja BEGIN!!!\n"; return;} scan(); A(); if(f) return; if(syn != 'N'){f = 1; cout<<"\n\n!!!ERROR!!!\nLine "<<num<<": O4ikyjet'sja END!!!\n"; return;} scan(); if(feof(in)) {printf(" "); lex = " ";} if(syn != '.'){f = 1; cout<<"\n\n!!!ERROR!!!\nLine "<<num<<": O4ikyjet'sja '.'!!!\n"; return;} } void A() { if(f) return; if(syn != 'N') B(); if(f) return; while(syn != 'N') { if(syn != ';'){f = 1; cout<<"\n\n!!!ERROR!!!\nLine "<<num<<": O4ikyjet'sja ';'!!!\n"; return;} scan(); if(syn == 'N') break; B(); if(f) return; } } void B() { if(f) return; if(syn == 'W') W(); else if(syn == 'G') L(); else if(syn == 'A') V(); else {f = 1; cout<<"\n\n!!!ERROR!!!\nLine "<<num<<": Neo4ikyvani symvolu!!!\n"; return;} } void V() { if(f) return; if(Check_Id() == -1){f = 1; cout<<"\n\n!!!ERROR!!!\nLine "<<num<<": Zminna '"<<lex<<"' ne opusana!!!\n"; return;} t = Check_Id(); Pol_Zap_True[pol] = lex; Pol_Zap[pol++] = 100 + Search_Id(); if(f) return; scan(); if(syn != 'K'){f = 1; cout<<"\n\n!!!ERROR!!!\nLine "<<num<<": O4ikyjet'sja ':='!!!\n"; return;} Add_Operator(); int temp_pr = Search_Operator(); scan(); U(); Pol_Zap_True[pol] = M_op[temp_pr]; Pol_Zap[pol++] = 300 + temp_pr; } void W() { if(w == 0) w = 1; if(f) return; k = 1; G(); temp_while1 = pol++; Pol_Zap_True[pol] = "BZ"; Pol_Zap[pol++] = 300 + bz; if(f) return; scan(); if(f) return; if(syn != 'T'){f = 1; cout<<"\n\n!!!ERROR!!!\nLine "<<num<<": O4ikyjet'sja DO!!!\n"; return;} scan(); k = 0; B(); Pol_Zap_True[pol] = "temp_while1"; Pol_Zap[pol++] = temp_while1 + 3; Pol_Zap_True[pol] = "BR"; Pol_Zap[pol++] = 300 + br; Pol_Zap_True[temp_while1] = "temp_while2"; Pol_Zap[temp_while1] = pol + 1; temp_while2 = pol + 1; temp_while1 = temp_while1 + 3; } void L() { if(f) return; scan(); A(); if(f) return; if(syn != 'N'){f = 1; cout<<"\n\n!!!ERROR!!!\nLine "<<num<<": O4ikyjet'sja END!!!\n"; return;} scan(); } void G() { scan(); if(syn == '(') { scan(); G(); if(f) return; if(syn != ')'){f = 1; cout<<"\n\n!!!ERROR!!!\nLine "<<num<<": O4ikyjet'sja ')'!!!\n"; return;} return; } U(); D(); int temp_vidn = Search_Operator(); scan(); U(); Pol_Zap_True[pol] = M_op[temp_vidn]; Pol_Zap[pol++] = 300 + temp_vidn; } void U() { if(f) return; M(); if(f) return; if(syn == '+' || syn == '-' || syn == 'O') { Add_Operator(); int temp_op = Search_Operator(); if(syn == 'O' && (t == 1 || t == 2)) {f = 1; cout<<"\n\n!!!ERROR!!!\nLine "<<num<<": Nevidpovidnist' tupiv(OR povertaje BOOLEAN)!!!\n"; return;} if((syn == '+' || syn == '-') && t == 3) {f = 1; cout<<"\n\n!!!ERROR!!!\nLine "<<num<<": Nevidpovidnist' tupiv(+ abo - ne povertaje BOOLEAN)!!!\n"; return;} scan(); U(); Pol_Zap_True[pol] = M_op[temp_op]; Pol_Zap[pol++] = 300 + temp_op; } } void M() { if(f) return; N(); if(f) return; if(syn == '*' || syn == '/' || syn == 'U') { Add_Operator(); int temp_op = Search_Operator(); if(syn == '/' && t == 1) {f = 1; cout<<"\n\n!!!ERROR!!!\nLine "<<num<<": Nevidpovidnist' tupiv(dilennja povertaje REAL)!!!\n"; return;} if(syn == 'U' && (t == 1 || t == 2)) {f = 1; cout<<"\n\n!!!ERROR!!!\nLine "<<num<<": Nevidpovidnist' tupiv(AND povertaje BOOLEAN)!!!\n"; return;} if((syn == '*' || syn == '/') && t == 3) {f = 1; cout<<"\n\n!!!ERROR!!!\nLine "<<num<<": Nevidpovidnist' tupiv(* abo / ne povertaje BOOLEAN)!!!\n"; return;} scan(); M(); Pol_Zap_True[pol] = M_op[temp_op]; Pol_Zap[pol++] = 300 + temp_op; } } void N() { if(f) return; if(syn == '(') { scan(); U(); if(f) return; if(syn != ')'){f = 1; cout<<"\n\n!!!ERROR!!!\nLine "<<num<<": O4ikyjet'sja ')'!!!\n"; return;} } else if(syn == 'C') { Add_Operator(); int temp_op = Search_Operator(); if(t != 3) {f = 1; cout<<"\n\n!!!ERROR!!!\nLine "<<num<<": Nevidpovidnist' tupiv(NOT povertaje BOOLEAN)!!!\n"; return;} scan(); N(); Pol_Zap_True[pol] = M_op[temp_op]; Pol_Zap[pol++] = 300 + temp_op; return; } else if(syn == 'E'){f = 1; cout<<"\n\n!!!ERROR!!!\nLine "<<num<<": Dovzhuna identufikatora <= 10!!!\n"; return;} else if(syn == 'F'){f = 1; cout<<"\n\n!!!ERROR!!!\nLine "<<num<<": Dovzhuna ciloji konstantu <= 6!!!\n"; return;} else if(syn != 'A' && syn != 'B' && syn != 'Y' && syn != 'Z'){f = 1; cout<<"\n\n!!!ERROR!!!\nLine "<<num<<": Pomulka y vurazi!!!\n"; return;} Add_Const(); if(syn == 'A') {Pol_Zap_True[pol] = lex; Pol_Zap[pol++] = 100 + Search_Id();} if(syn == 'B' || syn == 'Y' || syn == 'Z') {Pol_Zap_True[pol] = lex; Pol_Zap[pol++] = 200 + Search_Const();} Check_Type(); if(f) return; scan(); } void D() { if(f) return; if(syn != 'P' && syn != 'J' && syn != 'S' && syn != 'D' && syn != 'H' && syn != 'Q') {f = 1; cout<<"\n\n!!!ERROR!!!\nLine "<<num<<": O4ikyet'sja logi4na operacija!!!\n"; return;} Add_Operator(); } void Vudilutu_Lexemy() { int X, Y; CONSOLE_SCREEN_BUFFER_INFO csbi; COORD coord; GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbi); X = coord.X = csbi.dwCursorPosition.X; Y = coord.Y = csbi.dwCursorPosition.Y; coord.X -= strlen(lex); SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 192); printf(lex); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7); while(!feof(in)) { lit = fgetc(in); if(ch != 0) putchar(ch); ch = lit; } } void SetWindowRect() { COORD BufCoord = {80, 300}; SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE), BufCoord); SMALL_RECT WinRect = {0, 0, 79, 38}; SMALL_RECT* WinSize = &WinRect; SetConsoleWindowInfo(GetStdHandle(STD_OUTPUT_HANDLE), true, WinSize); } void New_Id() { for(int j = 0; j < id_num; j++) if(!strcmp(M_id[j].id, lex)) {f = 1; cout<<"\n\n!!!ERROR!!!\nLine "<<num<<": Povtornuj opus zminnoji!!!\n"; return;} M_id[id_num].id = lex; M_id[id_num++].type = 4; } int Check_Id() { for(int j = 0; j < id_num; j++) if(!strcmp(M_id[j].id, lex)) return M_id[j].type; return -1; } void Check_Type() { if(k && (syn == 'A' || syn == 'B')) {if(Check_Id() == 3) t = 3; else t = 2;} k = 0; if(syn == 'A' && Check_Id() == -1){f = 1; cout<<"\n\n!!!ERROR!!!\nLine "<<num<<": Zminna '"<<lex<<"' ne opusana!!!\n"; return;} if(f) return; if(t == 1 && (syn != 'B' && syn == 'A' && Check_Id() != 1 || syn == 'Y' || syn == 'Z')) {if(f) return; f = 1; cout<<"\n\n!!!ERROR!!!\nLine "<<num<<": Nevidpovidnist' tupiv(o4ikyet'sja rezyl'tat INTEGER - \n"<< " zminna tupy REAL/BOOLEAN)!!!\n"; return;} if(t == 2 && (syn != 'B' && syn == 'A' && Check_Id() == 3 || syn == 'Y' || syn == 'Z')) {if(f) return; f = 1; cout<<"\n\n!!!ERROR!!!\nLine "<<num<<": Nevidpovidnist' tupiv(o4ikyet'sja rezyl'tat REAL - \n"<< " zminna tupy BOOLEAN)!!!\n"; return;} if(t == 3 && (syn == 'B' || syn == 'A' && Check_Id() != 3)) {if(f) return; f = 1; cout<<"\n\n!!!ERROR!!!\nLine "<<num<<": Nevidpovidnist' tupiv(o4ikyet'sja rezyl'tat BOOLEAN - \n"<< " zminna tupy REAL/INTEGER/4USLO)!!!\n"; return;} } void Add_Const() { if((syn == 'Y' || syn == 'Z' || syn == 'B') && Search_Const() == -1) M_co[co_num++] = lex; } void Add_Operator() { if(w == 1) { M_op[op_num] = "BR"; br = op_num++; M_op[op_num] = "BZ"; bz = op_num++; w = 2; } if(Search_Operator() == -1) M_op[op_num++] = lex; } int Search_Const() { for(int j = 0; j < co_num; j++) if(!strcmp(lex, M_co[j])) return j; return -1; } int Search_Operator() { for(int j = 0; j < op_num; j++) if(!strcmp(lex, M_op[j])) return j; return -1; } int Search_Id() { for(int j = 0; j < id_num; j++) if(!strcmp(M_id[j].id, lex)) return j; return -1; } void Out_Tables() { char c = (char)(205); char b = (char)(186); cout<<"\n\tTablucja identufikatoriv\n"; cout<<"\t"<<(char)(201); for(int i = 0; i < 7; i++) cout<<c;cout<<(char)(203); for(i = 0; i < 7; i++) cout<<c;cout<<(char)(203); for(i = 0; i < 7; i++) cout<<c;cout<<(char)(187)<<"\n"; cout<<"\t"<<b<<" Nomer\t"<<b<<" Nazva\t"<<b<<" Tup\t"<<b<<"\n "; for(i = 0; i < id_num; i++) { cout<<"\t"<<(char)(204);for(int j = 0; j < 7; j++) cout<<c; cout<<(char)(206); for(j = 0; j < 7; j++) cout<<c; cout<<(char)(206); for(j = 0; j < 7; j++) cout<<c; cout<<(char)(185); cout<<"\n\t"<<b<<" "<<i<<"\t"<<b<<" "<<M_id[i].id<<"\t"<<b<<" "<<M_id[i].type<<"\t"<<b<<"\n "; } cout<<"\t"<<(char)(200); for(i = 0; i < 7; i++) cout<<c;cout<<(char)(202); for(i = 0; i < 7; i++) cout<<c;cout<<(char)(202); for(i = 0; i < 7; i++) cout<<c;cout<<(char)(188)<<"\n"; cout<<"\n\tTablucja konstant\n"; cout<<"\t"<<(char)(201); for(i = 0; i < 7; i++) cout<<c;cout<<(char)(203); for(i = 0; i < 15; i++) cout<<c;cout<<(char)(187)<<"\n"; cout<<"\t"<<b<<" Nomer\t"<<b<<" Zna4ennja\t"<<b<<"\n "; for(i = 0; i < co_num; i++) { cout<<"\t"<<(char)(204);for(int j = 0; j < 7; j++) cout<<c; cout<<(char)(206); for(j = 0; j < 15; j++) cout<<c; cout<<(char)(185); cout<<"\n\t"<<b<<" "<<i<<"\t"<<b<<" "<<M_co[i]<<"\t"<<b<<"\n "; } cout<<"\t"<<(char)(200); for(i = 0; i < 7; i++) cout<<c;cout<<(char)(202); for(i = 0; i < 15; i++) cout<<c;cout<<(char)(188)<<"\n"; cout<<"\n\tTablucja operatoriv\n"; cout<<"\t"<<(char)(201); for(i = 0; i < 7; i++) cout<<c;cout<<(char)(203); for(i = 0; i < 8; i++) cout<<c;cout<<(char)(187)<<"\n"; cout<<"\t"<<b<<" Nomer\t"<<b<<"Operator"<<b<<"\n "; for(i = 0; i < op_num; i++) { cout<<"\t"<<(char)(204);for(int j = 0; j < 7; j++) cout<<c; cout<<(char)(206); for(j = 0; j < 8; j++) cout<<c; cout<<(char)(185); cout<<"\n\t"<<b<<" "<<i<<"\t"<<b<<" "<<M_op[i]<<"\t "<<b<<"\n "; } cout<<"\t"<<(char)(200); for(i = 0; i < 7; i++) cout<<c;cout<<(char)(202); for(i = 0; i < 8; i++) cout<<c;cout<<(char)(188)<<"\n"; } void Out_Polskuj_Zapus() { cout<<"Pol'skuj zapus vuraziv programu:\n"; for(int i = 0; i < pol; i++) {cout<<" "<<i + 1<<"."<<Pol_Zap[i]; if((i + 1)%8 == 0) cout<<"\n";} cout<<"\n\nPol'skuj zapus v zvu4ajnomy vugljadi:\n"; for(i = 0; i < pol; i++) { if(Pol_Zap_True[i] == "temp_while1") cout<<" "<<temp_while1; else if(Pol_Zap_True[i] == "temp_while2") cout<<" "<<temp_while2; else cout<<" "<<Pol_Zap_True[i]; if((i + 1)%20 == 0) cout<<"\n"; } cout<<"\n"; } Контрольний приклад: program a34; var abcd2, f: real; b, a, s: integer; se, c, d: BooLeAn; efw,dwewe,we:Real; Begin f:=(b*b)+a*s - f* s+b; while ((s>= (s*a/s)) do begin bEgin b:=143; c:= not true; end; end; d:=not false or (not se or d); c := not c and se or false; se := TrUe or FaLsE and d or not c; end. V programi nemae pomulok... Tablucja identufikatoriv ╔═══════╦═══════╦═══════╗ ║ Nomer ║ Nazva ║ Tup ║ ╠═══════╬═══════╬═══════╣ ║ 0 ║ a34 ║ 2 ║ ╠═══════╬═══════╬═══════╣ ║ 1 ║ abcd2 ║ 2 ║ ╠═══════╬═══════╬═══════╣ ║ 2 ║ f ║ 2 ║ ╠═══════╬═══════╬═══════╣ ║ 3 ║ b ║ 1 ║ ╠═══════╬═══════╬═══════╣ ║ 4 ║ a ║ 1 ║ ╠═══════╬═══════╬═══════╣ ║ 5 ║ s ║ 1 ║ ╠═══════╬═══════╬═══════╣ ║ 6 ║ se ║ 3 ║ ╠═══════╬═══════╬═══════╣ ║ 7 ║ c ║ 3 ║ ╠═══════╬═══════╬═══════╣ ║ 8 ║ d ║ 3 ║ ╠═══════╬═══════╬═══════╣ ║ 9 ║ efw ║ 2 ║ ╠═══════╬═══════╬═══════╣ ║ 10 ║ dwewe ║ 2 ║ ╠═══════╬═══════╬═══════╣ ║ 11 ║ we ║ 2 ║ ╚═══════╩═══════╩═══════╝ Tablucja konstant ╔═══════╦═══════════════╗ ║ Nomer ║ Zna4ennja ║ ╠═══════╬═══════════════╣ ║ 0 ║ 143 ║ ╠═══════╬═══════════════╣ ║ 1 ║ true ║ ╠═══════╬═══════════════╣ ║ 2 ║ false ║ ╚═══════╩═══════════════╝ Tablucja operatoriv ╔═══════╦════════╗ ║ Nomer ║Operator║ ╠═══════╬════════╣ ║ 0 ║ := ║ ╠═══════╬════════╣ ║ 1 ║ * ║ ╠═══════╬════════╣ ║ 2 ║ + ║ ╠═══════╬════════╣ ║ 3 ║ - ║ ╠═══════╬════════╣ ║ 4 ║ BR ║ ╠═══════╬════════╣ ║ 5 ║ BZ ║ ╠═══════╬════════╣ ║ 6 ║ >= ║ ╠═══════╬════════╣ ║ 7 ║ / ║ ╠═══════╬════════╣ ║ 8 ║ not ║ ╠═══════╬════════╣ ║ 9 ║ or ║ ╠═══════╬════════╣ ║ 10 ║ and ║ ╚═══════╩════════╝ Pol'skuj zapus vuraziv programu: 1.102 2.103 3.103 4.301 5.104 6.105 7.301 8.102 9.105 10.301 11.103 12.302 13.303 14.302 15.300 16.105 17.105 18.104 19.105 20.307 21.301 22.306 23.34 24.305 25.103 26.200 27.300 28.107 29.201 30.308 31.300 32.25 33.304 34.108 35.202 36.308 37.106 38.308 39.108 40.309 41.309 42.300 43.107 44.107 45.308 46.106 47.310 48.202 49.309 50.300 51.106 52.201 53.202 54.108 55.310 56.107 57.308 58.309 59.309 60.300 Pol'skuj zapus v zvu4ajnomy vugljadi: f b b * a s * f s * b + - + := s s a s / * >= 34 BZ b 143 := c true not := 25 BR d false not se not d or or := c c not se and false or := se true false d and c not or or := Press any key to continue Висновок: Отже під час виконання даної лабораторної я ознайомився з поняттям польського інверсного запису, побудував програму, що аналізує вхідну програму та будує для кожного виразу польський запис. При цьому я використовую попередньо написані лексичний, синтаксичний, семантичний аналізатори.
Антиботан аватар за замовчуванням

01.01.1970 03:01-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!