1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169 |
# 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; } |
原文地址:http://www.cnblogs.com/liun1994/p/3775944.html