我很好奇,如果有人知道如何编写一个程序来生成一个正则表达式,给定一个有限的自动化或者任何程序(最好是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))
我已经绞尽脑汁待了几个小时,但我很难知道如何解决这个问题。非常感谢任何想法。
答案 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