1 #include<stdio.h>
2 #include<string.h>
3 #include<stdlib.h>
4 char prog[800],token[8];
5 char ch;
6 int syn,p,q,sum;
7 char *rwtab[6]={"begin","if","then","while","do","end"};
8 void scaner();
9 main()
10 {
11 p=0;
12 printf("\nplease input the source code:\n");
13 do{
14 ch=getchar();
15 prog[p]=ch;
16 p++;
17 }while(ch!='#');
18 p=0;
19 do
20 {
21 scaner();
22 switch(syn)
23 {
24 case 11:printf("\n(%d,%d)",syn,sum);break;
25 case -1:printf("\n(%s,出错)",token);break;
26 default:printf("\n(%d,%s)",syn,token);
27 }
28 }while(syn!=0);
29 }
30
31
32 void scaner()
33 {
34
35 int i;
36 sum=0;
37 for(q=0;q<8;q++)
38 token[q]=NULL;
39 ch=prog[p];
40 q=0;
41 while(ch==' '||ch=='\n')
42 {
43 p++;
44 ch=prog[p];
45 }
46 if(('a'<=ch)&&(ch<='z')||('A'<=ch)&&(ch<='Z'))
47 {
48 while(('a'<=ch)&&(ch<='z')||('A'<=ch)&&(ch<='Z')||(ch>='0'&&ch<='9'))
49 {
50 token[q]=ch;
51 p++;
52 ch=prog[p];
53
54 q++;
55 }
56 syn=10;
57 for(i=0;i<6;i++)
58 {
59 if(strcmp(token,rwtab[i])==0)
60 {
61 syn=i+1;
62 break;
63 }
64 }
65 }
66 else if(ch>='0'&&ch<='9')
67 {
68 while((ch>='0')&&(ch<='9'))
69 {
70 sum=sum*10+ch-'0';
71 p++;
72 ch=prog[p];
73 }
74 syn=11;
75 }
76 else switch(ch)
77 {
78 case '+':
79 syn=13;
80 token[q++]=ch;
81 p++;
82 break;
83 case '-':
84 syn=14;
85 token[q++]=ch;
86 p++;
87 break;
88 case '*':
89 syn=15;
90 token[q++]=ch;
91 p++;
92 break;
93 case '/':
94 syn=16;
95 token[q++]=ch;
96 p++;
97 break;
98 case ':':
99 syn=17;
100 token[q++]=ch;
101 p++;
102 if(prog[p]=='=')
103 {
104 syn=18;
105 ch=prog[p];
106 token[q++]=ch;
107 p++;
108 }
109 break;
110 case '<':
111 syn=20;
112 token[q++]=ch;
113 p++;
114 if(prog[p]=='>')
115 {
116 syn=21;
117 ch=prog[p];
118 token[q++]=ch;
119 p++;
120 }
121 if(prog[p]=='=')
122 {
123 syn=22;
124 ch=prog[p];
125 token[q++]=ch;
126 p++;
127 }
128 break;
129 case '>':
130 syn=23;
131 token[q++]=ch;
132 p++;
133 if(prog[p]=='=')
134 {
135 syn=24;
136 ch=prog[p];
137 token[q++]=ch;
138 p++;
139 }
140 break;
141 case '=':
142 syn=25;
143 token[q++]=ch;
144 p++;
145 break;
146 case ';':
147 syn=26;
148 token[q++]=ch;
149 p++;
150 break;
151 case '(':
152 syn=27;
153 token[q++]=ch;
154 p++;
155 break;
156 case ')':
157 syn=28;
158 token[q++]=ch;
159 p++;
160 break;
161 case '#':
162 syn=0;
163 token[q++]=ch;
164 break;
165 }
166 }
![](https://images2015.cnblogs.com/blog/808656/201510/808656-20151020123528630-329993162.png)