📄 1.cpp
字号:
#include<stdio.h>
struct in
{
int kind;
int opnum;
int line;
};
in input[100];
int line=0;
int getcode(FILE *fp);
int main()
{
FILE *fp1,*fp2;//源程序
int pc=0;
int stack[100];
int sc=0;//stackcount
int varcn=0;
if((fp1=fopen("target code.txt","r"))==NULL)
{
printf("不能打开源文件\n");
return 0;
}//if
if((fp2=fopen("result.txt","w"))==NULL)
{
printf("不能打开源文件\n");
return 0;
}//if
while(getcode(fp1)==3);
for(pc=0;pc<line;pc++)
{
//printf("%d %d %d \n",input[pc].kind,input[pc].opnum,input[pc].line);
switch(input[pc].kind)
{
case 1://LIT
sc++;
stack[sc]=input[pc].opnum;
break;
case 2://LOD
sc++;
stack[sc]=stack[input[pc].opnum];
break;
case 3://STO
stack[input[pc].opnum]=stack[sc];
sc--;
break;
case 4://CAL
break;
case 5://INT
sc+=input[pc].opnum;
varcn=input[pc].opnum;
break;
case 6://JMP
pc=input[pc].opnum-1;
break;
case 7://JPC 假转
if(stack[sc]==0)
pc=input[pc].opnum-1;
sc--;
break;
case 8://OPR
switch(input[pc].opnum)
{
case 0:
break;
case 1:
break;
case 2://相加
sc--;
stack[sc]=stack[sc]+stack[sc+1];
break;
case 3://相减
sc--;
stack[sc]=stack[sc]-stack[sc+1];
break;
case 4://乘
sc--;
stack[sc]=stack[sc]*stack[sc+1];
break;
case 5://除
sc--;
stack[sc]=stack[sc]/stack[sc+1];
break;
case 6:
break;
case 7:
break;
case 8://判相等
sc--;
if(stack[sc]==stack[sc+1])stack[sc]=1;
else stack[sc]=0;
break;
case 9://判不相等
sc--;
if(stack[sc]!=stack[sc+1])stack[sc]=1;
else stack[sc]=0;
break;
case 10://小于
sc--;
if(stack[sc]<stack[sc+1])stack[sc]=1;
else stack[sc]=0;
break;
case 11://大于等于
sc--;
if(stack[sc]>=stack[sc+1])stack[sc]=1;
else stack[sc]=0;
break;
case 12://大于
sc--;
if(stack[sc]>stack[sc+1])stack[sc]=1;
else stack[sc]=0;
break;
case 13://小于等于
sc--;
if(stack[sc]<=stack[sc+1])stack[sc]=1;
else stack[sc]=0;
break;
}//switch
break;
case 10://HLT
printf("停机 \n");
return 0;
case 9://WRI
fprintf(fp2,"%d \n",stack[sc]);
printf("%d \n",stack[sc]);
break;
}
}
return 0;
}
int getcode(FILE *fp)
{
int m=-1;
m=fscanf(fp,"%d %d %d ",&input[line].kind,&input[line].opnum,&input[line++].line);
return m;
}
//杨高南路 2140号 建业新村 45楼 202
//运行栈的stack[3]没有使用 开始有三个变量, 开始LIT 中++ 所以一直是从第四个开始使用
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -