首页 > 其他 > 详细

1022 词法分析程序

时间:2015-10-22 13:50:44      阅读:205      评论:0      收藏:0      [点我收藏+]
#include<stdio.h>
#include<string.h>
int n,p,zbm;
char ch,code[1000],str[100];
void scaner();
void main()
{
    printf("Please input the source code:\n\n");
    p=0;
    do{
        ch=getchar();
        code[p++]=ch;
    }while(ch!=#);
    printf("\n\nOutput the code:\n\n");
    p=0;
    do{
        scaner();
        if(zbm==98)printf("%s",str);
        else if(zbm==99)printf("<error,%s>",str);
        else printf("<%d,%s>",zbm,str); 
    }while(zbm!=0);
    printf("\n\n");
}
void scaner()
{
    do{
        ch=code[p++];
    }while(ch== );
    n=0;
    if((ch>=A&&ch<=Z)||(ch>=a&&ch<=z)||ch==_)
    {
        while((ch>=0&&ch<=9)||(ch>=A&&ch<=Z)||(ch>=a&&ch<=z)||ch==_)
        {
            str[n++]=ch;
            ch=code[p++];
        }
        str[n++]=\0;
        if     (strcmp(str,"begin")==0)zbm=1;
        else if(strcmp(str,"if"   )==0)zbm=2;
        else if(strcmp(str,"then" )==0)zbm=3;
        else if(strcmp(str,"while")==0)zbm=4;
        else if(strcmp(str,"do"   )==0)zbm=5;
        else if(strcmp(str,"end"  )==0)zbm=6;
        else                           zbm=10;
        p--;
    }
    else if(ch>=0&&ch<=9)
    {
        zbm=11;
        while((ch>=0&&ch<=9)||(ch>=A&&ch<=Z)||(ch>=a&&ch<=z)||ch==_)
        {
            if(ch<0||ch>9)zbm=99;
            str[n++]=ch;
            ch=code[p++];
        }
        str[n++]=\0;
        p--;
    }
    else
    {
        switch(ch)
        {
            case +:zbm=13;str[n++]=ch; break;
            case -:zbm=14;str[n++]=ch; break;
            case *:zbm=15;str[n++]=ch; break;
            case /:zbm=16;str[n++]=ch; break;
            case ::zbm=17;str[n++]=ch;    
                if(code[p]===)
                {    zbm=18;str[n++]=ch;}break;
            case <:zbm=20;str[n++]=ch;    
                if(code[p]===)
                {    zbm=21;str[n++]=ch;}break;
                if(code[p]==>)
                {    zbm=22;str[n++]=ch;}break;
            case>:zbm=23;str[n++]=ch;    
                if(code[p]===)
                {    zbm=24;str[n++]=ch;}break;
            case =:zbm=25;str[n++]=ch; break;
            case ;:zbm=26;str[n++]=ch; break;
            case (:zbm=27;str[n++]=ch; break;
            case ):zbm=28;str[n++]=ch; break;
            case #:zbm=0 ;str[n++]=ch; break;
            case\n:zbm=98;str[n++]=ch; break;
            case\t:zbm=98;str[n++]=ch; break;
            default :zbm=99;str[n++]=ch;
        }
        str[n++]=\0;
    }
}

 

1022 词法分析程序

原文:http://www.cnblogs.com/chenzezhan/p/4900506.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!