用于从转换表生成正则表达式的程序

时间:2012-10-10 08:12:26

标签: finite-automata automata

我很好奇,如果有人知道如何编写一个程序来生成一个正则表达式,给定一个有限的自动化或者任何程序(最好是c)已经存在。

为了使事情变得简单,我想将状态数限制为大约4,假设FA是最小的形式,并且FA只有一个FinalState和只有一个StartState。

我已经考虑了一段时间了,我认为第一个显而易见的事情是为FA创建转换表。

所以FA看起来像这样:

NumberOfStates 4 
StartState   1 
FinalState   4 
StateNumber  NextStateA   NextStateB
1            2            4
2            3            2
3            4            4

这将生成正则表达式:b +(ab * a(a + b))

我已经绞尽脑汁待了几个小时,但我很难知道如何解决这个问题。非常感谢任何想法。

2 个答案:

答案 0 :(得分:2)

Follwoing是为(a + b + c)* abc实现FA的代码。但我无法理解逻辑。

int main()
{
     char str[50],input[15],inpstate[15],outstate[15],state='A';
     int i=0,j;
     strcpy(input,"abcabcabcabc");
     strcpy(inpstate,"AAABBBCCCDDD");
     strcpy(outstate,"BAABCABADBAA");
     printf("\nEnter the string:-  ");
     gets(str);
     while(str[i]!='\0')
     {
          for(j=0;j<12;j++){
         if(inpstate[j]==state && input[j]==str[i]){
              state=outstate[j];
              break;
          }
           }
          if(j==12){
          state='E';
          break;
        }
        i++;
     }
     if(state=='D')
          printf("\nValid String \n");
     else
          printf("\nInvalid String \n"); 
     return 0;
}

答案 1 :(得分:0)

YoU可以使用Kleene的算法(这是Floyd-Warshall算法的一个特例)来做到这一点。

您可以在libAMoRE库中找到它:http://libalf.informatik.rwth-aachen.de/index.php?page=download