实验三 有限自动机的构造与识别

Posted 潇洒峰

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实验三 有限自动机的构造与识别相关的知识,希望对你有一定的参考价值。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAX 101
int n=1;
void tackBack(char ch[],int start,int end,int begain,int final);
int main(){
    char ch[MAX];
    int size;
    scanf("%s",ch);
    size=strlen(ch);
    tackBack(ch,0,size,0,1);
    return 0;
}

void tackBack(char ch[],int start,int end,int begain,int final)
{
    
    int i=start;    
    while(!(ch[i] == \'|\') && i<end)
        i++;
    if(ch[i]==\'|\'){
        tackBack(ch,start,i-1,begain,final);
        tackBack(ch,i+1,end,begain,final);    
    }
    i=start;
    //printf("start=%d\\tend=%d\\n",start,end);
    
    if(ch[i]>=\'a\' && ch[i]<=\'z\')
    {
        if(ch[i+1]==\'.\')
        {
            n++;
            printf("f<%d,%c>=%d\\n",begain,ch[i],n);                
        }
        else if(ch[i+1]==\'*\')
        {
            n++;
            printf("f(%d,~)=%d\\n",begain,n);
            printf("f(%d,~)=%d\\n",n,final);
            printf("f(%d,%c)=%d\\n",n,ch[i],n);
        }
    }    
    i+=2;
    while(i<end)
    {
        if(ch[i]>=\'a\' && ch[i]<=\'z\')
        {
            if(ch[i+1]==\'.\')
            {
                printf("f<%d,%c>=%d\\n",n,ch[i],n+1);        
                n++;
            }
            else if(ch[i+1]==\'*\')
            {
                n++;
                printf("f(%d,~)=%d\\n",begain,n);
                printf("f(%d,~)=%d\\n",n,final);
                printf("f(%d,%c)=%d\\n",n,ch[i],n);
            }
        }    
        i++;
    }
    if(ch[i]>=\'a\' && ch[i]<=\'z\')
    {
        
        if(ch[i+1]==\'*\')
        {
            printf("f(%d,%c)=%d\\n",n,ch[i],final);
        }
        else
        {
            printf("f<%d,%c>=%d\\n",n,ch[i],final);
        }
    }

}

实验结果

以上是关于实验三 有限自动机的构造与识别的主要内容,如果未能解决你的问题,请参考以下文章

实验三 有限自动机的构造与识别

实验三 有限自动机的构造与识别

实验三有限自动机的构造与识别

实验三 有限自动机的构造与识别

第三次实验--有限自动机的构造与识别

有穷状态自动机