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

Тема в разделе "Общие вопросы по С и С++", создана пользователем SandrSay, 10 июн 2008.

Статус темы:
Закрыта.
  1. SandrSay

    SandrSay Гость

    Программа ищет достижимые символы в 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]
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей