词法分析程序

词法分析程序的功能:
提示用户输入一段需分析的源程序,然后程序读入该源程序的字符串进行词法分析,最后输出词法分析的结果显示在屏幕上。
符号与种别码对照表:
单词符号 种别码 单词符号 种别码
begin     1        :          17
if           2        :=        18
then      3        <          20
while      4       <=        22
do         5 
end       6         >         23
l(l|d)*   10       >=       24
dd*      11       =         25
+         13         ;        26
-          14        (         27
*          15        )        28
/          16        #         0

 

<字母>
S->a|b|c||d|.....y|z|
<数字>
D->1|2|3|...|8|9|
S->D|SD|S0|
<标识符>
A->1|2|3|...|8|9|
B->a|b|c|...|y|z|
S->AB
<关键字>
B->a|b|c|...|y|z|
S->B|AB|
<运算符>s
A->+|-|*|/|
<界符>
D->:|;|...|<|=|
S->D|SD|

 

 1 #include<stdio.h>
 2 #define MAX 100
 3 char ch,zifu[MAX];
 4 int zhongbie,p;/*zhongbie代表字符种别,p代表数组zifi的下标位置*/
 5 void cwh();
 6 main()
 7 {
 8     p=0;
 9     gets(zifu);
10     
11         cwh();
12         printf("%d",zhongbie);
13     /*如何输出数字*/
14 
15 }
16 void cwh()
17 {
18     int i,m;/*m用于记录linshi的下标*/
19     char *guanjianzi[6]={"begin","if","then","while","do","end"};/*char*[]数组每个元素指向一个char型的变量,关键字数组记得zhongbie+1*/
20     char shuangfuhao[2]={'1','1'};/*字符=1*/
21     char linshi[8];
22     for(i=0;i<8;i++)
23         linshi[i]=NULL;/*定义一个临时存放字符串的数组用作比较*/
24     m=0;
25     ch=zifu[p++];
26     /*开始识别字符种别*/
27     while(ch==' ')
28     {
29         p++;
30         ch=zifu[p];   
31     }
32     /*识别关键字或者标志符*/
33     if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))
34     {
35          while((ch>='0'&&ch<='9')||(ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))
36         {
37             linshi[m++]=ch;
38             ch=zifu[p++];
39         }
40         p--;
41         zhongbie=10;
42         for(i=0;i<6;i++)  /*将识别出来的字符和已定义的标示符作比较 */
43         {
44             if(strcmp(linshi,guanjianzi[i])==0)
45             {
46                 zhongbie=i+1;
47                 break;
48             }
49         }
50     }
51     /*识别数字*/
52     else if((ch>='0'&&ch<='9'))
53     {
54         while((ch>='0'&&ch<='9'))
55         {
56             ch=zifu[++p];
57         }
58         zhongbie=11;
59     }
60 
61 }

程序还没完成,只写到了识别关键字和数字的部分

posted @ 2016-09-30 20:10  196陈文豪  阅读(189)  评论(0编辑  收藏  举报