首页 > 代码库 > 词法分析程序
词法分析程序
词法分析程序的功能:
提示用户输入一段需分析的源程序,然后程序读入该源程序的字符串进行词法分析,最后输出词法分析的结果显示在屏幕上。
符号与种别码对照表:
单词符号 种别码 单词符号 种别码
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 }
程序还没完成,只写到了识别关键字和数字的部分
词法分析程序
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。