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

0916词法分析

时间:2015-10-10 01:38:43      阅读:240      评论:0      收藏:0      [点我收藏+]

标签:

  1 #include<stdio.h>
  2 #include<string.h>
  3 int i,s=1;
  4 
  5 //判断是否数字
  6 void number(char a[])
  7 {
  8     char b[100];
  9     int m,k=0,t;
 10     m=i;
 11     while(a[m]>=0 && a[m]<=9)  
 12     {
 13         b[k]=a[m];   //用数组b存放数组a中的数字
 14         k++;
 15         m++;
 16     }
 17     i=m-1;
 18     printf("(11,");
 19     for(t=0;t<k;t++)
 20         printf("%c",b[t]);
 21     printf(")\n");
 22 }
 23 
 24 //检索关键字表格
 25 void keyword(char a[])
 26 {
 27     int k=0,m,flag=0,t;
 28     char b[100];
 29     char *key[6]={"begin","if","then","while","do","end"};
 30     m=i;
 31     while((a[m]>=a&&a[m]<=z)||(a[m]>=A&&a[m]<=Z)) //用数组b存放数组a中的字母
 32     {
 33         b[k]=a[m];   
 34         k++;
 35         m++;
 36         b[k]=\0;
 37     }
 38     i=m-1;
 39     for(t=0;t<6;t++)
 40     {
 41         if(strcmp(b,key[t])==0)  //将数组b与关键字进行比较
 42         {
 43             printf("(%d,%s)\n",t+1,key[t]);  //输出关键字
 44             flag=1;
 45         }
 46     }
 47     if(flag==0)
 48     {
 49         printf("(?,%s)\n",b);   //输出标识符
 50     }
 51 }
 52 
 53 //词法扫描函数
 54 void Fenxi(char ch,char b)
 55 {  
 56      switch(ch)
 57      {
 58         case =:
 59             if(b==:)
 60                 printf("(18,:=)\n");
 61             else if(b==<)
 62                 printf("(21,<=)\n");
 63             else if(b==>)
 64                 printf("(24,>=)\n");
 65             else
 66                 printf("(25,=)\n");
 67             i++;
 68             break;
 69         case +:
 70             printf("(13,+)\n");break;
 71         case -:
 72             printf("(14,-)\n");break;
 73         case *:
 74             printf("(15,*)\n");break;
 75         case /:
 76             printf("(16,/)\n");break;
 77         case(:
 78             printf("(27,()\n");break;
 79         case):
 80             printf("(28,))\n");break;
 81         case ,:
 82             printf("(32,,)\n");break;
 83         case ::
 84             if(b===)
 85                 printf("(18,:=)\n");
 86             else
 87                 printf("(17,:)\n");
 88             i++;
 89             break;
 90         case ;:
 91             printf("(34,;)\n");break;
 92         case >:
 93             if(b===)
 94                 printf("(24,>=)\n");
 95             else
 96             {
 97                 i=i-2;
 98                 if(b==<)
 99                     printf("(22,<>)\n");
100                 else
101                     printf("(23,>)\n");
102             }
103             i++;
104             break;
105         case <:
106             if(b===)
107                 printf("(21,<=)\n");
108             else if(b==>)
109                 printf("(22,<>)\n");
110             else
111                 printf("(20,<)\n");
112             i++;
113             break;
114         default:
115             s=0;
116             break;
117     }
118 }
119 
120 main()
121 {
122     char a[100];
123     printf("请输入源程序(以#结束):\n");
124     scanf("%[^#]s",&a);
125     printf("\n输入要分析的源程序为:\n");
126     printf("%s",a);
127     printf("\n");
128     printf("\n分析结果为:\n");
129     i=0;
130     while(i<100&&a[i]!=#)
131     {
132         if((a[i]>=65&&a[i]<=90)||(a[i]>=97&&a[i]<=122))   
133             keyword(a);
134         else if(a[i]>=48&&a[i]<=57)
135             number(a);
136         else
137             Fenxi(a[i],a[i+1]);
138         i++;
139     }
140     printf("\n");
141 }

技术分享

0916词法分析

标签:

原文地址:http://www.cnblogs.com/blueYE00/p/4865613.html

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