新词法分析程序.docx

上传人:b****1 文档编号:1888023 上传时间:2023-05-02 格式:DOCX 页数:14 大小:23.43KB
下载 相关 举报
新词法分析程序.docx_第1页
第1页 / 共14页
新词法分析程序.docx_第2页
第2页 / 共14页
新词法分析程序.docx_第3页
第3页 / 共14页
新词法分析程序.docx_第4页
第4页 / 共14页
新词法分析程序.docx_第5页
第5页 / 共14页
新词法分析程序.docx_第6页
第6页 / 共14页
新词法分析程序.docx_第7页
第7页 / 共14页
新词法分析程序.docx_第8页
第8页 / 共14页
新词法分析程序.docx_第9页
第9页 / 共14页
新词法分析程序.docx_第10页
第10页 / 共14页
新词法分析程序.docx_第11页
第11页 / 共14页
新词法分析程序.docx_第12页
第12页 / 共14页
新词法分析程序.docx_第13页
第13页 / 共14页
新词法分析程序.docx_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

新词法分析程序.docx

《新词法分析程序.docx》由会员分享,可在线阅读,更多相关《新词法分析程序.docx(14页珍藏版)》请在冰点文库上搜索。

新词法分析程序.docx

新词法分析程序

编译原理—词法分析程序(清华大学版编译原理词法分析流程图)

#include  

#include  

#include  

 

void getch(); 

void getsym(); 

 

typedef struct tag_keywordarray /* 存放关键字 */ 

     char a[20]; 

         

}keywordarray[10]; 

 

typedef struct tag_token       /* 存放种别码和值的 */ 

     int sym; 

     char symbol[10]; 

         

}token[100]; 

 

keywordarray keyword={       "begin","end","for","if","integer","procedure","read", 

"repeat","var","write"}; 

static token token_PL; 

static int cc=0; 

static int j=0; 

static char line[50]; 

char ch; 

bool RLP=true; 

 

void main(void) 

     int i; 

     getsym(); 

     for(i=0;i

     { 

          printf("<"); 

          printf("%d,",token_PL.sym); 

          printf("%s> ",token_PL.symbol); 

     } 

     if(RLP==false) 

     { 

             printf("\nNone of ')'\n"); 

     } 

     system("pause"); 

 

void getsym() 

     int k; 

     int i; 

     char A[10]; 

     char id[10]; 

 

     while(ch==NULL) 

     { 

          getch(); 

     } 

     /* 判断ch是否有字 */ 

 

       while(ch!

='\n') 

       { 

               if((ch>='A' && ch<='Z')  ¦ ¦ (ch>='a' && ch<='z')) 

                       /* 判断取出的字是否为字母 */ 

               { 

                       k=0; 

                       A[k]=ch; 

                       k=k+1; 

                       getch(); 

                       while

(1) 

                       { 

                               if((ch>'A' && ch<'Z')  ¦ ¦ (ch>='a' && ch<='z')  ¦ ¦(ch>='0' && ch<='9')) 

                               { 

                                       if(k<10) 

                                       { 

                                               A[k]=ch; 

                                               k=k+1; 

                                               getch(); 

                                       } 

                                       else 

                                       { 

                                               getch(); 

                                               /* k>10则继续取词,但对后面的不错处理,截取前10个 */ 

                                       } 

                               } 

                               else 

                               { 

                                       cc-=1; 

                                       break; 

                               } 

                       } 

 

                       for(i=0;i

                       { 

                               id=A; 

                       } 

                       id='\0'; 

 

                       bool bKeyword=false; 

                       for(i=0;i<10;i++) 

                       { 

                               if((stricmp(id,keyword.a))==0) 

                               { 

                                       token_PL[j].sym=1; 

                                       strcpy(token_PL[j].symbol,keyword.a); 

                                       j=j+1; 

                                       bKeyword=true; 

                                       break; 

                               } 

                       } 

                       if(!

bKeyword) 

                       { 

                               token_PL[j].sym=2; 

                               strcpy(token_PL[j].symbol,id); 

                               j=j+1; 

                       } 

 

               } 

               else 

               { 

                       if(ch>='0' && ch<='9') /* 判断是否为数字 */ 

                       { 

                               k=0; 

                               A[k]=ch; 

                               k=k+1; 

                               getch(); 

                               while

(1) 

                               { 

                                       if(ch>='0' && ch<='9') 

                                       { 

                                               if(k<10) 

                                               { 

                                                       A[k]=ch; 

                                                       k=k+1; 

                                                       getch(); 

                                               } 

                                               else 

                                               { 

                                                       getch(); 

                                               } 

                                       } 

                                       else 

                                       { 

                                               cc-=1; 

                                               break; 

                                       } 

                               } 

                               token_PL[j].sym=4; 

                               A[k]='\0'; 

                               strcpy(token_PL[j].symbol,A); 

                               j=j+1; 

                       } 

                       else  /* 是否为操作符 */ 

                       { 

                               if(ch=='+') 

                               { 

                                       k=0; 

                                       A[k]=ch; 

                                       token_PL[j].sym=3; 

                                       A[k+1]='\0'; 

                                       strcpy(token_PL[j].symbol,A); 

                                       j=j+1; 

                               } 

                               else if(ch=='-') 

                               { 

                                       k=0; 

                                       A[k]=ch; 

                                       token_PL[j].sym=3; 

                                       A[k+1]='\0'; 

                                       strcpy(token_PL[j].symbol,A); 

                                       j=j+1; 

                               } 

                               else if(ch=='*') 

                               { 

                                       k=0; 

                                       A[k]=ch; 

                                       token_PL[j].sym=3; 

                                       A[k+1]='\0'; 

                                       strcpy(token_PL[j].symbol,A); 

                                       j=j+1; 

                               } 

                               else if(ch=='/') 

                               { 

                                       k=0; 

                                       A[k]=ch; 

                                       token_PL[j].sym=3; 

                                       A[k+1]='\0'; 

                                       strcpy(token_PL[j].symbol,A); 

                                       j=j+1; 

                               } 

                               else if(ch==':

') 

                               { 

                                       k=0; 

                                       A[k]=ch; 

                                       getch(); 

                               

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2