谁能帮我设计一个确定的有限自动机?

pengyu315 2005-03-23 04:24:48
紧急求救!哪位高人能帮我用C++写一个确定的有限自动机!
...全文
182 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
pengyu315 2005-03-25
  • 打赏
  • 举报
回复
怎么没人回了?哪位大侠帮帮忙啊!
showlie 2005-03-23
  • 打赏
  • 举报
回复
老实说,我到现在还是没有搞清楚什么图灵机、××自动机什么的!太抽象了,又没人讲解,唉!
pengyu315 2005-03-23
  • 打赏
  • 举报
回复
有限自动机的运行
设计一个确定的有限自动机,写出状态转换函数,或画出状态图,编制程序,输入一个字符串,程序能判别该字符串是否能被该有限自动机接受,可以考虑输出能否接受的同时,输出状态路径。
⑴整数的判断:写出整数的正规式,画出状态图,写出状态转换函数。编出程序。难度:简单。
⑵同上的过程还可以进行:正偶数的判断、自然数的判断、定点数的判断等。
⑶实数的判断:过程同上。
这是完整的题目
终于把寻风的程序看懂了。但正规式是包括数字的啊。
"DFA为了区分状态,正规式中数字一律报错!!!"
我看不懂,嘿嘿。本人编译能力确实是不行啊。
qingcairousi 2005-03-23
  • 打赏
  • 举报
回复
到国外网站找找,说不定有源码
pengyu315 2005-03-23
  • 打赏
  • 举报
回复
再给题目一个解释!
编译原理里面的一个做词法分析的。
pengyu315 2005-03-23
  • 打赏
  • 举报
回复
#include"正规式.h"
我对这条语句很郁闷。能否给点解释?????????
期待中!!!!!!!
pengyu315 2005-03-23
  • 打赏
  • 举报
回复
先谢谢个位光临本贴。对。是词法分析的。
特别谢谢寻风。但错误太多。102个致命错。
GO ON!
xjp6688 2005-03-23
  • 打赏
  • 举报
回复
找找编译的书吧
arrowcy 2005-03-23
  • 打赏
  • 举报
回复
是词法分析里面的?
ra3 2005-03-23
  • 打赏
  • 举报
回复
不大明白
oyljerry 2005-03-23
  • 打赏
  • 举报
回复
有限自动机指什么?
晨星 2005-03-23
  • 打赏
  • 举报
回复
怎么跑出定时器来了?
xunfengxxx 2005-03-23
  • 打赏
  • 举报
回复
#include<iostream.h>
#include<stdlib.h>

void Initial(char a[],int &judge)
{
int k,flag1,flag2;
char ch1;


flag1=0;
flag2=0;
if((a[0]=='|')||(a[0]==')')||(a[0]=='*')||isdigit(a[0]))
{
cout<<"Error!You put the frist charater wrong!"<<endl;

judge=0;


}
if(isalpha(a[0]))
{judge=1;
}


for(k=1;a[k]!='\0';k++)///hefazifude panduan
{
ch1=a[k];
if(!isalpha(ch1)&&ch1!='|'&&ch1!='('&&ch1!=')'&&ch1!='*')
{
cout<<"Error!"<<setw(8)<<"You put the "<<k+1<<"th"<<" charater wrong!"<<endl;
judge=0;

}
if(ch1=='(')
flag1++;
if(ch1==')')
flag2++;


}
if(flag1!=flag2)//panduankuohaoshifoupipei
{
cout<<"Error!"<<setw(8)<<"Make sure the number of ( match with )!"<<endl;
judge=0;


}

}
void Letter()
{


if(a[j+1]!='*')
{

if(i==0)
{

sta[i]=0;

end[i]=count;
path[i]=ch;
i++;
count++;
}
else
{
sta[i]=end[i-1];
end[i]=count;
path[i]=ch;
i++;
count++;
}
}
else
{
if(i==0)
{
sta[i]=0;
end[i]=0;
path[i]=ch;
i++;
j++;
}
else
{
sta[i]=end[i-1];
end[i]=end[i-1];
path[i]=ch;
i++;
j++;
}
}
}
///////////////////////////////////////////////////////////////


void Kuohao()
{
if(i==0)
consit=0;
else
consit=end[i-1];
while(a[j]!=')')
{
j++;
ch=a[j];
if(isalpha(ch))
Letter();
if(ch=='(')
Kuohao();
if(ch=='|')
Huo();
}
j++;
ch=a[j];
if(ch=='*')
{
sta[i]=end[i-1];
path[i]='e';
end[i]=consit;
i++;
}
consit2=end[i-1];/////
if(isalpha(ch))
Letter();
}


/////////////////////////////////////////////////////////


void Huo()
{
if(a[j-1]==')')
{
j++;
ch=a[j];
if(ch=='(')//////
{
j++;
ch=a[j];
sta[i]=consit;
path[i]=ch;
end[i]=count;
count++;
i++;
j++;
ch=a[j];
while(a[j+1]!=')')
{
if(isalpha(ch))///****
Letter();
if(ch=='(')
Kuohao();
if(ch=='|')
Huo();
j++;
ch=a[j];

}
cout<<ch<<endl;
sta[i]=end[i-1];
path[i]=ch;
end[i]=consit2;
i++;

}//////
else
{
sta[i]=consit;
path[i]=ch;
end[i]=end[i-1];
//count++;
i++;
}





}///////
else
{
consit3=end[i-1];
j++;
ch=a[j];
if(isalpha(ch))
{
consit=sta[i-1];

sta[i]=consit;
path[i]=ch;
end[i]=end[i-1];////
//count++;
i++;
}//////////////////////////
if(ch=='(')
{
j++;
ch=a[j];
if(a[j+1]!=')')
{
sta[i]=sta[i-1];
path[i]=ch;
end[i]=count;
i++;
count++;
j++;
ch=a[j];

while(a[j+1]!=')')
{
if(isalpha(ch))
Letter();
// if(ch=='(')
// Kuohao();
// if(ch=='|')
// Huo();
j++;
ch=a[j];
}////////

sta[i]=end[i-1];
path[i]=ch;
end[i]=consit3;
i++;
}///////////******************
}//////////////////////*************
}
}
void print_f()
{ cout<<"请输入正规式:"<<endl;
cin>>a;

Initial(a,judge);
while(judge==0)
{cin>>a;

Initial(a,judge);
}

while(a[j]!='\0')
{
ch=a[j];
if(isalpha(ch))
Letter();
if(ch=='(')
Kuohao();
if(ch=='|')
Huo();
j++;
}

total=i;
cout<<"你的正规式的DFA为:"<<endl;
for(i=0;i<total;i++)
cout<<sta[i]<<setw(6)<<path[i]<<setw(6)<<end[i]<<endl;
cout<<"还想继续执行吗?"<<"1----yes "
<<"0-----no"<<endl;
char ch;
cin>>ch;
switch(ch)
{
case '1':print_f();break;
case '0':exit(0);
default:
{
cout<<"请做出认真选择谢谢合作!"<<endl;
cin>>ch;
switch(ch)
{
case '1':print_f();break;
case '0':exit(0);
default:cout<<"对不起你可能不要再输了欢迎使用再见"<<endl;break;
}

}

}}
xunfengxxx 2005-03-23
  • 打赏
  • 举报
回复
#include<iostream.h>
#include<ctype.h>
#include<iomanip.h>
#include<math.h>
void Letter();/////判断字母,及处理。
void Kuohao();/////判断括号,及处理。
void Huo();
void print_f();
void Initial(char ,int &);
char a[20],path[20];
int sta[20],end[20];
char ch,consit,consit2,consit3;
int count,j,i,total;
int flag10;
int judge;
#include"正规式.h"
#include<time.h>



//////////////////////////////////////////////

void main()
{ cout<<"输入正规式请用字母表示"<<endl;
cout<<"DFA为了区分状态,正规式中数字一律报错!!!"<<endl;
count=1;
j=0;
i=0;
//cout<<a<<endl;
//cout<<"judge:"<<judge<<endl;

print_f();
}


///////////////////////////////////////////////////////////////

pengyu315 2005-03-23
  • 打赏
  • 举报
回复
不懂啊。做编译的课程设计。啥都不懂。:(
xlwyx0501 2005-03-23
  • 打赏
  • 举报
回复
设置定时器!SetTimer(1, 500);
不想用时就KillTimer(1);

64,683

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧