-
大小: 5KB文件類型: .cpp金幣: 1下載: 1 次發(fā)布日期: 2021-10-21
- 語言: C/C++
- 標(biāo)簽:
資源簡介
已知文法G[S]:
S->AT
A->BU
T->+AT|$
U->*BU|$
B->(S)|m
其中,$表示空串。對該文法構(gòu)造預(yù)測分析表,并手工構(gòu)造預(yù)測分析程序,對輸入串m+m*m#進(jìn)行語法分析,并根據(jù)棧的變化狀態(tài)輸出分析過程。
代碼片段和文件信息
#include?
#include?
using?namespace?std;
char?msg[50];
class?mystack{
public:
char?element[100];
int?size;
void?clear()
{
size=0;
}
int?length()
{
return?size;
}
char?top()
{
if(size>0)
return?element[size-1];
}
void?pop()
{
if(size>0)
{
size--;
element[size]=‘\0‘;
}
}
void?push(char?st)
{
element[size++]=st;
element[size]=‘\0‘;
}
mystack()
{
size=0;
}
};
mystack?sc;
//
void?printstack()
{
printf(“%s\t“sc.element);
}
//
char?s[80];//輸入的字符串
int?l;//輸入字符串的長度
struct?any
{
????char?a1[10];
????char?a2[10];
????char?a3[10];
????char?a4[10];
????char?a5[10];
????char?a6[10];
};
struct?any?S={“E““E““TA““TA““E““E“};
struct?any?A={“E““E““UB““UB““E““E“};
struct?any?B={“E““E““m““)s(““E““E“};
struct?any?U={“““UB*““TA““TA““E“““};
struct?any?T={“TA+““E““E““E““E“““};
////////////////////////////////////////////////////////
bool?comp(int&?b)
{
????char?d;
????//int?i;
????d=sc.top();
if(d==‘+‘||d==‘*‘||d==‘m‘||d==‘(‘||d==‘)‘)
{
if(s[b]==d)
{
msg[0]=s[b];
strcpy(msg+1“匹配“);
b++;
sc.pop();
return?true;
}
else
{
printf(“ERROR!“);
????????????return?false;
}
}
//----------------------------------------------
????else?if(d==‘S‘)
????{
??????if(s[b]==‘m‘)
??????{???
????strcpy(msg“S->AT“);
????????????sc.pop();
????????????for(int?i=0;i ?????????????{
????????????????????sc.push(S.a3[i]);
?????????????}
//strcpy(msg“S->AT“);
return?true;
??????}
??????else?if(s[b]==‘(‘)
??????{
????strcpy(msg“S->AT“);
????????????sc.pop();
????????????for(int?i=0;i ????????????{
????????????????????sc.push(S.a4[i]);
?????????????}
//strcpy(msg“S->AT“);
return?true;
??????}?
??????else
??????{
????????????printf(“ERROR!“);
????????????return?false;
??????}
????}
//---------------------------------------------
????else?if(d==‘A‘)
????{
??????if(s[b]==‘m‘)
??????{
????strcpy(msg“A->BU“);?
????????????sc.pop();
????????????for(int?i=0;i ?????????????{
????????????????????sc.push(A.a3[i]);
?????????????}
//strcpy(msg“A->BU“);
return?true;
??????}
??????else?if(s[b]==‘(‘)
??????{
????strcpy(msg“A->BU“);????
????????????sc.pop();
????????????for(int?i=0;i ????????????{
sc.push(A.a4[i]);
????????????}
//strcpy(msg“A->BU“);
return?true;
??????}?
??????else
??????{
????????????printf(“ERROR!“);
????????????return?false;
??????}
????}
//-------------------------------------------
????
評論
共有 條評論