📄 200218033i
字号:
1 // 程序当前目录里自己建立一个文本文档,取名为infile.txt,所有需要分析的程
序都写在此文本文档里,注意,程序的结尾必须以"@"标志符结束。程序结果输出
在同目录,文件名为outfile.txt,此文件为自动生成。
2 #include <stdio.h>
3 #include <string.h>
4 //#include <process.h>
5 #define MAX 50
6 int main()
7 {
8 FILE *in,*out;/*存放输入字符串和输出单词串的文件*/
9 char arr[MAX];/*arr数组存放单词符号*/
10 char currentchar;/*currentchar存放当前输入字符*/
11 int i=0;/*arr数组的一个指针*/
12 /*以读方式打开输入文件*/
13 if((in=fopen("infile.txt","r"))==NULL)
14 {
15 printf("can not open file\n");
16 exit(0);
17 }
18 /*以写方式打开输出文件*/
19 if((out=fopen("outfile.txt","w"))==NULL)
20 {
21 printf("cannout open outfile\n"); 22 exit(1);
23 }
24 //去掉开头空格
25 currentchar=fgetc(in);
26 while(currentchar==' ')
27 {
28 currentchar=fgetc(in);
29 }
30 int ch;
31 while(currentchar!='@')
32 {
33 /*常数部分判断*/
34 if((currentchar>='a'&¤tchar<='z')||(currentchar>='A'&¤tchar<
='Z')||(currentchar>='0'&¤tchar<='9')||currentchar=='('||currentch
ar==')'||currentchar=='{'||currentchar=='}'||currentchar=='>'||currentch
ar=='<'||currentchar==';'||currentchar==':'||currentchar=='+'||currentch
ar=='-'||currentchar=='*'||currentchar=='/'||currentchar=='='||currentch
ar=='!'||currentchar=='&'||(ch=currentchar)=='\n'||currentchar==' '||cur
rentchar=='['||currentchar==']')
35 {
36 i=0;//清空arr字符数组
37 if(currentchar>='0'&¤tchar<='9')
38 {
39 arr[i++]=currentchar;
40 currentchar=fgetc(in);//再读入下一个字符
41 while(currentchar>='0'&¤tchar<='9')
42 {
43 arr[i++]=currentchar;
44 currentchar=fgetc(in);
45 }
46 if(currentchar!='.')//如果当前读入的符号不为小数点,则常数读完毕,输出此
常数
47 {
48 arr[i++]='\0';
49 fprintf(out,"%s%d,%c%s%c%s\n","(",15,'"',arr,'"',")");//格式化输出到目标
文件,15代表种别码, arr为内码值,规定用数字本身代表
50 }
51 else//当前字符为小数点则继续向下读入
52 {
53 arr[i++]=currentchar;
54 currentchar=fgetc(in);
55 while(currentchar>='0'&¤tchar<='9')
56 {
57 arr[i++]=currentchar;
58 currentchar=fgetc(in);
59 } 60 arr[i++]='\0';
61 fprintf(out,"%s%d,%c%s%c%s\n","(",15,'"',arr,'"',")");
62 }
63 while(currentchar==' ')
64 {
65 currentchar=fgetc(in);
66 }
67 }
68 /*判断标识符和关键字部分*/
69 if((currentchar>='a'&¤tchar<='z')||(currentchar>='A'&¤tchar<
='Z'))
70 {
71 i=0;//清空arr字符数组
72 while((currentchar>='a'&¤tchar<='z')||(currentchar>='0'&¤tch
ar<='9')||(currentchar>='A'&¤tchar<='Z'))
73 {
74 arr[i++]=currentchar;
75 currentchar=fgetc(in);
76 }
77 //把字符数组arr和关键字表比较,判断单词串是关键字还是标识符
78 arr[i++]='\0';
79 if(strcmp(arr,"if")==0)
80 fprintf(out,"%s%d,%c%s%c%s\n","(",0,'"',arr,'"',")");
81 else if(strcmp(arr,"else")==0)
82 fprintf(out,"%s%d,%c%s%c%s\n","(",1,'"',arr,'"',")");
83 else if(strcmp(arr,"while")==0)
84 fprintf(out,"%s%d,%c%s%c%s\n","(",2,'"',arr,'"',")");
85 else if(strcmp(arr,"do")==0)
86 fprintf(out,"%s%d,%c%s%c%s\n","(",3,'"',arr,'"',")");
87 else
88 fprintf(out,"%s%d,%c%s%c%s\n","(",14,'"',arr,'"',")");
89 }
90 while(currentchar==' ')
91 {
92 currentchar=fgetc(in);
93 }
94 //判断标识符包括:+, -, *, /, (, ), {, }, <, >, ;, :, !=, >=, <=, ==, =.
95 if(currentchar=='+')
96 {
97 fprintf(out,"%s%d,%c%c%c%s\n","(",9,'"',currentchar,'"',")");
98 currentchar=fgetc(in);
99 }
100 while(currentchar==' ')
101 {
102 currentchar=fgetc(in);
103 }
104 if(currentchar=='-')
105 {
106 fprintf(out,"%s%d,%c%c%c%s\n","(",10,'"',currentchar,'"',")");
107 currentchar=fgetc(in);
108 }
109 while(currentchar==' ')
110 {
111 currentchar=fgetc(in);
112 }
113 if(currentchar=='*')
114 {
115 fprintf(out,"%s%d,%c%c%c%s\n","(",11,'"',currentchar,'"',")");
116 currentchar=fgetc(in);
117 }
118 while(currentchar==' ')
119 {
120 currentchar=fgetc(in);
121 }
122 if(currentchar=='/')
123 {
124 fprintf(out,"%s%d,%c%c%c%s\n","(",12,'"',currentchar,'"',")");
125 currentchar=fgetc(in);
126 }
127 while(currentchar==' ')
128 {
129 currentchar=fgetc(in);
130 }
131 if(currentchar=='=')
132 {
133 i=0;
134 arr[i++]=currentchar;
135 currentchar=fgetc(in);
136 if(currentchar=='=')
137 {
138 arr[i++]=currentchar;
139 arr[i++]='\0';
140 fprintf(out,"%s%d,%c%s%c%s\n","(",13,'"',arr,'"',")");
141 currentchar=fgetc(in);
142 }
143 else
144 { arr[i++]='\0';
145 fprintf(out,"%s%d,%c%s%c%s\n","(",17,'"',arr,'"',")");
146 }
147 }
148 while(currentchar==' ')
149 {
150 currentchar=fgetc(in);
151 }
152 if(currentchar==';')
153 {
154 fprintf(out,"%s%d,%c%c%c%s\n","(",4,'"',currentchar,'"',")");
155 currentchar=fgetc(in);
156 }
157 while(currentchar==' ')
158 {
159 currentchar=fgetc(in);
160 }
161 if(currentchar=='{')
162 {
163 fprintf(out,"%s%d,%c%c%c%s\n","(",5,'"',currentchar,'"',")");
164 currentchar=fgetc(in);
165 }
166 while(currentchar==' ')
167 {
168 currentchar=fgetc(in);
169 }
170 while(currentchar=='}')
171 {
172 fprintf(out,"%s%d,%c%c%c%s\n","(",6,'"',currentchar,'"',")"); 173 currentchar=fgetc(in);
174 }
175 while(currentchar==' ')
176 {
177 currentchar=fgetc(in);
178 }
179 if(currentchar=='[')
180 {
181 fprintf(out,"%s%d,%c%c%c%s\n","(",20,'"',currentchar,'"',")");
182 currentchar=fgetc(in);
183 }
184 while(currentchar==' ')
185 {
186 currentchar=fgetc(in);
187 }
188 if(currentchar==']')
189 {
190 fprintf(out,"%s%d,%c%c%c%s\n","(",21,'"',currentchar,'"',")");
191 currentchar=fgetc(in);
192 }
193 while(currentchar==' ')
194 {
195 currentchar=fgetc(in);
196 }
197 if(currentchar=='(')
198 {
199 fprintf(out,"%s%d,%c%c%c%s\n","(",7,'"',currentchar,'"',")");
200 currentchar=fgetc(in);
201 }
202 while(currentchar==' ')
203 {
204 currentchar=fgetc(in);
205 }
206 if(currentchar==')')
207 {
208 fprintf(out,"%s%d,%c%c%c%s\n","(",8,'"',currentchar,'"',")");
209 currentchar=fgetc(in);
210 }
211 while(currentchar==' ')
212 {
213 currentchar=fgetc(in);
214 }
215 if(currentchar==':')
216 {
217 i=0;
218 arr[i++]=currentchar;
219 currentchar=fgetc(in);
220 if(currentchar==':')
221 {
222 arr[i++]=currentchar;
223 arr[i++]='\0';
224 fprintf(out,"%s%d,%c%s%c%s\n","(",18,'"',arr,'"',")");
225 currentchar=fgetc(in);
226 }
227 else
228 { arr[i++]='\0';
229 fprintf(out,"%s%d,%c%s%c%s\n","(",16,'"',arr,'"',")");
230 }
231 }
232 while(currentchar==' ')
233 {
234 currentchar=fgetc(in);
235 }
236 if(currentchar=='>')
237 {
238 i=0;
239 arr[i++]=currentchar;
240 currentchar=fgetc(in);
241 if(currentchar=='=')
242 {
243 arr[i++]=currentchar;
244 arr[i++]='\0';
245 fprintf(out,"%s%d,%c%s%c%s\n","(",13,'"',arr,'"',")");
246 currentchar=fgetc(in);
247 }
248 else
249 { arr[i++]='\0';
250 fprintf(out,"%s%d,%c%s%c%s\n","(",13,'"',arr,'"',")");
251 }
252 }
253 while(currentchar==' ')
254 {
255 currentchar=fgetc(in);
256 }
257 if(currentchar=='<')
258 {
259 i=0;
260 arr[i++]=currentchar;
261 currentchar=fgetc(in);
262 if(currentchar=='=')
263 {
264 arr[i++]=currentchar;
265 arr[i++]='\0';
266 fprintf(out,"%s%d,%c%s%c%s\n","(",13,'"',arr,'"',")");
267 currentchar=fgetc(in);
268 }
269 else
270 { arr[i++]='\0';
271 fprintf(out,"%s%d,%c%s%c%s\n","(",13,'"',arr,'"',")");
272 }
273 }
274 while(currentchar==' ')
275 {
276 currentchar=fgetc(in);
277 }
278 if(currentchar=='!')
279 {
280 i=0;
281 arr[i++]=currentchar;
282 currentchar=fgetc(in);
283 if(currentchar=='=')
284 {
285 arr[i++]=currentchar;
286 arr[i++]='\0';
287 fprintf(out,"%s%d,%c%s%c%s\n","(",13,'"',arr,'"',")"); 288 currentchar=fgetc(in);
289 }
290 }
291 while(currentchar==' ')
292 {
293 currentchar=fgetc(in);
294 }
295 if(currentchar=='&')
296 {
297 fprintf(out,"%s%d,%c%c%c%s\n","(",19,'"',currentchar,'"',")");
298 currentchar=fgetc(in);
299 }
300 while(currentchar==' ')
301 {
302 currentchar=fgetc(in);
303 }
304 while((ch=currentchar)=='\n')
305 {
306 currentchar=fgetc(in);
307 }
308 while(currentchar==' ')
309 {
310 currentchar=fgetc(in); 311 }
312 }
313 else
314 {
315 fprintf(out,"%s,%c%c%c\n","error",'"',currentchar,'"');
316 currentchar=fgetc(in);
317 }
318 }//结束开头while语句
319 /*关闭文件退出*/
320 fclose(in);
321 fclose(out);
322 }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -