| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1158 人关注过本帖
标题:一个简单的C语言词法分析器!
取消只看楼主 加入收藏
追寻XT
Rank: 2
等 级:论坛游民
威 望:1
帖 子:37
专家分:32
注 册:2014-8-20
结帖率:83.33%
收藏
 问题点数:0 回复次数:0 
一个简单的C语言词法分析器!
#include <stdio.h>
 char  *table[]={"while","if","else","switch","case"};
void main(){
     void Input(char *const str);
     void Deal(char *str);
     char  str[100]=" ";
   
     Input(str);
     Deal(str);
}
void Deal(char *str){
    char *head=str;
    char *tail=str;
    char token[6];
    int i=0,j=0;
    while(j=0,i=0,*head!='\0'){
        char ch;
           ch=*tail;
           //第一个字符为字母
           if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')) {
            while((ch>='0'&&ch<='9')||(ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))
               {
                        
                      token[i++]=ch;
                      ch=*++tail;
               }
               token[i]='\0';
           //  printf("%s",token);
               head=tail;
              
            for(i=0;i<5;i++)
                 if(!strcmp(table[i],token)) {
                      printf("<%d,%s>\n",i+1,token);
                      break;
                 }
            if(i==5)  { printf("<%d,%s>\n",i+1,token);}
          }
           //第一个字符为数字
        else if((ch>='0'&&ch<='9')){  
            while((ch>='0'&&ch<='9'))
               {  
                     token[i++]=ch;
                     ch=*++tail;
               }
            token[i]='\0';
            head=tail;
            printf("<%d,%s>\n",7,token);
        }
        //第一个字符为其它字符
        else switch(ch){
              case ' ': head=++tail;break;//跳过空格字符
              case '+': printf("<%d,%c>\n",8,ch);head=++tail;break;
              case '-': printf("<%d,%c>\n",9,ch);head=++tail;break;
              case '*': printf("<%d,%c>\n",10,ch);head=++tail;break;
              case '=':
                          if(*(tail+1)=='=')  printf("<%d,%c%c>\n",11,ch,*(++tail));
                        else   printf("<%d,%c>\n",12,ch);
                        head=++tail;break;
              case '<':
                          if(*(tail+1)=='=')  printf("<%d,%c%c>\n",11,ch,*(++tail));
                        else   printf("<%d,%c>\n",11,ch);
                        head=++tail;break;
              case ')': printf("<%d,%c>\n",13,ch);head=++tail;break;
              case '(': printf("<%d,%c>\n",14,ch);head=++tail;break;
              case ';': printf("<%d,%c>\n",15,ch);head=++tail;break;
             }
           
//           
//           token[i++]=*tail++;
//      
//           
//       token[i]='\0';
////       for(j=0;j<i;j++)
////            printf("%c",token[j]);
//       printf("%s",token);
////       if(!strcmp())
//       if((*tail)=='\0') break;
//       head=++tail;
//       printf("\n");
    }
}
void Input(char *const str){

    char input;
    char *p=str;
    int i=0;
    while(scanf("%c",&input)==1&&input!='\n'){
        str[i++]=input;
    }
    str[i]='\0';
//    while(*p!='\0'){
//       printf("%c",*p++);
//    }
//    printf("\n");
}
搜索更多相关主题的帖子: include C语言 字母 
2016-09-15 09:48
快速回复:一个简单的C语言词法分析器!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016985 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved