?? hao2.h
字號:
#ifndef HAO2
#define HAO2
#include"hao1.h"
#include"scaner.h"
void scaner();
int yuGuKuai();
int yu();
void lrparser();
int isIf();
int isWhile();
int isTiao();
int statement();
int yucu();
char *exception();
char *factor();
char *term();
int isGxi();
void emit(char *op,char *argv1,char *argv2,char *result)
{
strcpy(pQuad[nNXQ].op ,op);
strcpy(pQuad[nNXQ].argv1,argv1);
strcpy(pQuad[nNXQ].argv2,argv2);
strcpy(pQuad[nNXQ].result,result);
nNXQ++;
return;
}
void PrintQuaternion()
{
int nLoop;
for(nLoop=1;nLoop<nNXQ;nLoop++)
{
fout4<<nLoop<<". ("<<pQuad[nLoop].op<<","<<pQuad[nLoop].argv1 <<","
<<pQuad[nLoop].argv2<<","<<pQuad[nLoop].result<<")"<<endl;
}
}
char*Newtemp()
{
char *p;
char m[MAXLENGTH];
p=(char*)malloc(MAXLENGTH);
k++;
itoa(k,m,10);
strcpy(p+1,m);
p[0]='T';
return(p);
}
void lrparser() //<程序>→main()<語句塊>
{
// int schain=0;
if(syn==1) ////////// main
{
scaner();
if(syn==26)/////(
{
scaner();
if(syn==27)/////)
{
scaner();
yuGuKuai();
if(syn==-1&&kk==0)//////////// #
cout<<"success"<<endl;
else
cout<<"file!"<<endl;
}
else cout<<"第"<<row<<"行缺少')' "<<"缺)錯誤"<<endl,kk=1;
}
else cout<<"第"<<row<<"行缺少'(' "<<"缺(錯誤"<<endl,kk=1;
}
else
{
cout<<"main"<<endl;
cout<<"第"<<row<<"行缺少main()函數"<<endl;kk=1;
}
return;
}
int yuGuKuai() //<語句塊>→'{'<語句塊>'}'
{
int schain=0;
if(syn==30)//////{
{
scaner();
if(syn==2||syn==3)/////////int or char
{
scaner();//////////syn=10
schain=yucu();
if(syn==31)//////////// }
{
scaner();
}
else {if(kk!=1) cout<<syn<<"缺}錯誤"<<endl;kk=1;}
}
else
{
schain=yucu();
if(syn==31)
{
scaner();
}
else {if(kk!=1) cout<<syn<<"缺}錯誤"<<endl;kk=1;}
}
}
else{ cout<<syn<<"{錯誤"<<endl; kk=1;}
return schain;
}
int yucu() //<語句串>→<語句>{;<語句>};
{
int schain=0;
schain=yu();
while(syn==34)///////////;
{
scaner();
schain=yu();
}
return schain;
}
int yu() //<語句>→<賦值語句>|<條件語句>|<循環語句>
{
int schain=0;
if(syn==4) schain=isIf(); ///////// if
if(syn==7) schain=isWhile();////////////while
if(syn==10) schain=statement();////////////// yufshfhdf
return schain;
}
int isIf() //<條件語句>→if<條件><語句塊>
{
char tt[MAXLENGTH],eplace[MAXLENGTH];
int schain=0;
if(syn==4) /////////if()
{
scaner();
schain=isTiao();
schain=yuGuKuai();
}
else cout<<"if錯誤"<<endl,kk=1;
return schain;
}
int isWhile() //<循環語句>→while<條件><語句塊>
{
char tt[MAXLENGTH],eplace[MAXLENGTH];
int schain=0;
if(syn==7) /////////////while
{
scaner();
schain=isTiao();
schain=yuGuKuai();
}
else cout<<"第"<<row<<"while錯誤"<<endl,kk=1;
return schain;
}
int isTiao() //<條件>→<表達式><關系符><表達式>)
{
int schain=0;
char *eplace1,*eplace2,*tt,*tp;
tp=(char*)malloc(MAXLENGTH);
eplace1=(char*)malloc(MAXLENGTH);
eplace2=(char*)malloc(MAXLENGTH);
tt=(char*)malloc(MAXLENGTH);
if(syn==26) //////////// (
{
scaner();
eplace1=exception();
strcpy(tt,token);
schain=isGxi();
eplace2=exception();
emit(tt,eplace1,eplace2," ");
if(syn==27) ////////// )
{ scaner();}
else cout<<"第"<<row<<")錯誤"<<endl,kk=1;
}
else cout<<"第"<<row<<"(錯誤"<<endl,kk=1;
return schain;
}
int statement() //<賦值語句>→ ID =<表達式>
{
char tt[MAXLENGTH],eplace[MAXLENGTH];
int schain=0;
if(syn==10) //////////// sdf2
{
strcpy(tt,token);
scaner();
if(syn==21) //////////=
{
scaner();
strcpy(eplace,exception());
emit("=",eplace," ",tt);
schain=0;
}
else{cout<<"第"<<row<<"賦值錯誤"<<endl;kk=1;}
}
else{cout<<"第"<<row<<"賦值語句錯誤"<<endl;kk=1;}////////////////
return schain;
}
char *exception() //<表達式>→<項>{+<項>|-<項>}
{
char *tp,*ep2,*eplace,*tt;
tp=(char*)malloc(MAXLENGTH);
ep2=(char*)malloc(MAXLENGTH);
eplace=(char*)malloc(MAXLENGTH);
tt=(char*)malloc(MAXLENGTH);
strcpy(eplace,term());
while(syn==22||syn==23)////////////+ or -
{
if(syn==22) strcpy(tt,"+");
else strcpy(tt,"-");
scaner();
strcpy(ep2,term());
strcpy(tp,Newtemp());
emit(tt,eplace,ep2,tp);
strcpy(eplace,tp);
}
return eplace;
}
char *term() //<項>→<因子>{*<因子>|/<因子>}
{
char *tp,*ep2,*eplace,*tt;
tp=(char*)malloc(MAXLENGTH);
ep2=(char*)malloc(MAXLENGTH);
eplace=(char*)malloc(MAXLENGTH);
tt=(char*)malloc(MAXLENGTH);
strcpy(eplace,factor());
while(syn==24||syn==25)///////////* or /
{
if(syn==24) strcpy(tt,"*");
else strcpy(tt,"/");
scaner();
strcpy(ep2,factor());
strcpy(tp,Newtemp());
emit(tt,eplace,ep2,tp);
strcpy(eplace,tp);
}
return eplace;
}
char *factor() //<因子>→ ID | NUM |(<表達式>)
{
char *fplace;
fplace=(char*)malloc(MAXLENGTH);
strcpy(fplace," ");
if(syn==10||syn==20) ////////ID or NUM
{ if(syn==10)
{strcpy(fplace,token);}
else
{
itoa(atoi(token),fplace,10);
}
scaner();
}
else if(syn==26) ///////(
{
scaner();
fplace=exception();
if(syn==27) ////////// )
{ scaner();}
else cout<<"第"<<row<<")錯誤"<<endl,kk=1;
}
else {cout<<"第"<<row<<"(錯誤"<<endl;kk=1;}///////////////////////
return fplace;
}
int isGxi() //關系符>→<|<=|>|>=|=|!=
{
int schain=0;
if(syn==38||syn==36||syn==35||syn==37||syn==39||40)
{ scaner();
}
else {cout<<"第"<<row<<"關系運算符錯誤"<<endl;kk=1;}
return schain;
}
#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -