資源簡介
完成CFG和PDA互相轉換,同時完成在CFG和PDA上模擬串的推導過程

代碼片段和文件信息
//cfg_pda.cpp
//由于時間關系沒有實現文法的壓縮輸入?
#include?“stdio.h“
#include?“cfg_pda.h“
#include?“fstream.h“
#include?“malloc.h“?
#include?“string.h“
rule*?processInput(char?*Alphabet_Tchar?*Alphabet_N?char?*Start_symbol)
{
int?ijkhsdta;
i=0;j=0;k=0;h=0;s=0;
bool?symbol=false;
char?csymc1;
char?b;
char?statement[Maxlength_Rule];
char?s_end[10]=“end“;
????struct?rule?*p;
struct?rule?*p2;
struct?rule?*GFL_R;
????struct?right_record?*q;
struct?right_record?*q2;
q2=q;
printf(“請依次輸入文法G的所有規則輸入時應該遵守以下規則:\n“);
printf(“1.每一條規則占一行以鍵入Enter表示結束這條規則的輸入\n“);
printf(“2.一個非終結符號可以作為若干重寫規則的左部\n“);
printf(“3.規則以非縮寫形式輸入\n“);
????printf(“4.空字符用$代替\n“);
?printf(“5.規則以end為規則輸入完畢\n“);
????GFL_R=(struct?rule*)malloc(sizeof(rule));
p=GFL_R;
p2=GFL_R;
p->next=NULL;
p->right=NULL;
p->right=(struct?right_record*)malloc(sizeof(struct?right_record));
scanf(“%s“statement);
while(strcmp(statements_end)<0)
{
d=0;
c=statement[d++];
q=p->right;
q->next=NULL;
if(symbol==false)
{
*Start_symbol=c;
????symbol=true;
}
if(i==0)
????Alphabet_N[i++]=c;
else
{
h=i;
while(h>=1)
{
if(c==Alphabet_N[h-1])
break;
h--;
}
if(h==0)
Alphabet_N[i++]=c;
}
????p->left=c;
d=d+3;
????while((c=statement[d++])!=‘\0‘)
{
/*if(c==‘|‘)
????????{???
????????????sym=p->left;
????p->next=(struct?rule*)malloc(sizeof(struct?rule));
p=p->next;
p->right=(struct?right_record*)malloc(sizeof(right_record));
q=p->right;
q->next=NULL;
p->left=sym;
p->next=NULL;
p->right=NULL;
}
else
{
*/
????????q->right=c;
if(j==0)
????????Alphabet_T[j++]=c;
else
{
k=j;
? ????while(k>=1)
{
if(c==Alphabet_T[k-1])
break;
k--;
}
????????if(k==0)
????Alphabet_T[j++]=c;
}
if((c1=statement[d])!=‘\0‘)
{
q->next=(struct?right_record*)malloc(sizeof(struct?right_record));
????q=q->next;
q->next=NULL;
}
????????//}
}
scanf(“%s“statement);
if(strcmp(statements_end)<0)
{
p->next=(struct?rule*)malloc(sizeof(rule));
????p=p->next;
p->next=NULL;
p->right=(struct?right_record*)malloc(sizeof(right_record));
}
}
length_N=i;
length_T=j;
t=length_T;
t=t-1;
while(t>=0)
{
sym=Alphabet_T[t];
a=length_N;
????while(a>=1)
{
if(sym==Alphabet_N[a-1])
{
for(s=t;s ??Alphabet_T[s]=Alphabet_T[s+1];
Alphabet_T[length_T-1]=‘\0‘;
length_T--;
}
a--;
}
t--;
}
printf(“起始符號:%c\n“*Start_symbol);
printf(“非終結字符集%s\n“Alphabet_N);
printf(“終結字符集%s\n“Alphabet_T);
????printf(“重寫規則如下:\n“);
????while(p2!=NULL)
{
b=p2->left;
printf(“%c::=“b);
q2=p2->right;
while(q2!=NULL)
{
b=q2->right;
printf(“%c“b);
q2=q2->next;
}
????printf(“\n“);
p2=p2->next;
}
return?GFL_R;
}
void?main()
{
int?ijksthx;
bool?signal=false;
char?c1c2;
struct?rule?*p;
struct?right_record?*q;
struct?right_record?*q1;
struct?rule*GFL_R=processInput(
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????5743??2007-10-18?21:58??宋志理_第二章0708120691\CFG轉化為PDA\cfg_pda.cpp
?????文件???????1091??2007-10-19?17:03??宋志理_第二章0708120691\CFG轉化為PDA\cfg_pda.h
?????文件???????2372??2007-10-20?15:53??宋志理_第二章0708120691\已知CFG和串模擬推導過程\cfg_pda.h
?????文件??????10769??2007-10-20?16:25??宋志理_第二章0708120691\已知CFG和串模擬推導過程\simulate_cfg.cpp
?????文件???????2376??2007-10-20?14:49??宋志理_第二章0708120691\已知PDA和串模擬推導過程\CFG_PDA.h
?????文件???????7488??2007-10-20?15:44??宋志理_第二章0708120691\已知PDA和串模擬推導過程\simulate_derivation.cpp
?????目錄??????????0??2007-10-20?17:10??宋志理_第二章0708120691\CFG轉化為PDA
?????目錄??????????0??2007-10-20?17:10??宋志理_第二章0708120691\已知CFG和串模擬推導過程
?????目錄??????????0??2007-10-20?17:10??宋志理_第二章0708120691\已知PDA和串模擬推導過程
?????目錄??????????0??2007-10-20?17:10??宋志理_第二章0708120691
-----------?---------??----------?-----??----
????????????????29839????????????????????10
- 上一篇:U盤擴容修復器
- 下一篇:ELK全套視頻教程(共計141節)
評論
共有 條評論