首页 > 代码库 > 小型Basic编译器问题

小型Basic编译器问题

# include <stdio.h># include <string.h># include <ctype.h># include <stdlib.h># include <map>//使用map解决一对一 的关系using namespace std;map<char,long> mapdata;//数据存储typedef struct node{	long num;	char ch1[20];	char ch2[20];}LINK;LINK arry[101];//存储已定义的变量struct data{	char st[100];	int top;}p;int main(){	long a,i=0,length,temp;	char str1[20],str2[20];	char ch;	long k,t;	char temp1[20];	//数据输入	while(scanf("%ld",&a) != EOF)	{				arry[i].num=a;		scanf("%s",&str1);		strcpy(arry[i].ch1,str1);		if(strcmp(str1,"STOP") != 0)		{			scanf("%s",&str2);			strcpy(arry[i].ch2,str2);		}		i++;	}	//inital	length=i;	p.top=0;	//对每一条语句顺序执行	for(i=0;i<=length;)	{		temp=0; //标记变量有没有定义		//LET语句		if(strcmp(arry[i].ch1,"LET") == 0)		{			ch=arry[i].ch2[0]; //取得变量			for(k=0;k<p.top;k++)			{				if(p.st[k]==ch)				{					temp=1; //变量已定义					if(isdigit(arry[i].ch2[2]) || arry[i].ch2[2]==‘-‘)//如果第单个是数字,则说明是常量。					{						for(t=0;t<strlen(arry[i].ch2)-2;t++)							temp1[t]=arry[i].ch2[t+2];						temp1[t]=‘\0‘;										mapdata[arry[i].ch2[0]]=atoi(temp1);					}					else					{						if(arry[i].ch2[3] == ‘+‘)						{							mapdata[arry[i].ch2[0]]=mapdata[arry[i].ch2[2]]+mapdata[arry[i].ch2[4]];						}						if(arry[i].ch2[3] == ‘>‘)						{							if(mapdata[arry[i].ch2[2]] > mapdata[arry[i].ch2[4]])								mapdata[arry[i].ch2[0]]=1;							else								mapdata[arry[i].ch2[0]]=0;						}						break;					}				}					}						if(temp == 0) //变量未定义			{				if(isdigit(arry[i].ch2[2]) || arry[i].ch2[2]==‘-‘)//如果第单个是数字,则说明是常量。				{					p.st[p.top++]=arry[i].ch2[0];					for(t=0;t<strlen(arry[i].ch2)-2;t++)						temp1[t]=arry[i].ch2[t+2];					temp1[t]=‘\0‘;					mapdata[arry[i].ch2[0]]=atoi(temp1);														}				else				{					p.st[p.top++]=arry[i].ch2[0];					if(arry[i].ch2[3] == ‘+‘)					{						mapdata[arry[i].ch2[0]]=mapdata[arry[i].ch2[2]]+mapdata[arry[i].ch2[4]];					}					else if(arry[i].ch2[3] == ‘>‘)					{						if(mapdata[arry[i].ch2[2]] > mapdata[arry[i].ch2[4]])							mapdata[arry[i].ch2[0]]=1;						else							mapdata[arry[i].ch2[0]]=0;					}									}			}			i++;		}		//PRINT语句		if(strcmp(arry[i].ch1,"PRINT") == 0)		{			printf("%c=%d\n",arry[i].ch2[0],mapdata[arry[i].ch2[0]]);			i++;		}		//IF语句		if(strcmp(arry[i].ch1,"IF") == 0)		{			if(mapdata[arry[i].ch2[0]] <= mapdata[arry[i].ch2[2]])				i++;			i++;		}				//GOTO语句		if(strcmp(arry[i].ch1,"GOTO") == 0)		{			int b;			b=atol(arry[i].ch2);			i=b-1;		}				//STOP语句		if(strcmp(arry[i].ch1,"STOP") == 0)			break;	}		/*	//测试是否输入成功	for(i=0;i<=length;i++)	{		printf("%d %s %s\n",arry[i].num,arry[i].ch1,arry[i].ch2);	}	*/	return 0;}

 

小型Basic编译器问题