實驗三 有限自動機的構造與識別

2022-06-04 19:33:09 字數 1647 閱讀 4602

實驗三 有限自動機的構造與識別

一、實驗目標

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 請輸入文法 ...