Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
10
Добавлен:
17.04.2013
Размер:
1.64 Кб
Скачать
#include <string.h>
#include <iostream.h>
#include <ctype.h>
#include <conio.h>
/*
1 - fo(So,E,hh) = (So,A)
2 - f (So,a,A)  = (So,B), a (- T/{0..9}
3 - f (So,t,B)  = (So,e), t (- T
4 - f (So,t,A)  = (So,B)
5 - fo(So,E,A)  = (So,e)
6 - fo(So,E,B)  = (So,e)
*/
const A= 'A';  //begin symbol
const B= 'B';
const E = 'E';
const K = 'K';
const S0 = 'S';
const h0 = 'h';
const e = 'e';
const a = 'a';
const t = 't';
const un = 'u';

char Convert(char c)
{
if (c == '_') return t;
if (isdigit(c)) return t;
if (isalpha(c) && !isdigit(c)) return a;
if (isalpha(c)) return t;
return un;
}
int Develop(char *str)
{
struct rule
{
	char state;
	char sym;
	char sp;
};
struct F
{
	rule beg;
	char outst;
	char tos;
} f[8] ={{{S0,E,h0},S0,K}, {{S0,a,K},S0,B}, {{S0,t,B},S0,h0}, {{S0,t,h0},S0,B}, {{S0,E,h0},S0,h0}, {{S0,E,B},S0,h0}, {{S0,a,B},S0,h0}, {{S0,a,h0},S0,B} };
char stack[100];
int SP = 98;
rule CurSt;
	CurSt.state = S0;
	CurSt.sym = Convert(str[0]);
	CurSt.sp = h0;
stack[SP--] = h0;
int CurPos;

	for (CurPos = 0; CurPos<strlen(str); )
	{
	   for (int i=0; i<8; i++)
	   {
	   if (CurSt.state == f[i].beg.state && (CurSt.sym == f[i].beg.sym || f[i].beg.sym == E) && CurSt.sp == f[i].beg.sp)
		{
		CurSt.state = f[i].outst;
		if (i == 0) stack[SP--] = h0;
		CurSt.sp = f[i].tos;
		if (f[i].beg.sym == E && f[i].tos == e) CurSt.sp = stack[++SP];
		if (f[i].tos != e) stack[SP--] = f[i].tos;
		CurSt.sym = Convert(str[CurPos]);
		if (f[i].beg.sym != E) {CurSt.sym = Convert(str[CurPos+1]);CurPos++;}
		break;
		}
	    if (i==5)
		{
		return 1;
		}
	   }
	}
return 0;
}
Соседние файлы в папке Магазин