词法分析程序的功能:
提示用户输入一段需分析的源程序,然后程序读入该源程序的字符串进行词法分析,最后输出词法分析的结果显示在屏幕上。
符号与种别码对照表:
单词符号 种别码 单词符号 种别码
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 }
程序还没完成,只写到了识别关键字和数字的部分