Адміністрація вирішила продати даний сайт. За детальною інформацією звертайтесь за адресою: rozrahu@gmail.com

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

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

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

Рік:
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(); } ...
Антиботан аватар за замовчуванням

01.01.1970 03:01

Коментарі

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

Завантаження файлу

Якщо Ви маєте на своєму комп'ютері файли, пов'язані з навчанням( розрахункові, лабораторні, практичні, контрольні роботи та інше...), і Вам не шкода ними поділитись - то скористайтесь формою для завантаження файлу, попередньо заархівувавши все в архів .rar або .zip розміром до 100мб, і до нього невдовзі отримають доступ студенти всієї України! Ви отримаєте грошову винагороду в кінці місяця, якщо станете одним з трьох переможців!
Стань активним учасником руху antibotan!
Поділись актуальною інформацією,
і отримай привілеї у користуванні архівом! Детальніше

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

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

пропонує роботу

Admin

26.02.2019 12:38

Привіт усім учасникам нашого порталу! Хороші новини - з‘явилась можливість кожному заробити на своїх знаннях та вміннях. Тепер Ви можете продавати свої роботи на сайті заробляючи кошти, рейтинг і довіру користувачів. Потрібно завантажити роботу, вказати ціну і додати один інформативний скріншот з деякими частинами виконаних завдань. Навіть одна якісна і всім необхідна робота може продатися сотні разів. «Головою заробляти» продуктивніше ніж руками! :-)

Новини