Малюнок 1. Діаграма станів з семантичними процедурами.
2. Текст програми :
# include
# include
# include
# include
# include
# include
# include
int Prov_itn ();// Перевірка на введення цілого позитивного числа
int LookUp (Char *);// Пошук символу за таблицею службових слів
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 [] = ". Ціле : ", p> _op [] = ". Оператор:",
_kom [] = ". Коментар : ", p> _id [] = ". Ідентифікатор:",
_sl [] = ". Службове слово:",
_log [] = ". Логічна операція: ",
_err [] = ". Неприпустиме вираз: ",
__ [] = "в”Ђ в”Ђ в”Ђ в”Ђ в”Ђ в”Ђ в”Ђ в”Ђ в”Ђ в”Ђ в”Ђ в”Ђ в”Ђ в”Ђ в”Ђ в”Ђ в”Ђ в”Ђ в”Ђ в”Ђ в”Ђ в”Ђ в”Ђ";
clrscr ();
fstream inFile, outFile;
cout <<" t в”‚ 1.Ввод з клавіатури. в”‚ n ";
cout <<" t в”‚ 2.Ввод з файлу. в”‚ n ";
do
{
cout <<" t Ваш вибір: ";
n = Prov_itn ();
if (n <1 | | N> 2)
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 <
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 <<"Помилка окритія файлу: "<
}
}
if (n == 2)
{
cout <<"Введіть ім'я файлу вводу: "; p> cin>> F_in;
inFile.open (f_in, ios :: in | Ios :: out);
if (! inFile)
{
cout <<" nОшібка відкриття файлу: "<
}
if (inFile.peek ()! = EOF)
{
cout <<"Вміст файлу: n n ";
while (inFile.peek ()! = EOF)
{
inFile.get (c);
cout <
}
}
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Ошібка окритія файлу: "<
}
}
// Перевірка вмісту файлу
if (inFile.peek ()! = EOF)
{ p> 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 <
}
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 <
if (x == 2)
outFile <
if (x == 3)
outFile <
}
break;
case 3:// зчитуємо символ початок коментаря {
{
i = 0;
s [i] = c;
i + +;
if (inFile.peek () == EOF)
{
Quit = 0;
outFile <
break;
}
inFile.get (c);
Q = 0;
if (c == '*')
{
s [i] = c;
i + +;
do
{
if (in...