Разработка сканера

Курсовой проект - Компьютеры, программирование

Другие курсовые по предмету Компьютеры, программирование

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;

}

//Поиск символа по таблице