码迷,mamicode.com
首页 > 其他好文 > 详细

1022 词法分析程序

时间:2015-10-22 19:03:28      阅读:137      评论:0      收藏:0      [点我收藏+]

标签:

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

技术分享

1022 词法分析程序

标签:

原文地址:http://www.cnblogs.com/lieson/p/4902383.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!