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

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

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

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

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

Частина тексту файла

Міністерство освіти та науки України Національний університет «Львівська політехніка» кафедра прикладної математики ЛАБОРАТОРНА РОБОТА №2 з системного програмування на тему: «Лексичний аналіз» Мета: розбити всі елементарні конструкції мови на класи, визначити формат лексеми-дескриптора, розбити всі літери вхідної мови на класи(для ідентифікації класу чергової лексеми), побудувати скінченний автомат. Написати програму лексичного аналізу коду програми, що отримує на вході – текст програми на запропонованій підмножині мови програмування (у вхідному файлі), на виході – потік лексем-дескрипторів (у вихідному файлі). Лексичний аналізатор організувати як підпрограму, що викликається у циклі головною програмою для формування чергової лексеми-дескриптора. Варіант №9. Завдання: Розглянути підмножину мови Pascal, у якій є ідентифікатори (довжина – не більше 10 символів), цілі константи (довжина – не більше 6 символів), які використовуються у операторах опису (типи змінних – real , integer,boolean), оператори присвоєння, оператори циклу типу while (умова – логічний вираз, утворений з логічних змінних і відповідних логічних операцій). Дескриптори лексем: zminna – A 4uslo – B not – C <> – D zm<10 – E 4uslo<6 – F begin – G <= – H integer – I < – J := – K boolean – L program – M end – N or – O = – P >= – Q real – R > – S do – T and – U while – W var – V inwuj – X true – Y false – Z Код програми: #include<fstream.h> #include<string.h> #include<stdio.h> #include<iostream.h> FILE * in; char *f1="input.txt",* f2="output.txt"; char *lex, syn, lit; int cl=9; ofstream out; int getlit(); //z4utyvannja literu int zarezerv(char*); //perevirka nalezhnosti ident. do zarezervovanuh sliv void scan(); //jadro algorutmy void main(void) { in=fopen(f1,"r"); out.open(f2); lit=' '; scan(); cout<<"DONE!!!"; } int getlit() { lit=fgetc(in); 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) { int pr=0; 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,"program")) {syn ='M';return 1;} return pr; } void scan() { int i; lex=new char[30]; while((cl)&&(!(feof(in)))) { i=0; while ((lit==' ')||(lit=='\n')||(lit=='\t')) { 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='E';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;} else {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...
Антиботан аватар за замовчуванням

01.01.1970 03:01

Коментарі

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

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

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

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

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

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

Admin

26.02.2019 12:38

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

Новини