Разработка сканера
Курсовой проект - Компьютеры, программирование
Другие курсовые по предмету Компьютеры, программирование
?в
void Getchar(char,int&);//Определяет класс литеры
void main()
{
char s[20],f_in[10]="in.txt",f_out[10],c,k,a;
int Class,Quit=0,Q=0,x,i,n,j=0;
char _ []="-----------------------",
_cel[]=".Целое :",
_op []=".Оператор :",
_kom[]=".Комментарий :",
_id []=".Идентификатор :",
_sl []=".Служебное слово :",
_log[]=".Логическая операция :",
_err[]=".Недопустимое выражение:",
__ []="-----------------------";
clrscr();
fstream inFile,outFile;
cout<<"\t----------------------¬\n";
cout<<"\t¦ 1.Ввод с клавиатуры.¦\n";
cout<<"\t¦ 2.Ввод с файла. ¦\n";
cout<<"\tL----------------------\n";
do
{
cout<<"\t Ваш выбор:";
n=Prov_itn();
if(n2)
cout<<"\t Неверно указан номер пункта меню.\n";
else
break;
}while(1);
if(n==1)
{
inFile.open(f_in,ios::trunc |ios::in | ios::out);
cout<<"\nВводите текст (в конце текста введите !):\n";
for(;(a=getchar())!=!;)
inFile<<a;
inFile.close();
inFile.open(f_in,ios::in | ios::out);
cout<<"\nВведите имя файла вывода: ";
cin >>f_out;
outFile.open(f_out,ios::trunc |ios::in | ios::out);
if(!outFile)
{
cout<<"Ошибка окрытия файла: "<<f_out;
}
}
if(n==2)
{
cout<<"Введите имя файла ввода: ";
cin >>f_in;
inFile.open(f_in,ios::in | ios::out );
if(!inFile)
{
cout<<"\nОшибка открытия файла: "<<f_in;
}
if(inFile.peek()!=EOF)
{
cout<<"Содержимое файла:\n\n";
while(inFile.peek()!=EOF)
{
inFile.get(c);
cout<<c;
}
}
else
{
cout<<"Файл пуст!";
getch();
exit(0);
}
inFile.close();
inFile.open(f_in,ios::in | ios::out );
cout<<"\n\nВведите имя файла вывода: ";
cin >>f_out;
outFile.open(f_out,ios::trunc |ios::in | ios::out);
if(!outFile)
{
cout<<"\nОшибка окрытия файла: "<<f_out;
}
}
//Проверка содержимого файла
if(inFile.peek()!=EOF)
{
Quit=1;
inFile.get(c);
Getchar(c,Class);
outFile<<_<<"\n";
}
else
Quit=0;
while(Quit==1)
{
j++;
while(c== ||c==\n)
{
if(inFile.peek()==EOF)
{
Quit=0;
break;
}
inFile.get(c);
Getchar(c,Class);
}
switch(Class)
{
case 1: //Считываемый символ цифра
{
i=0;
do
{
s[i]=c;
i++;
if(inFile.peek()==EOF)
{
Quit=0;
break;
}
inFile.get(c);
Getchar(c,Class);
}while(Class==1);
s[i]=\0;
outFile<<j<<_cel<<s<<"\n";
}
break;
case 2: //Считываемый символ буква
{
i=0;
do
{
s[i]=c;
i++;
if(inFile.peek()==EOF)
{
Quit=0;
break;
}
inFile.get(c);
Getchar(c,Class);
}while(Class<=2);
s[i]=\0;
x=LookUp(s);
if(x==1)
outFile<<j<<_sl<<s<<"\n";
if(x==2)
outFile<<j<<_log<<s<<"\n";
if(x==3)
outFile<<j<<_id<<s<<"\n";
}
break;
case 3: //Считываемый символ начало комментария {
{
i=0;
s[i]=c;
i++;
if(inFile.peek()==EOF)
{
Quit=0;
outFile<<j<<_err<<s<<"\n";
break;
}
inFile.get(c);
Q=0;
if(c==*)
{
s[i]=c;
i++;
do
{
if(inFile.peek()==EOF)
{
Quit=0;
break;
}
inFile.get(c);
if(c==*)
{
if(inFile.peek()==EOF)
{
Quit=0;
break;
}
inFile.get(k);
if(k!=}) continue;
s[i]=c;
i++;
s[i]=c=k;
i++;
Q=1;
if(inFile.peek()==EOF)
{
Quit=0;
break;
}
inFile.get(c);
}
}while(Q!=1);
s[i]=\0;
Getchar(c,Class);
outFile<<j<<_kom<<s<<"\n";
}
else
{
if(c=={)
{
s[i]=c;
i++;
do
{
if(inFile.peek()==EOF)
{
Quit=0;
break;
}
inFile.get(c);
}while(c!=\n);
inFile.get(c);
s[i]=\0;
Getchar(c,Class);
outFile<<j<<_kom<<s<<"\n";
}
else
{ Getchar(c,Class);
outFile<<j<<_err<<s<<"\n";
}
}
}break;
case 4: //Считываемый символ оператор
{
i=0;
s[i]=c;
if(s[i]==< && inFile.peek()!=EOF)
{
inFile.get(c);
Getchar(c,Class);
if(c==>)
{
i++;
s[i]=c;
if(inFile.peek()!=EOF)
{ inFile.get(c);
Getchar(c,Class);
}
else
Quit=0;
}}
else
{
if(inFile.peek()!=EOF)
{ inFile.get(c);
Getchar(c,Class);
}
else
Quit=0;
}
i++;
s[i]=\0;
outFile<<j<<_op<<s<<"\n";
}break;
case 5:
{
i=0;
do
{
s[i]=c;
i++;
if(inFile.peek()!=EOF)
{ inFile.get(c);
Getchar(c,Class);
}
else
{
Quit=0;break;
}
}while(Class==5);
s[i]=\0;
outFile<<j<<_err<<s<<"\n";
}break;
}
if(Quit==0)
outFile<<__<<"\n";
}
cout<<"Содержимое файла:\n\n";
outFile.close();
outFile.open(f_out,ios::in | ios::out );
{
while(outFile.peek()!=EOF)
{
outFile.get(c);
cout<<c;
}
}
inFile.close();
outFile.close();
getch();
}
//Определяет класс литеры
void Getchar(char cc,int& Class1)
{
int i;
char ca[]={+,-,*,/,(,),=,};
char cb[]={А,Б,В,Г,Д,Е,Ж,З,И,Й,К,
Л,М,Н,О,П,Р,С,Т,У,Ф,Х,
Ц,Ч, Ш,Щ,Ъ,Ы,Ь,Э,Ю,Я,а,
б,в,г,д,е,ж,з,и,й,к,л,
м,н,о,п,р,с,т,у,ф,х,ц,
ч,ш,щ,ъ,ы,ь,э,ю,я,_};
char cd[]={1,2,3,4,5,6,7,8,9,0};
for(i=0;i<10;i++)
if(cc==cd[i])
{
Class1=1;
return;
}
if(cc=={)
{
Class1=3;
return;
}
for(i=0;i<10;i++)
if(cc==ca[i])
{
Class1=4;
return;
}
for(i=0;i<65;i++)
if(cc==cb[i])
{
Class1=2;
return;
}
if(cc== || cc==\n)
Class1=10;
else Class1=5;
}
//Поиск символа по таблице