简易有穷自动机实验
一、實驗目標
??
1、掌握有窮狀態(tài)自動機的概念;??
2、掌握有窮狀態(tài)自動機的存儲及表示方法;
3、掌握有窮狀態(tài)自動機與正則式之間的關系。
?
二、實驗要求
??
1、輸入正規(guī)式;?
2、構造該正規(guī)式的有窮狀態(tài)自動機;
3. 以五元組形式輸出。
?
三、構造方法
如圖
?
代碼如下
#include<iostream> #include<string> using namespace std; void DFA(int, int, string); int main() {string s;cin >> s;DFA(0, 1, s);system("pause");return 0; }void DFA(int x, int y, string s)//采用遞歸的方法 {int i = 0;for (i = 0; i < s.length(); i++)//多處采用for是為了保證關鍵字的優(yōu)先級if (s[i] == '|')//如果s[i]==‘|’,則將字符串s分隔開,如 'a|b'的話,將字符串分隔為s1=a;s2=b;并再次進行遞歸 ,遞歸結束的條件為s[i]!=’|‘ {string s1(s, 0, i - 1);string s2(s, i + 1);DFA(x, y, s1); DFA(x, y, s2);}for (i = 0; i < s.length(); i++)//同上,遞歸結束條件為是s[i]!=’.‘if (s[i] == '.'){string s1(s, i - 1, 1);string s2(s, i + 1, 1);DFA(x, y + 1, s1); DFA(y + 1, y, s2);}for (i = 0; i < s.length(); i++)//同上,遞歸結束條件為s[i]!=’*‘ {if (s[i] == '*'){string s1("~");string s2(s, i - 1, 1);DFA(x, y + 2, s1);DFA(y + 2, y + 2, s2);DFA(y + 2, y, s1);}}if (s.length() == 1)//確保最后不會輸出整個字符串cout << "f(" << x << "," << s << ")=" << y << endl; }?
程序結果如圖
?
其中關于閉包部分會出現(xiàn)重復輸出,但不影響結果
結構圖如右(0表示初態(tài),1表示終態(tài),3,4為新添加狀態(tài),~表示空串)
?
轉(zhuǎn)載于:https://www.cnblogs.com/lawliet12/p/6103988.html
總結
- 上一篇: js中null和undefined的区别
- 下一篇: 一加3 CM13 12306 不能用