首页 > 代码库 > 2016.9.30词法分析程序
2016.9.30词法分析程序
单词符号 | 种别码 | 单词符号 | 种别码 |
begin | 1 | : | 17 |
if | 2 | := | 18 |
then | 3 | < | 20 |
while | 4 | <= | 21 |
do | 5 | <> | 22 |
end | 6 | > | 23 |
l(l|d)* | 10 | >= | 24 |
dd* | 11 | = | 25 |
+ | 13 | ; | 26 |
- | 14 | ( | 27 |
* | 15 | ) | 28 |
/ | 16 | # | 0 |
#include<stdio.h>#include<string.h>#include<stdlib.h> char TOken[10];//分开进行比较 char ch;char r1[]={"begin"};char r2[]={"if"};char r3[]={"then"};char r4[]={"while"};char r5[]={"do"};char r6[]={"end"};char A[10000];//输入的所有值 int syn,row;int n,m,p,sum,j;static int i = 0;void scaner();main(){ row = 0 ; p = 0 ; printf("请输入字符串:(#为结束)\n"); do { scanf("%c",&ch); A[p]=ch; p++; }//输入值到数组A【】中,以#结束 while(ch!=‘#‘); do { scaner();//进入函数进行判定 switch(syn) { case 11: printf("(%d,%d)\n",syn,sum); break;//如果是11,那么就是数字 case 0: printf("(%d,%c)\n",syn,TOken[0]);break;//如果是0,那么是# 结束 case -2: row=row++;break; case -1:break; default: printf("(%d,%s)\n",syn,TOken);break;//否则,就是变量名、关键词 } } while (syn!=0);}void scaner(){ for(n=0;n<7;n++) TOken[n]=0;//每次循环完就清零 ch=A[i]; while(ch==‘ ‘||ch==‘\n‘)//如果字符是空格或者回车,跳过 { i++; ch=A[i]; } if((ch>=‘a‘&&ch<=‘z‘)||(ch>=‘A‘&&ch<=‘Z‘)) //可能是标示符或者变量名 { m=0; while((ch>=‘0‘&&ch<=‘9‘)||(ch>=‘a‘&&ch<=‘z‘)||(ch>=‘A‘&&ch<=‘Z‘))//找到一个变量名或者关键字,直到遇到空格为止 { TOken[m]=ch;m++; i++;ch=A[i]; } TOken[m]=‘\0‘;//将识别出来的字符和已定义的标示符作比较, //因为定义的begin为1,if为2...... if(strcmp(TOken,r1)==0){syn=1;} else if(strcmp(TOken,r2)==0){syn=2;} else if(strcmp(TOken,r3)==0){syn=3;} else if(strcmp(TOken,r4)==0){syn=4;} else if(strcmp(TOken,r5)==0){syn=5;} else if(strcmp(TOken,r6)==0){syn=6;} else{syn=10;} //变量名 } else if((ch>=‘0‘&&ch<=‘9‘)) //数字 { sum=0; while((ch>=‘0‘&&ch<=‘9‘)) { sum=sum*10+ch-‘0‘;//显示其数字sum i++; ch=A[i]; } syn=11; } else switch(ch) //其他字符 {case‘<‘: m=0; TOken[m]=ch; m++; i++; ch=A[i]; if(ch==‘=‘) { syn=21; TOken[m]=ch; m++; i++; } else if(ch==‘>‘) { syn=22; TOken[m]=ch; m++; i++; } else { syn=20; }break;case‘>‘: m=0; TOken[m]=ch; m++; i++; ch=A[i]; if(ch==‘=‘) { syn=24; TOken[m]=ch; m++; i++; } else { syn=23; }break;case‘:‘: m=0; TOken[m]=ch; m++; i++; ch=A[i]; if(ch==‘=‘) { syn=18; TOken[m]=ch; m++; i++; } else { syn=17; }break; case‘+‘:syn=13;TOken[0]=ch;i++;break; case‘-‘:syn=14;TOken[0]=ch;i++;break;case‘*‘:syn=15;TOken[0]=ch;i++;break;case‘/‘:syn=16;TOken[0]=ch;i++;break; case‘=‘:syn=25;TOken[0]=ch;i++;break;case‘;‘:syn=26;TOken[0]=ch;i++;break;case‘(‘:syn=27;TOken[0]=ch;i++;break;case‘)‘:syn=28;TOken[0]=ch;i++;break; case‘#‘:syn=0;TOken[0]=ch;i++;break; case‘\n‘:syn=-2;break;default:syn=-1; }}
2016.9.30词法分析程序
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。