實驗三 有限自動機的構造與識別
一、實驗目標
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='a')||(p[i][j]<='z'&&p[i][j]>='a')||(p[i][j]<='9' &&p[i][j]>='0'))
else
}count++;k=0;
}// 判斷是確定的還是非確定的有窮狀態自動機並進行前半部分列印
// 判斷依據q 陣列中每一行字串是否相同
flag=0;
for(i=0;i='a')||(p[i][j]<='z' && p[i][j]>='a')||(p[i][j]<='9'&&p[i][j]>='0'))
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");
}
實驗三 有限自動機的構造與識別
一 實驗目標 1 掌握有窮狀態自動機的概念 2 掌握有窮狀態自動機的儲存及表示方法 3 掌握有窮狀態自動機與正則式之間的關係。二 實驗要求 1 輸入正規式 2 構造該正規式的有窮狀態自動機 3.以五元組形式輸出。三 演算法 參見教材的轉換規則。練習 a b abb l l d 1 1010 1 01...
實驗三 有限自動機的構造與識別
實驗三 有限自動機的構造與識別 一 實驗目標 1 掌握有窮狀態自動機的概念 2 掌握有窮狀態自動機的儲存及表示方法 3 掌握有窮狀態自動機與正則式之間的關係。二 實驗要求 1 輸入正規式 2 構造該正規式的有窮狀態自動機 3.以五元組形式輸出。nnfa的分列過程如下 32for j 0 j 3336...
1118實驗三有限自動機的構造與識別
include include include int main 存放非終結符號 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 請輸入文法 ...