Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.08.2014, 09:46   #11
Otar4ik
Форумчанин
 
Регистрация: 16.04.2010
Сообщений: 123
По умолчанию

Добрый день,это снова я беспокою.
Я разобрался в структурах struct rule и struct grammar но не могу понять для чего нужны struct t и nt(это получается терминалы и нетерминалы)

и вот в этой части как я понял происходит построение конечного автомата?

Код:
void parse_a(char* a)
{
struct buf bf;
int i;
int state = 0;
for (i=0, state = 0; a[i]!='\0'; i++)
{
switch(a[i])
{
case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':
case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': 
bf.add(a[i]); 
printf("a bf: "); 
bf.print(); 
printf("\n"); 
break;
case ';':  
switch(state) 
{ 
case 0: if (lnt == 0) 
{  
     lnt = new nt(); lnt->add(bf.x); 
     } 
     else 
     { 
          lnt->add_next(bf.x);
          } 
          bf.del(); 
          break; 
case 1: 
     if (lt == 0) 
     {
            lt = new t(); 
            lt->add(bf.x); 
            } 
            else 
            { 
                 lt->add_next(bf.x);
                 } 
                 bf.del(); 
                 break; 
case 2: 
     if (ltable == 0) 
     {
                ltable = new table(); 
                } 
                bf.del();  
                break; 
case 3: 
     if (lst == 0) 
     {
             lst = new st(); 
             lst->add(bf.x); 
             } 
             else 
             { 
                  lst->add_next(bf.x);
                  } 
                  bf.del();  
                  break; 
default:
         break; 
         } 
state++; 
break;
case ',': 
switch(state) 
{ 
case 0: 
     if (lnt == 0) 
     {  
             lnt = new nt(); 
             lnt->add(bf.x); 
             } 
             else 
             { 
                  lnt->add_next(bf.x);
                  } 
                  bf.del();
                   break; 
case 1: 
     if (lt == 0) 
     {
            lt = new t(); 
            lt->add(bf.x); 
            } 
            else 
            { 
                 lt->add_next(bf.x);
                 }
                  bf.del(); 
                   break; 
case 2: 
     if (ltable == 0) 
     {
                ltable = new table();
                 } 
                 bf.del(); 
                  break; 
case 3: 
     if (lst == 0) 
     {
             lst = new st(); 
             lst->add(bf.x); 
             } 
             else 
             { 
                  lst->add_next(bf.x);
                  } 
                  bf.del();  
                  break; 
default: break; } break;
case ' ': break;
default: break;
}
}
}

void parse_b(char* b)
{ 
struct buf bf;
struct buf bf2;
int i;
int state = 0;
for (i=0, state = 0; b[i]!='\0'; i++)
{
switch(b[i])
{
case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':
case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': 
switch (state)
{
case 0: bf.add(b[i]); printf("bf: "); bf.print(); printf("\n"); break;
case 2: bf2.add(b[i]); printf("bf2: ");  bf2.print(); printf("\n"); break;
default: break;
}
break;
case ';':  if (rl == 0) {  rl = new rule(); rl->add(bf.x, bf2.x); } else { rl->add_next(bf.x, bf2.x);} bf.del(); bf2.del(); state = 0; break;
case ',':  if (rl == 0) {  rl = new rule(); rl->add(bf.x, bf2.x); } else { rl->add_next(bf.x, bf2.x);} bf.del(); bf2.del(); state = 0;  break; 
case ' ': break;
case '-': switch (state) { case 0: state = 1; break; default: break; } break;
case '>': switch (state) { case 1: state = 2; break; default: break; } break;
case '|':  if (rl == 0) {  rl = new rule(); rl->add(bf.x, bf2.x); } else { rl->add_next(bf.x, bf2.x);} bf2.del();  break;
default: break;
}
}
}
void parse(char* a, char* b){ parse_a(a); parse_b(b);}

};
Otar4ik вне форума Ответить с цитированием
Старый 12.08.2014, 17:41   #12
Otar4ik
Форумчанин
 
Регистрация: 16.04.2010
Сообщений: 123
По умолчанию

Как я понял это конечный автомат,а как его таблично нарисовать..Рисовать за меня не надо,я сам могу)Просто подскажите))

Просто это и есть конечный автомат?))
Изображения
Тип файла: jpg НаФорум121212121.jpg (45.1 Кб, 149 просмотров)

Последний раз редактировалось Otar4ik; 12.08.2014 в 18:00.
Otar4ik вне форума Ответить с цитированием
Старый 14.08.2014, 14:11   #13
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,601
По умолчанию

В коде происходит считывание грамматики в структуры, причем неправильное, так как не учитываются все случаи входных данных. Построения по грамматике автомата в коде нет.
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Старый 14.08.2014, 17:38   #14
Otar4ik
Форумчанин
 
Регистрация: 16.04.2010
Сообщений: 123
По умолчанию

А как его можно построить?

просто нарисовать граф в графическом модуле или как-то из данных в граф(или таблицу сделать)..

Просто сам процесс до сих пор непонятен, я прочитал методичку Ишаковой там часть показана программы работй,а часть инет и я не смог уловить структуру самой программы.

по её методичке я и графы построил,которые прикреплены в 1-ом сообщении этой темы.

Мне просто не повезло при распределении темы по учебной практике,там рандомно выбиралось)))

Последний раз редактировалось Otar4ik; 14.08.2014 в 18:44.
Otar4ik вне форума Ответить с цитированием
Старый 15.08.2014, 10:01   #15
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,601
По умолчанию

В Википедии есть статья про конечные автоматы. У меня на компьютере интернета нет. Граф и конечный автомат программа должна построить, если я понял задачу.
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Старый 15.08.2014, 21:33   #16
Otar4ik
Форумчанин
 
Регистрация: 16.04.2010
Сообщений: 123
По умолчанию

Да по заданию так,ввести грамматику построить конечный автомат и потом граф.Но граф необязательно как сказал мне руководитель,так как у меня сложная тема из всех.
Otar4ik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с регулярным выражением kakawkin PHP 0 13.09.2012 01:34
Вопрос по регулярным выражениям fantom_ZET PHP 10 10.12.2010 23:26
Помогите с регулярным вырежением [EX]n1 Помощь студентам 2 04.01.2010 15:34
реализация конечных автоматов классами или без них Armina Общие вопросы C/C++ 1 31.10.2009 03:43