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

    
    
    #include<stdio.h>
    #include<string.h>
    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]!='\0')
        {
            text[i]=a[i];
            i++;
        }
        text[i]='\0';
        printf("(11,%s)",text);
    }
    void fing(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=0,l=0,x=0;
        char a[100],/*正文*/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')
            {
              while(a[i]>='a' && a[i]<='z' ||a[i]>='A'&&a[i]<='Z')
                    i++;
    
                l=0;
            
                for(j;j<i;j++)
                {
                    text[l]=a[j];l++;
                } 
                text[l]='\0';
                fing (text);
                i--;
                
            }
            else
            {
                if(a[i]=='#')
                {
                    printf("(0,#)");
                    break;
                }
                
                x=ccc(a,i);
                if(x==1)
                {
                    j=i+1;
                }
                else if(x==2)
                {
                    i++;
                    j=i+1;
                }
            }
            i++;
            
        }
    
    } 

    
    
    
     
    
    
    



  • 相关阅读:
    【妖精眼镜】
    神兽保佑-代码无BUG
    Eclipse常用快捷键 及 不格式化注释
    Android dialog 全屏
    eclipse 改变颜色,背景
    GOOGLE和百度的长域名
    Android在ArrayAdapter<>里如何得到List<>的Items
    Android 仿微信朋友圈发动态功能(相册图片多选)
    Android 让GridView的高度为Wrap_content根据内容自适应高度
    C++中函数的返回值
  • 原文地址:https://www.cnblogs.com/ken520/p/4825377.html
Copyright © 2011-2022 走看看