编译原理实验--DFA程序

§4.6 DFA M=({S,U,V,Q},{a,b},f, S, {Q})其中f定义:

Ø f( S,a )= U   f( V,a )= U
Ø f( S,b )= V   f( V,b )= Q
Ø f( U,a )= Q   f( Q,a )= Q
Ø f( U,b )= V   f( Q,b )=Q
DFA 的状态图 表示
 
编写一个DFA程序,用于 判断符号串 t 是否被 DFA  M 接受?
 

输入

输入*上的符号串t

输出

如果*上的符号串t能够被DFA M识别,输出accept

否则,输出not accept

样例输入

 
baab

样例输出

 
accept
#include <stdio.h>
//S为状态,t为输入字符
char Move(char S,char t){
    char nextstatus;//下一状态
    if(t=='a')//如果输入字符为a,即进行a转
    {  if(S=='S') nextstatus='U';
        if(S=='U') nextstatus='Q';
        if(S=='V') nextstatus='U';
        if(S=='Q') nextstatus='Q';
    }else if(t=='b')//如果输入字符为a,即进行a转
    {if(S=='S')nextstatus='V';  if(S=='U')nextstatus='V';
      if(S=='V')nextstatus='Q'; if(S=='Q')nextstatus='Q';
      }
    return nextstatus;
}
int DFA(char *input)
{   char S = 'S';//初始状态
    for(int i=0; input[i]!='\0'; i++)
        S= Move(S, input[i]);
    if(S=='Q') return 1;//Q为终止状态
    else  return 0;
}
int main()
{  char input[40];
    scanf("%s",input);
    if(DFA(input))  printf("accept\n");
    else  printf("not accept\n");
    return 0;
}

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值