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

📄 stdio.lib

📁 一个小型脚本语言解释器源代码,来自老外内附英文说明和演示脚本例子
💻 LIB
字号:
/////////////////////////////////////////////
// FUNCTION TO SCAN VALUES FROM CONSOLE
void inputto()
{
	char name_var[31];
	int ai,aj,value;
	read_buffer(name_var);
	value = return_position(name_var,&ai,&aj);
	if(value != -1)
	{
		if(ai==INTEGER)
			scanf("%d",&_intvar[aj]);
		else if(ai==CHARACTER)
		{
			fflush(stdin);
			scanf("%c",&_charvar[aj]);
		}
		else if(ai==STRING)
		{
			fflush(stdin);
			scanf("%s",_stringvar[aj]);
		}
	}
	else
		exit(ERROR);
}
////////////////////////////////////
// FUNCTON FOR VARIABLE DECLARATION
void var()
{

			int i;
			char c,name_var[VARLENGTH],type_var[100];
			read_buffer(name_var); // HOLDS VARIABLE NAME
			if(strlen(name_var) > VARLENGTH)
			exit(ERROR);
			read_buffer(type_var);  // VARIABLE TYPE
				if(strcmp(type_var,"#")==0) // STRING TYPE
				{
					if(string_var > MAXVAR)
					exit(ERROR);
					strcpy(holder[STRING][string_var],name_var);
					string_var++;
				}
				else if(strcmp(type_var,"%")==0)
				{
					if(int_var > MAXVAR)
					exit(ERROR);
					strcpy(holder[INTEGER][int_var],name_var);
					int_var++;
				}
				else if(strcmp(type_var,"$")==0)
				{
					if(char_var > MAXVAR)
					exit(ERROR);
					strcpy(holder[CHARACTER][char_var],name_var);
					char_var++;
				}
				else
					exit(ERROR);
}
//////////////////////////////////////////
// FUNCTION TO SENT OUTPUT TO CONSOLE
void print_com()
{

			char read[100];
			while(1)
			{
				read_buffer(read);
				if(strcmp(read,"<<")==0)
				break;
				if(strcmp(read,"$N")==0)
				printf("\n");
				else if(strcmp(read,"$T")==0)
				printf("\t");
				else if(strcmp(read,"$A")==0)
				printf("\a");
				else if(strcmp(read,"$R")==0)
				printf("\r");
				else if(strcmp(read,"$S")==0)
				printf(" ");
				else if(strcmp(read,"$B")==0)
				printf("\b");
				else if(strcmp(read,"^CHR")==0)
				{
					read_buffer(read);
					if(atoi(read) > 0)
					printf("%c",atoi(read));
					else
					exit(ERROR);
				}
				else
				printf(" %s",read);

			}
}
/////////////////////////////////////////////////
// FUNCTION FOR ASSIGNMENT OF VARIABLES
void setvar()
{
	char read[31],read2[5],read3[31];
	int ai,aj,bi,bj,value;
	read_buffer(read);   // FIRST VARIABLE
	read_buffer(read2);  // OPERATOR
	if(strcmp(read2,"=")!=0 && strcmp(read2,"+=")!=0 && strcmp(read2,"-=")!=0 && strcmp(read2,"*=")!=0 && strcmp(read2,"/=")!=0 && strcmp(read2,"%=")!=0)
	{
		printf("\nUnresolved assignment sysmbol %s in object module",read2);
		printf("\n                              ^");
		exit(ERROR);
	}
	read_buffer(read3);   // SECOND VARIABLE
	// GET POSITION OF FIRST VARIABLE
	 value = return_position(read,&ai,&aj);
	 if(value == -1)
	 {
		printf("\nUndefined Symbol %s in object module",read);
		printf("\n                 ^");
		exit(0);
	 }
	 // GET POSITION OF SECOND VARIABLE
	 value = return_position(read3,&bi,&bj);
	 if(value==-1)
	 {
			if(ai==INTEGER) // INTEGER
			{
				if(strcmp(read2,"=")==0)
				_intvar[aj]=atoi(read3);
				else if(strcmp(read2,"+=")==0)
				_intvar[aj]=_intvar[aj]+atoi(read3);
				else if(strcmp(read2,"-=")==0)
				_intvar[aj]=_intvar[aj]-atoi(read3);
				else if(strcmp(read2,"*=")==0)
				_intvar[aj]=_intvar[aj]*atoi(read3);
				else if(strcmp(read2,"/=")==0)
				_intvar[aj]=_intvar[aj]/atoi(read3);
				else if(strcmp(read2,"%=")==0)
				_intvar[aj]=_intvar[aj]%atoi(read3);
			}
			else if(ai==CHARACTER) /* character */
			{
				if(strcmp(read2,"=")==0)
				_charvar[aj]=atoi(read3);
				else if(strcmp(read2,"+=")==0)
				_charvar[aj]=_charvar[aj]+atoi(read3);
				else if(strcmp(read2,"-=")==0)
				_charvar[aj]=_charvar[aj]-atoi(read3);
				else if(strcmp(read2,"*=")==0)
				_charvar[aj]=_charvar[aj]*atoi(read3);
				else if(strcmp(read2,"/=")==0)
				_charvar[aj]=_charvar[aj]/atoi(read3);
				else if(strcmp(read2,"%=")==0)
				_charvar[aj]=_charvar[aj]%atoi(read3);
			}
			else if(ai==STRING)
			{
				if(strcmp(read2,"=")==0)
				strcpy(_stringvar[aj],read3);
				else if(strcmp(read2,"+=")==0)
				strcat(_stringvar[aj],read3);
				else
				{
					printf("\nUnresolved Symbol %s in object module",read3);
					printf("\n                  ^");
					exit(ERROR);
				}
			}

	 }
	  else
	 {
		if(ai==INTEGER) /* integer */
		{
		if(bi==INTEGER) /* integer */
		{
			if(strcmp(read2,"=")==0)
			_intvar[aj]=_intvar[bj];
			else if(strcmp(read2,"+=")==0)
			_intvar[aj]=_intvar[aj]+_intvar[bj];
			else if(strcmp(read2,"-=")==0)
			_intvar[aj]=_intvar[aj]-_intvar[bj];
			else if(strcmp(read2,"*=")==0)
			_intvar[aj]=_intvar[aj]*_intvar[bj];
			else if(strcmp(read2,"/=")==0)
			_intvar[aj]=_intvar[aj]/_intvar[bj];
			else if(strcmp(read2,"%=")==0)
			_intvar[aj]=_intvar[aj]%_intvar[bj];
			}
			else if(bi==CHARACTER) /* character */
			{
			if(strcmp(read2,"=")==0)
			_intvar[aj]=_charvar[bj];
			else if(strcmp(read2,"+=")==0)
			_intvar[aj]=_intvar[aj]+_charvar[bj];
			else if(strcmp(read2,"-=")==0)
			_intvar[aj]=_intvar[aj]-_charvar[bj];
			else if(strcmp(read2,"*=")==0)
			_intvar[aj]=_intvar[aj]*_charvar[bj];
			else if(strcmp(read2,"/=")==0)
			_intvar[aj]=_intvar[aj]/_charvar[bj];
			else if(strcmp(read2,"%=")==0)
			_intvar[aj]=_intvar[aj]%_charvar[bj];
			}
			else if(bi==STRING) /* String */
			{
				printf("\nIllegal Assignment");
				exit(ERROR);
			}
		}
		else if(ai==CHARACTER)   /* character */
		{
		if(bi==INTEGER) /* integer */
		{
			if(strcmp(read2,"=")==0)
			_charvar[aj]=_intvar[bj];
			else if(strcmp(read2,"+=")==0)
			_charvar[aj]=_charvar[aj]+_intvar[bj];
			else if(strcmp(read2,"-=")==0)
			_charvar[aj]=_charvar[aj]-_intvar[bj];
			else if(strcmp(read2,"*=")==0)
			_charvar[aj]=_charvar[aj]*_intvar[bj];
			else if(strcmp(read2,"/=")==0)
			_charvar[aj]=_charvar[aj]/_intvar[bj];
			else if(strcmp(read2,"%=")==0)
			_charvar[aj]=_charvar[aj]%_intvar[bj];
		}
		else if(bi==CHARACTER) /* character */
		{
			if(strcmp(read2,"=")==0)
			_charvar[aj]=_charvar[bj];
			else if(strcmp(read2,"+=")==0)
			_charvar[aj]=_charvar[aj]+_charvar[bj];
			else if(strcmp(read2,"-=")==0)
			_charvar[aj]=_charvar[aj]-_charvar[bj];
			else if(strcmp(read2,"*=")==0)
			_charvar[aj]=_charvar[aj]*_charvar[bj];
			else if(strcmp(read2,"/=")==0)
			_charvar[aj]=_charvar[aj]/_charvar[bj];
			else if(strcmp(read2,"%=")==0)
			_charvar[aj]=_charvar[aj]%_charvar[bj];
		}
		else if(bi==STRING) /* String */
		{
			printf("\nIllegal Assignment");
			exit(ERROR);
		}
		}
		else if(ai==STRING)   /* String */
		{
		if(bi==INTEGER) /* integer */
		{
			printf("\nIllegal Assignment");
			exit(ERROR);
		}
		else if(bi==CHARACTER) /* character */
		{
			printf("\nIllegal Assignment");
			exit(ERROR);
		}
		else if(bi==STRING) /* String */
		{
			if(strcmp(read2,"=")==0)
			strcpy(_stringvar[aj],_stringvar[bj]);
			else if(strcmp(read2,"+=")==0)
			strcat(_stringvar[aj],_stringvar[bj]);
			else
			{
				printf("\nIllegal Assignment");
				exit(ERROR);
			}
		}
		}
	}
}
/////////////////////////////////////////////
// FUNCTION TO PRINT VALUES OF VARIABLES
void printvar()
{
	char varname[31];
	int ai,aj,value;
	read_buffer(varname);   // VARIABLE NAME
	// GET POSITION OF VARIABLE
	 value = return_position(varname,&ai,&aj);
	 if(value == -1)
		exit(ERROR);
	 if(ai==INTEGER)      // INTEGER
	 printf("%d",_intvar[aj]);
	 else if(ai==CHARACTER) // CHARACTER
	 printf("%c",_charvar[aj]);
	 else if(ai==STRING) // STRING
	 printf("%s",_stringvar[aj]);
}


⌨️ 快捷键说明

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