正規文法轉化DFA

2022-05-14 21:24:08 字數 1126 閱讀 1593

#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("請輸入文法:\n");

for(i=0;i='a'||(p[i][j]<='9'&&p[i][j]>='0'))

}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='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]=='l')}}

count++;

k=0;

}printf("\n");

//列印m後部分

printf("m:\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 將 上的乙個正規式轉換成正規文...

正規文法與正規式

3型文法也叫作正規文法,它對應於有限狀態自動機,它是在2型文法的基礎上滿足 a a ab 右線性 或a a ba 左線性 如果有a a,a ab,b a,b cb則符合3型文法的要求。但是a ab,a ab,b a,b cb或a a,a ba,b a,b cb則不符合3型文法的要求。也就是說,不能夠...

10 16 正規文法與正規式

1.分別寫出描述以下語言的正規文法和正規式 1 l1 2 l2 3 l3 答 1 正規文法 s aa a ba a 正規式 s a b a 2 正規文法 s as s bs b 正規式 s a a b b 3 正規文法 s ab s ab 正規式 s ab ab 2.將以下正規文法轉換到正規式 1 ...