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

📄 claretype.c

📁 自己开发的c0文法编译器
💻 C
字号:
#include "world.h"

void const_declare();
void const_def();



void const_def() 
{
	char temps[BSIZE],tempval[BSIZE];
	if(seehead==ID)  //ID为标示符
	{
		strcpy(temps,buffer);  // 缓冲区,接收一个词
		tokenget(0);
		if(seehead==EQ)
		{
			tokenget(0);
		}
		else
		{
			/*
                if(Char[a].type==12)
				if(generate(1,Char[a].type-2,Char[a].uchar.baschar))
					return 1;

			sym=gsm();
			*/
			existerror("probably missing a '='when defining",lineno);
			if(seehead!=NUM)
				return ;
		}
		strcpy(tempval,buffer);  //临时value
		if(seehead==NUM)
		{
			tokenget(0);
		}
		else
		{
			existerror("const define existerror",lineno);
		tokenget(0);
		}
		if(lookforward(temps,funNum) == -1)  //之前是否有重定义
		{
			writetable(temps,CON,atoi(tempval),funNum);

			nodeadd(nodegenerate("ConstDefine",temps,tempval,""));
		//	while(1);

		}
		else
		{
			existerror("repeatly defined!",lineno);
		}
	}
	else
	{
		existerror("const define existerror!",lineno);
	}
}



void const_declare() 
{
	if(seehead == CONST)
	{
		
		tokenget(0);
		const_def();
		while(seehead==douhao)
		{
			tokenget(0);
			const_def();
		}
		/*if(j==ML)
				{
					printf("warning!字符串过长\n");
					bbsstring[--j]='\0';
					putc(ch1,FOUT);

					ch1=fgetc(FIN);
					while(ch1!='"')
					{
						putc(ch1,FOUT);
						j++;
						if(ch1==EOF||j>100)
						{
							erline[ernum]=linenumber;
							error[ernum++]=5;
							return -1;
						}
					}
*/
		if(seehead == fenghao)
		{
			tokenget(0);
		}
		else 
		{
			existerror("probably missing ';'",lineno);
	        tokenget(0); 	
		}

	}
	else
	{
		;
	}
}



void parameter() //参数表
{
	int i=0;
	char temp[BSIZE];
	while(seehead==INT)
	{
		tokenget(0);
		strcpy(temp,buffer);
		//i++;
		if(seehead==ID)
		{
			tokenget(0);
		}
		else
		{
			existerror("funcRegist parameter define existerror",lineno);
			tokenget(0);
		}
		strcpy(funTable[funNum].paraname[i++],temp);  //函数记录
		writetable(temp,INT,0,funNum);

		if(seehead==RK)
		{
			break ;
		}
		else
		{
			if(seehead==douhao)
			{
				tokenget(0);
			}
			else
			{
				existerror("funcRegist define existerror!",lineno);
			tokenget(0);
			}
		}
	}
	funTable[funNum].paranum = i;

	if(seehead==RK)
	{
		return ;
	}
	else
	{
		existerror("funcRegist parameter existerror!",lineno);
		while(seehead!=RK)
		{
			tokenget(0);
		}
	}


}


/*

int asss(int a)	
{
	sym=gsm();
	if(expn())
		return 1;
	if(typeofexp1!=Char[a].type)
	{
		erline[ernum]=linenumber;
		error[ernum++]=28;
		return 1;
	}

	if(generate(22,Char[a].lev,Char[a].adr))
		return 1;

	if(sym!=38)
	{
		erline[ernum]=linenumber;
		error[ernum++]=22;
		return 1;
	}
	sym=gsm();
	return 0;
}



*/


void val_declear()
{
	char temp[BSIZE];
	if(seehead==INT)
	{
		tokenget(0);
		strcpy(temp,buffer);
		if(seehead==ID)
		{
			tokenget(0);
		}
		else
		{
			existerror("varibale define existerror!",lineno);
			tokenget(0);
		}
		if(lookforward(temp,funNum)==-1)
		{
			writetable(temp,VAR,0,funNum);
	

			nodeadd(nodegenerate("VarDefine",temp,"",""));
		}
		else
		{
			existerror("variable define existerror",lineno);
		}
		while(seehead==douhao)
		{
			tokenget(0);
			strcpy(temp,buffer);
			if(seehead==ID)
			{
				tokenget(0);
			}
			else
			{
				existerror("varialbe declaration existerror",lineno);
				tokenget(0);
			}
			if(lookforward(temp,funNum)==-1)
			{
				writetable(temp,VAR,0,funNum);
			

				nodeadd(nodegenerate("VarDefine",temp,"",""));

			}
			else
			{
				existerror("variably define repeatly ",lineno);
			tokenget(0);
			}
			//printf("变量 %s\n",temp);
		}
	
		if(seehead==fenghao)
		{
			tokenget(0);
		}
		else
		{
			existerror("probably missing a ';'",lineno);
		}
	}
	else
		;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -