DevioLabавтоматичне керування капіталом
ПРАЦЮЄ 24/7
КРИПТОВАЛЮТИ · АКЦІЇ · 10 БІРЖ

Портфель, який керується автоматично

DevioLab підбирає стратегії, відстежує ринки та автоматизує купівлю і продаж активів. Кількість доступних криптовалют, акцій і торгових можливостей зростає щодня.

10підключених біржCrypto + Stocksв одному портфелі24/7автоматичний контроль

Лабораторна робота №3. Семантичний аналізатоÑ

Оригінальна назва роботи

Лабораторна робота №3. Семантичний аналізатор

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

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

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

Рік:
2007
Тип роботи:
Лабораторна робота
Предмет:
Теорія трансляції
Група:
ПМ-32
Коротко про документ

Про що ця робота

У цій лабораторній роботі розроблено семантичний аналізатор для підмножини мови програмування C. Продемонстровано роботу лексичного та семантичного аналізу на прикладі вхідних даних.

У роботі розглядаються

  • Лексичний аналіз
  • Мова програмування C
  • Обробка типів даних
  • Синтаксичний контроль
  • Трансляція коду

Зміст і розділи

  1. Тема роботи
  2. Код програми лексичного та семантичного аналізу
  3. Приклад роботи програми
Для кого:Студенти технічних спеціальностей вищих навчальних закладів, які вивчають дисципліни системного програмування, теорії трансляції та компіляторів.
Викладачі:Гладун В.Р.

Ключові поняття

лексичний аналізціла константадійсна константаоператор присвоєнняцикл forтип данихфайл

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

Міністерство освіти і науки України Національний університет «Львівська політехніка» ЛАБОРАТОРНА РОБОТА №3 Семантичний аналізатор Львів – 2007 Тема: Розглянути підмножину мови C, у якій є ідентифікатори (довжина – не більше 10 символів), цілі константи (довжина – не більше 6 символів), дійсні константи з фіксованою крапкою, які використовуються у операторах опису (типи змінних – float , int), оператори присвоєння, оператори циклу типу for. Код програми: Лексичний аналіз перероблений для потреб семантичного #include<string.h> #include<conio.h> #include<fstream> #include<iostream> #include<new> main(void) {clrscr(); int Matr[10][8]={2,1,5,5,7,4,8,7, 1,1,9,9,7,9,8,7, 2,7,9,9,3,9,8,7, 3,7,9,9,7,9,8,7, 9,9,9,9,7,9,8,7, 9,9,6,7,7,9,8,7, 9,9,7,7,7,9,8,7, 7,7,7,7,7,7,8,7}; char *typy[10]={"","Identyfikator","0Z","0D","dughky", "=","operator prysvoyenya","error"}; char *a=""; char a2[2]; int typ=0,typ2,j=0; int k=0; char *s; ifstream in("dani.txt"); ofstream out("l.txt"); if(!out) {cout<<"Ne moghlyvo vidkryty fayl out\n "; getch(); return 1;} if(!in) {cout<<"Ne moghlyvo vidkryty fayl\n "; getch(); return 1;} while(!in.eof()) {in>>s; for(int i=0;i<strlen(s);i++) {if(s[i]>='0' && s[i]<='9') typ=Matr[typ][0]; else if((s[i]>='a' && s[i]<='z')||(s[i]>='A' && s[i]<='Z')) typ=Matr[typ][1]; else if(s[i]=='=') typ=Matr[typ][2]; else if((s[i]=='<')||(s[i]=='>')||(s[i]=='!')) typ=Matr[typ][3]; else if(s[i]=='.') typ=Matr[typ][4]; else if((s[i]=='{')||(s[i]=='}')||(s[i]=='(')||(s[i]==')')) typ=Matr[typ][5]; else if((s[i]==',')||(s[i]==';')) typ=Matr[typ][6]; else typ=7; if(typ<8) {/*cout<<s[i];*/ a2[0]=s[i];strcat(a,a2);k++;} else { if((typ2==1 && k>10)||(typ2==2 && k>6)) typ2=7; if((strcmp(a,"for")!=0)&&(typ2==1)) out<<a<<endl; else if((typ2==2)||(typ2==3)||(typ2==5)) out<<typy[typ2]<<endl; *a='\0 '; if(typ==9)i--; typ=0; k=0; } typ2=typ; } if((typ2==1 && k>10)||(typ2==2 && k>6)) typ2=7; if((strcmp(a,"for")!=0)&&(typ2==1)) out<<a<<endl; else if((typ2==2)||(typ2==3)||(typ2==5)) out<<typy[typ2]<<endl; *a='\0 '; typ=0; k=0; } in.close(); out.close(); getch(); } Семантичний аналіз: #include "stdafx.h" #include<string.h> #include<conio.h> #include<fstream> #include<iostream> #include<new> #include <string> using namespace std; int _tmain(int argc, _TCHAR* argv[]) {int popysu=0,popysu2=0, iint=-1, ifloat=-1,pnalegnosti=0; static string masiint[20], masifloat[20],typy[3]={"","0I","0F"}; string degurna, s; ifstream in ("l.txt"); if(!in.is_open()) {cout<<"Ne moghlyvo vidkryty fayl\n "; getch(); return 1;} while(!in.eof()) {in>>degurna; if((degurna=="0D")||(degurna=="0D")||(degurna=="=")||(degurna=="0Z")){s+=degurna; continue;} //////////////chek/////////////////////// for(int i=0;i<=iint;i++) {if(masiint[i]==degurna){pnalegnosti=1; break;} } if(pnalegnosti==0) for(int i=0;i<=ifloat;i++) {if(masifloat[i]==degurna){pnalegnosti=2; break;} } //////////////chek////////////////////// popysu2=popysu; if(degurna=="int") popysu=1; else if(degurna=="float") popysu=2; else popysu=0; ////////////////////////////////////////// if((popysu2>0)&&(pnalegnosti>0)){cout<<"podvijnyj opys zminnoji "<<degurna<<endl; continue;} if((popysu==0)&&(popysu2==0)&&(pnalegnosti==0)){cout<<"neopysana zminna "<<degurna<<endl; continue;} ///////////////////////////////////////////// if(popysu2!=0){pnalegnosti=popysu2; if(popysu2==1){iint++;masiint[iint]=degurna;} else {ifloat++;masifloat[ifloat]=degurna;} popysu=0; } s=s+typy[pnalegnosti]; pnalegnosti=0; } in.close(); if((s.find("0I=0F")!=-1)||(s.find("0I=0D")!=-1)) cout<<"ne dopustyme prysvojennya [int]=[float]\n"; getch(); return 0; } Приклад роботи програми: Вхідний файл for(int i=0;i<=10;i=1.45) {2fl b; 2323.34 345 sdhj23 2222; sf,d dfs, float i; } 1 Проміжний файл: іnt i = 0Z i 0Z i = 0D b 0D 0Z sdhj23 0Z sf d dfs float i 0Z Результат  Висновок : у даній лабораторній роботі я навчився програмувати семантичний аналізатор.
Допоможи студентському архіву

Ми допомогли тобі — допоможи наступному студенту

Файл ще не обрано

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

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

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

Admin

26.02.2023 12:38

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