實驗三 有限自動機的構造與識別
一、實驗目標
1、掌握有窮狀態自動機的概念;
2、掌握有窮狀態自動機的儲存及表示方法;
3、掌握有窮狀態自動機與正則式之間的關係。
二、實驗要求
1、輸入正規式;
2、構造該正規式的有窮狀態自動機;
3. 以五元組形式輸出。
三、演算法
參見教材的轉換規則。
練習:² (a|b)*abb
² l(l|d)*
² 1(1010*|1(010)*1)*0
四、完成演算法設計、編碼和除錯工作,完成實驗報告。
#include
#include
#include
int
main()
;
//存放非終結符號
char
vt[30] = ;
//存放終結符號
printf(
"\t請輸入規則個數:"
);
scanf(
"%d"
,&n);
line = n;
for
(i = 0; i < 30; i++)
//給字串陣列p、q全部賦值為'\0'
for
(j=0;j<30;j++)
printf(
"\t請輸入文法:\n"
);
for
(i = 0; i < line; i++)
//把字元分為終結符號合非終結符號
l=0;m=0;
for
(i = 0;i < line; i++)
}
if
(flag == 0)
}
// 終結符號放入陣列vt中
if
(p[i][j]<=
'z'
&& p[i][j]>=
'a'
)
}
if
(flag==0)
}
}
//把規則右部分分離放入陣列q中
count = 0;
k =0;
for
(i = 0;i < line;i++)
else
}
count++;k=0;
}
//判斷是確定的還是非確定的有窮狀態自動並進行前半部分列印
//判斷依據:q陣列中每一行字串是否相同
flag = 0;
for
(i=0;i
if
(flag==0)
}
}
}
// 把規則右部分分離放入陣列 q 中
count=0;
k=0;
for
(i=0;i
else
}
count++;k=0;
}
// 判斷是確定的還是非確定的有窮狀態自動機並進行前半部分列印
// 判斷依據q 陣列中每一行字串是否相同
flag=0;
for
(i=0;i
}
}
if
(flag==1) , ) \n"
);}
else
, ) \n"
);}
printf(
"\t其中:\n\tk=
printf(
"}\n"
);printf(
"\t∑ =
printf(
"}\n"
);k=0;count=0;
for
(i=0;i
else
if
(p[i][j]==
'|'
)
}
}
count++;k=0;
}
printf(
"\n"
);printf(
"\tm:\n"
);l=0;
while
(vn[l]!=
'\0'
)
}
printf(
"}\t"
);l++;
}
printf(
"\n"
);
l=0;
k=0;
while
(vt[k]!=
'\0'
)
}
printf(
"}\t"
);l++;
}
k++;printf(
"\n"
);
}
system(
"pause"
);
}
1118有限自動機的構造與識別
include include include intmain 存放非終結符號 char vt 30 存放終結符號 printf 請輸入規則個數 scanf d n line n for i 0 i 30 i 給字串陣列p q全部賦值為 0 for j 0 j 30 j printf 請輸入文法 n...
實驗三 有限自動機的構造與識別
實驗三 有限自動機的構造與識別 一 實驗目標 1 掌握有窮狀態自動機的概念 2 掌握有窮狀態自動機的儲存及表示方法 3 掌握有窮狀態自動機與正則式之間的關係。二 實驗要求 1 輸入正規式 2 構造該正規式的有窮狀態自動機 3.以五元組形式輸出。三 演算法 參見教材的轉換規則。練習 a b abb l...
實驗三 有限自動機的構造與識別
一 實驗目標 1 掌握有窮狀態自動機的概念 2 掌握有窮狀態自動機的儲存及表示方法 3 掌握有窮狀態自動機與正則式之間的關係。二 實驗要求 1 輸入正規式 2 構造該正規式的有窮狀態自動機 3.以五元組形式輸出。三 演算法 參見教材的轉換規則。練習 a b abb l l d 1 1010 1 01...