• 0916 编程实验一 词法分析程序


    #include<stdio.h>
    #include<string.h>
    int ddd(char a[100],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 ccc(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]!='')
        {
            text[i]=a[i];
            i++;
        }
        text[i]='';
        printf("(11,%s)",text);
    }
    void fing(char a[10])
    {
        int i=0;
        char text[10];
        while(a[i]!='')
        {
            text[i]=a[i];
            i++;
        }
        text[i]='';
    
        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[100],text[10];
        printf("输入源程序,以#号结束:");
        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]='';
    
                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]='';
                fing (text);
                
            }
            else
            {
                if(a[i]=='#')
                {
                    printf("(0,#)");
                    break;
                }
                
                x=ccc(a,i);
                if(x==1)
                {
                    j=i;
                }
                else if(x==2)
                {
                    i++;
                    j=i;
                }
            }
            i++;
            
        }
        printf("
    ");
    
    } 

  • 相关阅读:
    19.08.12 知识点的记录
    19.08.09 知识点的记录
    keil编译生成bin文件的方法
    python 虚拟环境virtualenv
    RT_Thread GD32F303 片上flash使用fal组件
    esp8266 deepsleep唤醒不工作打印
    5V 电源 适配器 空载耗电量 自身电量 消耗功率
    keil 更换jlink脚本版本
    ESP8266 NONOS SmartConfig配网(安信可公众号配网)
    windows安装esp开发环境
  • 原文地址:https://www.cnblogs.com/range/p/4826971.html
Copyright © 2020-2023  润新知