Не могу скомпелировать код - C (СИ)
Формулировка задачи:
В интернете нашел вот такой код для синтеза ДМП-автомата на языке С. Не могу скомпелировать!
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
const char Term[6] = "abcde";
char str[100] = "";
int poz = 0; // Порядковый номер буквы введенной строки
// Таблица переходов при считывании символа
int A[5][14] = { 2, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 8, 0, 0, 0, 0, 0, 13,
0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 11, 0 0 0 };
// Таблица записи в стек
int W[14] = { 0, 0, 6, 0, 10, 0, 0, 0, 6, 0, 0, 0, 0, 10 };
void IsTerm(); // Проверка: Все ли символы терминальные?
void Stan(int i); // Функция переходов между состояниями
class Stek
{
public:
// Присвоение названия нетретм. символа и его индекса
void Set(char n, int i)
{
ind = i;
name = n;
}
// Возвращение индекса терм. символа текущего эл-та стеке
int GetInd() const
{
return ind;
}
// Возвращение названия терм. символа текущего эл-та стеке
char GetName() const
{
return name;
}
private:
int ind; // индекс терм. символа
char name; // название терм. символа
};
Stek Mas[50];
int j = 0; // Номер текущего эл-та в массиве
int main()
{
printf("Vvedit stri4ky (terminal symbols: " a \ ", " b \ ", " c \ ", " d \ ", " e \ "): \ n");
scanf("% s", &str);
IsTerm();
Stan(0);
if (poz == strlen(str))
printf("\ n --- Stri4ka pravulna! ---") else printf(
"\ n --- Error! Stri4ka ne pravulna! ---") getch();
return 0;
}
void IsTerm()
{
int p;
// Проверка всех введенных букв на равенство
// Одной из терминальных
for (int i = 0; i < strlen(str); i++)
{
for (int j = 0; j < strlen(Term) j++)
{
p = 0;
if (str[i] == Term[j])
{
p = 1;
break;
}
}
if (p == 0)
{
printf("\ n --- Nevirni terminalni symvolu! ---") getch();
exit(0);
}
}
}
void Stan(int i)
{
int p = 0; // Флажок: Есть исполнилось считывания символа, или
// Запись или считывание с стека?
// Проходим все эл-ты i-го столбца (состояния)
for (int k = 0; k < 5, k++)
{
// Если эл-т таблице не "0" и если текущая буква
// Совпадает с буквой данной строки то переходим
// В состояние что соотв. эл-ту таблицы
if ((A[k][i] ! = 0) && (Term[k] == str[poz]))
{
poz++;
Stan(A[k][i]);
p = 1;
}
}
if ((!p) && (W[i]))
{
switch (i)
{
// Добавляем новый эл-т в стек и инициализирует его
case 2:
Mas[j].Set(A, 1);
break;
case 4:
Mas[j].Set('B', 1);
break;
case 8:
Mas[j].Set(A, 2);
break;
case 13:
Mas[j].Set('B', 2);
break;
}
j++;
Stan(W[i]);
p = 1;
}
if ((!p) && (j))
{
switch (i)
{
// Зануление эл-то из стека при переходе на следующий
case 7:
if (Mas[j - 1].GetInd() == 1)
{
Mas[j - 1].Set( '', 0);
j--;
Stan(3);
p = 1;
}
if (Mas[j - 1].GetInd() == 2)
{
Mas[j - 1].Set( '', 0);
j--;
Stan(9);
p = 1;
}
Break;
case 11:
if (Mas[j - 1].GetInd() == 1)
{
Mas[j - 1].Set( '', 0);
j--;
Stan(5);
p = 1;
}
if (Mas[j - 1].GetInd() == 2)
{
Mas[j - 1].Set( '', 0);
j--;
Stan(11);
p = 1;
}
}
}
// Если не сделано считывания символа, или запись или считывание с стека
// И мы не находимся в 1-м состоянии (конечное состояние) то ошибка
if ((p == 0) && (i ! = 1))
{
printf("\ n --- Error! Stri4ka ne pravulna! ---") getch();
exit(0);
}
}Решение задачи: «Не могу скомпелировать код»
textual
Листинг программы
...
class Stek
{
public:
...