Поиск достижимых символов в КС грамматике

  • Автор темы SandrSay
  • Дата начала
Статус
Закрыто для дальнейших ответов.
S

SandrSay

Гость
#1
Программа ищет достижимые символы в KC грамматике. Достижимые: Y-аксиома, все что выводится ("->") из аксиомы достижимо, если в правой части символ достижим, то все символы левой достижимы. Например:
Y->A
A->BC
E->F
E и F - недостижимы. Еще в правой части всегда строчная буква, причем одна, в левой - все что угодно, кроме пустого. В качестве проверки можно использовать выше указанный пример.
[codebox]char *Dostizh(char chr[], char axiom)
{
vector <char> v;
char *temp=new char[strlen(chr)];
char *str=new char[strlen(chr)];
char *vyvod=new char[strlen(chr)];
int i=0, j=0;
int q, w;
v.push_back(axiom);
while (!v.empty())
{
temp[j]=v.back();
v.pop_back();
if (isupper(temp[j]))
{
strcpy(str, chr);
q=0; w=0;
char *p=strtok(str, "\r\n");
while (p)
{
if (temp[j]==p[q])
{
q=3;
while (p[q])
{
if (temp[j]!=p[q])
{
vyvod[w]=p[q];
w++;
}
q++;
}
}
q=0;
p=strtok(NULL, "\r\n");
}
delete []str;
j++;
if (vyvod)
{
vyvod[w]='\0';
while (vyvod)
{
v.push_back(vyvod);
i++;
}
delete []vyvod;
}
}
i=0;
}
temp[j]='\0';
return temp;
}
//-------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
char *chr, *pstr;
chr=Memo1->Lines[0].GetText();
char *temp;
temp=new char[strlen(chr)];
pstr=Dostizh(chr, 'Y');
strcpy(temp, pstr);
delete []pstr;
if (!temp)
{
Memo1->Clear();
return;
}
delete []chr;
delete []temp;
}[/codebox]
 
Статус
Закрыто для дальнейших ответов.