📄 wu.h
字号:
/*#include"word.h"
//#define program 3
//#include"grammar.h"
struct IdType
{
char name[10];
int Type,Kind,Addr; //Kind
};
struct Quad
{
int Op,Arg1,Arg2,Result;
};
struct Opc
{
char op1[10];
};
Opc opc[23]={" ","In","call","out","ret",":=I",":=R","par","vauleI","vauleR","addr","j","j<",
"j<=","j>","j>=","j=","j<>"," ","+I","+R","*I","*R"};
reserve * longsentence(reserve *temp);
reserve * Expression(reserve *temp); //17.<表达式>
reserve * sentence(reserve *temp); //10.<语句>
reserve * program(reserve *temp) // 1.<程序>
{
if(temp->num[1]=='3');
else
{
cout<<"error(1) The program must start with 'program' "<<endl;
return NULL;
}
temp=temp->next;
if(temp->num[1]=='1');
else
{
cout<<"error(2)";
return NULL;
}
temp=temp->next;
if(temp->num[1]=='3'&&temp->num[2]=='0') ;
else
{
cout<<"error(3):syntax error: missing ';'";
return NULL;
}
temp=temp->next;
return temp;
}
reserve * Factor(reserve *temp) //19.<因子>
{
if(strcmp(temp->bn,"(")==0)
{
temp=temp->next;
temp=Expression(temp);
//temp=temp->next;
if(strcmp(temp->bn,")")==0)
temp=temp->next;
else
{
cout<<"error(no')')";
return NULL;
}
}
else if((temp->num[1]=='1')||(temp->num[1]=='2'))
return temp->next;
return temp;
}
reserve * RelationExpression(reserve *temp) //21.<关系表达式>
{
// temp=
return temp;
}
reserve * BoolExpression(reserve *temp) //20.<布尔表达式>
{
temp=RelationExpression(temp);
return temp;
}
reserve * Item (reserve *temp) //18.<项>
{
temp=Factor(temp);
while((strcmp(temp->bn,"+")==0)||(strcmp(temp->bn,"*")==0))
{
temp=temp->next;
temp=Factor(temp);
}
return temp;
}
reserve * Expression(reserve *temp) //17.<表达式>
{
temp=Item(temp);
return temp;
}
reserve * RealParametrer(reserve *temp) //16.<实参表>
{
return temp;
}
reserve * ProcessSentence(reserve *temp) //15.<过程语句>
{
return temp;
}
reserve * CycleSentence(reserve *temp) //14.<循环语句>
{
if(strcmp(temp->bn,"while")==0)
{
{
temp=temp->next;
BoolExpression(temp);
}
if(strcmp(temp->bn,"do")==0)
{
temp=temp->next;
temp=sentence(temp);
}
else
{
cout<<"error(need do)";
return NULL;
}
}
return temp;
}
reserve * TermSentence(reserve *temp) //13.<条件语句>
{
return temp;
}
reserve * EvaluateSentence(reserve *temp) //12.<赋值语句>
{
if(temp!=NULL&&temp->num[1]=='1'&&temp->num[2]!='1')
{
temp=temp->next;
if(strcmp(temp->bn,":=")==0)
temp=temp->next;
else
{
cout<<"error(8) need:=";
return NULL;
}
temp=Expression(temp);
}
return temp;
}
reserve * ComplexSentence(reserve *temp) //11.<复合语句>
{
if(temp==NULL)
return NULL;
if(temp->num[1]=='6')
{
{
temp=temp->next;
temp=longsentence(temp);
if(temp->num[1]='7')
{
temp=temp->next;
return temp;
}
else
cout<<"error(7)";
}
}
else
return temp;
}
/*reserve * Evalute(reserve *temp)
{
if(temp->num=='1')
{
temp=temp->next;
if(strcmp(temp->bn,":=")==0)
temp=temp->next;
else
{
cout<<"error(need :=)";
return NULL;
}
temp=Expression(temp);
}
else
reserve * sentence(reserve *temp) //10.<语句>
{
reserve *temp1;
temp1=temp;
temp=EvaluateSentence(temp);
temp=ComplexSentence(temp);
temp=TermSentence(temp);
temp=CycleSentence(temp);
temp=ProcessSentence(temp);
//if(temp!=temp1)
return temp;
}
reserve * longsentence(reserve *temp) //9.<语句串>
{
reserve * temp1;
temp1=temp;
se: temp=sentence(temp);
if(temp1!=temp)
{
if(strcmp(temp->bn,";")==0)
{
temp=temp->next;
temp1=temp;
goto se;
}
else
{
cout<<"error(9) need';'";
return NULL;
}
}
return temp;
}
reserve * fparametrer(reserve *temp) //8.<形参>
{
return temp;
}
reserve * formalparameter(reserve *temp) //7.<形参部分>
{
if(strcmp(temp->bn,"(")==0)
temp=temp->next;
else
cout<<"error(7)";
return temp;
}
reserve *ProcessExplain(reserve *temp) // 6.<过程声明>
{
if(temp->num[1]=='5')
{
temp=temp->next;
if(temp->num[1]=='1')
{
temp=temp->next;
formalparameter(temp);
}
}
return temp;
}
reserve *SimpleExplain(reserve *temp) // 5.<简体说明>
{
if(temp->num[1]=='4')
{
temp=temp->next;
//SimpleExplain1(temp); //有问题
while(temp->num[1]=='1'&&!(strcmp(temp->next->bn,",")))
temp=temp->next->next;
if(temp->num[1]=='1') ;
else
{
cout<<"error(4)";
return NULL;
}
temp=temp->next;
if(strcmp(temp->bn,":")==0) ;
else
{
cout<<"error(5)";
return NULL;
}
temp=temp->next;
if(!strcmp(temp->bn,"integer")||!strcmp(temp->bn,"real"))
temp=temp->next;
else
{
cout<<"error(6)";
return NULL;
}
if(strcmp(temp->bn,";")==0)
temp=temp->next;
else
{
cout<<"error(;)";
return NULL;
}
}
return temp;
}
reserve * Explain(reserve *temp) // 4.<说明>
{
reserve *temp1;
temp1=temp;
temp=SimpleExplain(temp);
//if(temp==temp1)
// temp=ProcessExplain(temp);
// temp=temp->next;
return temp;
}
reserve * Explication(reserve *temp) // 3.<说明串>
{
temp=Explain(temp);
return temp;
}
reserve * Proceeding(reserve *temp) // 2.<程序体>
{
temp=Explication(temp);
// temp=temp->next;
if(temp->num[1]=='6')
{
temp=temp->next;
temp=longsentence(temp);
;
}
else
{
cout<<"error(short begin)";
return NULL;
}
if(temp!=NULL&&temp->num[1]=='7')
temp=temp->next;
else
{
cout<<"error(need end)";
return NULL;
}
if(temp!=NULL&&strcmp(temp->bn,".")==0)
return temp;
else
{
cout<<"the programm must end with '.'";
return NULL;
}
}
void program()
{
if((head=program(head))==NULL)
return;
if((head=Proceeding(head))==NULL)
return;
else cout<<"OK";
}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -