⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wu.h

📁 小型对delphi编译器包括语法语义及词法
💻 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 + -