Частина тексту файла (без зображень, графіків і формул):
Міністерствто освіти і науки України
Національний університет “Львівська політехніка”
Кафедра прикладної математики
Звіт
Лабораторна робота №1:
Скінченні автомати
Тема : розглянути підмножину мови С,у якій ідентифікатор(довжина – не більше 12 символів),іілі константи(довжина – не більше 8 символів), які використовуються в операторах опису (типи змінних - float, int),оператори присвоєння,умовні оператори( довга форма, умова - одна операція порівняння або декілька порівнянь, об’єднаних за допомогою логічних операцій).
Код програми :
# include <iostream.h>
# include <iomanip.h>
# include <conio.h>
# include <stdlib.h>
# include <string.h>
# include <stdio.h>
# include <fstream.h>
# define lexsize 30
char lit,lex[lexsize],syn;
int cl,i,j,k,l;
int pr;
FILE *fr,*fw;
void getlit();
void scan();
int main(int argc, char* argv[])
{
for (i=0;i<lexsize;i++)
lex[i]=' ';
fr=fopen("f1.txt","r");
fw=fopen("f2.txt","w");
lit=' ';
while(!feof(fr))
{
scan();
fprintf(fw,"%c\t%s\n",syn,lex);
cout<<syn<<' '<<' '<<' '<<lex<<"\n";
}
fclose(fr);
fclose(fw);
getch();
}
void scan()
{
i=0;
pr=0;
while((lit==' ') || (lit=='\t') || (lit=='\n') )
getlit();
switch (cl)
{
case 1 : lex[i++]=lit; getlit();
while (cl<=2)
{
lex[i++]=lit;
getlit();
}
lex[i]='\0';
if (i>=12)
{syn='E'; goto e;}
if ( strcmp("float",lex)==0 )
{
syn='f';
pr=1 ;
}
if ( strcmp("int",lex)==0 )
{
syn='i';
pr=1 ;
}
if ( strcmp("if",lex)==0 )
{
syn='f';
pr=1 ;
}
if ( strcmp("else",lex)==0 )
{
syn='e';
pr=1 ;
}
if (!pr)
{ syn='I'; }
e:
break;
case 2 : lex[i++]=lit; getlit();
while (cl==2 )
{
lex[i++]=lit;
getlit();
}
if (i>=8)
syn='E';
else
syn='C';
lex[i]='\0';
break;
case 3 : lex[0]=lit; lex[1]='\0';
syn=lit; getlit(); break;
case 4: lex[i++]=lit; syn='O';
getlit();
if(lit=='=')
{
lex[i++]=lit;
syn='O';
getlit();
}
lex[i]='\0';
break;
case 5: lex[i++]=lit; syn='O';
getlit();
if(lit=='=')
{
lex[i++]=lit;
syn='O';
getlit();
}
if(lit=='>')
{
lex[i++]=lit;
syn='O';
getlit();
}
lex[i]='\0';
break;
case 6: lex[i++]=lit; syn=lit;
syn='O';
if(lit=='=')
{
lex[i++]=lit;
syn='O';
getlit();
}
lex[i]='\0';
break;
case 7: lex[i++]=lit;
getlit();
if(lit=='&')
{
lex[i++]=lit;
syn='A';
getlit();
}
lex[i]='\0';
break;
case 8: lex[i++]=lit;
getlit();
if(lit=='|')
{
lex[i++]=lit;
syn='M';
getlit();
}
lex[i]='\0';
break;
default:
lex[0]=lit;
lex[1]='\0';
syn='E';
getlit();
}
}
void getlit()
{
lit=fgetc(fr); cl=10;
if( (lit>='a') && (lit<='z') || (lit>='A') && (lit<='Z') ) cl=1;
if ( (lit>='0') && (lit<='9') ) cl=2;
if ( ( lit=='(' ) || ( lit==')' ) || (lit==';') || (lit=='.') || (lit=='=') ) cl=3;
if (lit=='>') cl=4;
if (lit=='<') cl=5;
if (lit=='=') cl=6;
if (lit=='&') cl=7;
if (lit=='|') cl=8;
}
Контрольний приклад :
Вихідний файл :
float p98 = 90;
iff ( (a>0) && (h><0) ||(gi==9) )
i = 100;
elssse t = 45; else
Результат :
f float
I p98
O ==
C 90
; ;
I iff
( (
( (
I a
O >
C 0
) )
A &&
( (
I h
O >
O <
C 0
) )
M ||
( (
I gi
O ==
O ==
C 9
) )
) )
I i
O ==
C 100
; ;
I elssse
I t
O ==
C 45
; ;
e else
Висновок : у даній лаборвторній роботі я навчився діл