欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

编译原理实验一 模拟DFA

程序员文章站 2022-05-12 16:29:33
...

本实验模拟DFA识别含相继3个1的二进制串

DFA状态转换图如下:

编译原理实验一 模拟DFA

核心代码如下,其中状态转换图中的ABCD状态对应代码中各个函数。

int A(char str[],int Num)//开始状态
{
    if(str[Num]=='0')
    {
        if(A(str,Num+1)==1)
            return 1;
        else
            return 0;
    }
    else if(str[Num]=='1')
    {
        if(B(str,Num+1)==1)
            return 1;
        else
            return 0;
    }
    else
        return 0;
}

int B(char str[],int Num)//识别了一个1
{
    if(str[Num]=='0')
    {
        if(A(str,Num+1)==1)
            return 1;
        else
            return 0;
    }
    else if(str[Num]=='1')
    {
        if(C(str,Num+1)==1)
            return 1;
        else
            return 0;
    }
    else
        return 0;
}

int C(char str[],int Num)//识别第二个1
{
    if(str[Num]=='0')
    {
        if(A(str,Num+1)==1)
            return 1;
        else
            return 0;
    }
    else if(str[Num]=='1')
    {
        if(D(str,Num+1)==1)
            return 1;
        else
            return 0;
    }
    else
        return 0;
}

int D(char str[],int Num)//识别第三个1
{
    if(Num<strLength)
    {
        if(str[Num]=='0'||str[Num]=='1')
        {
            if(D(str,Num+1)==1)
                return 1;
            else
                return 0;
        }
    }
    else if(Num==strLength)
        return 1;
    else
        return 0;
}

代码运行结果如下:

多次输入字符串,判断是否符合题目要求

编译原理实验一 模拟DFA