首页 > 代码库 > 小型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编译器问题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。