zoukankan      html  css  js  c++  java
  • 0916 编程实验一 词法分析程序

    #include<stdio.h>
    #include<string.h>
    int plu(char a[200],int i)
    {
        switch(a[i])
        {
            case '+':case '-':case '*':case '/':case '=':case ';':case '(':case ')':
                {
                    return(1);
                }
            case ':':
                {
                    if(a[i+1]=='=')
                    {
                        return(2);
                    }
                    else
                        return(1);
    
                }
            case '<':
                {
                    if(a[i+1]=='>')
                    {
                        return(2);
       
                 }
    else if(a[i+1]=='=')
                    {
                        return(2);
                    }
                    else
                    return(1);
    
                }
            case '>':
                {
                    if(a[i+1]=='=')
                    {
                        return(2);
                    }
                    else
                    return(1);
    
                }
            default:
                return(0);
                break;
    
        }
    }
    int dlc(char a[100],int i)
    {
        switch(a[i])
        {
            case '+':
                {
                    printf("(13,+)");
                    return(1);    
                }
            
            case '-':
                {
                    printf("(14,-)");
                    return(1);
                }
            case '*':
                {
                    printf("(15,*)");
                    return(1);
                }
            case '/':
                {
                    printf("(16,/)");
                    return(1);
                }
            case ':':
                {
                    if(a[i+1]=='=')
                    {
                        printf("(18,:=)");
                        return(2);
                    }
                    else
                        printf("(17,:)");
                    return(1);
    
                }
            case '<':
                {
                    if(a[i+1]=='>')
                    {
                        printf("(21,<>)");
                        return(2);
                    }
                    else if(a[i+1]=='=')
                    {
                        printf("(22,<=)");
                        return(2);
                    }
                    else
                        printf("(20,<");
                    return(1);
    
                }
            case '>':
                {
                    if(a[i+1]=='=')
                    {
                        printf("(24,>=)");
                        return(2);
                    }
                    else
                        printf("(23,>");
                    return(1);
    
                }
            case '=':
                {
                    printf("(25,=)");
                    return(1);
                }
            case ';':
                {
                    printf("(26,;)");
                    return(1);
                }
            case '(':
                {
                    printf("(27,()");
                    return(1);
                }
            case ')':
                {
                    printf("(28,)");
                    return(1);
                }
            default:
                return(0);
                break;
    
        }
    }
    void number(char a[10])
    {
        int i=0;
        char text[10];
        while(a[i]!='\0')
        {
            text[i]=a[i];
            i++;
        }
        text[i]='\0';
        printf("(11,%s)",text);
    }
    void discov(char a[10])
    {
        int i=0;
        char text[10];
        while(a[i]!='\0')
        {
            text[i]=a[i];
            i++;
        }
        text[i]='\0';
    
        if( strcmp(text,"begin")==0)
        {
            printf("(1,begin)");
        }
        else if( strcmp(text,"if")==0)
        {
            printf("(2,if)");
        }
        else if( strcmp(text,"then")==0)
        {
            printf("(3,then)");
        }
        else if( strcmp(text,"while")==0)
        {
            printf("(4,while)");
        }
        else if( strcmp(text,"do")==0)
        {
            printf("(5,do)");
        }
        else if( strcmp(text,"end")==0)
        {
            printf("(6,end)");
        }
        else
        {
            printf("(10,%s)",text);
        }
    } 
    
    main(){
        int i=0,j=-1,l=0,x=0;
        char a[200],text[10];
        printf("输入源程序,以#号结束");
        gets(a);
        while(1)
        {
            if(a[i]>='0'&&a[i]<='9')
            {
                while(a[i]>='0'&&a[i]<='9')
                    i++;
    
                l=0;
            
                for(++j;j<i;j++)
                {
                    text[l]=a[j];
                    l++;
                }
        
                text[l]='\0';
    
                number(text);
                i--;
            }
            else if(a[i]>='a'&&a[i]<='z'||a[i]>='A'&&a[i]<='Z')
            {l=0;
            
                for(i;a[i]>='a' && a[i]<='z' ||a[i]>='A'&&a[i]<='Z';i++)
                {
                    text[l]=a[i];
                    l++;
                }
                i--;
        
                text[l]='\0';
                discov(text);
                
            }
            else
            {
                if(a[i]=='#')
                {
                    printf("(0,#)");
                    break;
                }
                
                x=dlc(a,i);
                if(x==1)
                {
                    j=i;
                }
                else if(x==2)
                {
                    i++;
                    j=i;
                }
            }
            i++;
            
        }
    
    
  • 相关阅读:
    BZOJ3813 奇数国
    BZOJ2735 世博会
    BZOJ2081 [Poi2010]Beads
    BZOJ3276 磁力
    BZOJ2054 疯狂的馒头
    BZOJ2610 [Poi2003]Monkeys
    BZOJ2428 [HAOI2006]均分数据
    BZOJ2120 数颜色
    BZOJ2527 [Poi2011]Meteors
    补比赛——牛客OI周赛9-普及组
  • 原文地址:https://www.cnblogs.com/whitestar/p/4825809.html
Copyright © 2011-2022 走看看