📄 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 + -