课程设计报告
int k=0; S[k]='#'; cho2='y';
cout<<\分析过程如下:\
cout<<\//cout<<\ 栈\\t当前字符\\t优先关系\\t移进或规约\//cout<<\分析过程如下:\cout.width(10); cout<<\栈\cout.width(15); cout<<\当前字符\cout.width(20);
cout<<\剩余符号串\cout.width(15); cout<<\优先关系\cout.width(15);
cout<<\移进或规约\
char* p; p=string; p++;
for(i=0;string[i]!='\\0'&&cho2=='y';i++,p++) { a=string[i]; //读入当前字符 cho1='n'; //可否接受 while(cho1=='n') {
if(TerminalJud(S[k])==true) j=k; //规约使栈内有非终结符 else j=k-1; relation=RelationshipJud(S[j],a,opTable,opTable_len); if(relation==3) //S[j]>a {
//cout<<\ \ >\\t\\t\cout.setf(ios::left); cout.width(10); cout<
cout.unsetf(ios::left); cout.width(15); cout<
25
课程设计报告
cout.width(20); cout<
else if(relation==1) //S[j]
else if(relation==2) //S[j]=a
26
课程设计报告
{ cho1='y'; //cout<<\ \ =\\t\\t\ cout.setf(ios::left); cout.width(10); cout< cout<<\ 移进\ k=k+1; S[k]=a; } } else { cho1='y'; //cout<<\出错\ cout<
void main() { char choice='y'; while(choice=='y')
27
课程设计报告
{ system(\
char
sen[row][col]={'\\0'},first[row][col]={'\\0'},last[row][col]={'\\0'},opTable[row][col]={'\\0'}; char string[col]; int i,k,p,q; p=readfile(sen); if(PrioGramJud(sen,p)==true) { ItemInit(sen,first,last,p,q); //j记录FIRSTVT和LASTVT表的长度 FirstVt(sen,first,p,q); cout<<\各非终结符FIRSTVT集\ cout<<\ for(i=0;i
LastVt(sen,last,p,q);
cout<<\各非终结符LASTVT集\ cout<<\ for(i=0;i
if(OpPriotable(sen,first,last,opTable,p,q,k)==true) //k记录opTable表的长度 { cout<<\优先关系表:\ cout<<\ for(i=0;i 28 课程设计报告 } } cout<<\请输入要分析的串,以#结束:\cin>>string; InputAnalyse(opTable,string,k); //k是opTable表的长度 cout<<\是否继续? y/n\ cin>>choice; } } 29