zoukankan      html  css  js  c++  java
  • 词法分析程序 157

    对一段字符串进行判断

    输入:字符串,以#结束。

    输出:关键字或字母或数字或符号+对应种别码

    种别码对照

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define MAX 100
    char sum[MAX],ch,token[MAX];//字符串储存,单个字符,字符提取
    int a=0,zbm,n,i;//计数器,种别码
    char *gjz[6]={"begin","if","then","while","do","end"};
    
    void FX();
    
    void main()
    {
        printf("请输入字符串,以#结束:");
        do
        {
            ch=getchar();
            sum[a++]=ch;
        }while(ch!='#');
        a=0;
        do
        {
            FX();
            printf("%d\t%s\n",zbm,token);
    
        }while(zbm!=0);//直到最后一个为#
        getchar();
    }
    
    void FX()
    {
        for(n=0;n<MAX;n++)
        {token[n]='\0';}
        n=0;
        ch=sum[a++];
        while(ch==' '){ch=sum[a++];}
    
        if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))//字母或字母+数字
        {
            do{
                token[n++]=ch;//复制到提取中
                ch=sum[a++];
            }while((ch>='a'&&ch<='z')||(ch>='a'&&ch<='z')||(ch>='0'&&ch<='9'));
            zbm=11;
    
            for(n=0;n<6;n++)//关键字提取
            {
                if(strcmp(token,gjz[n])==0)
            {
                zbm=n+1;
            }
            }
            a--;
    
        }
        else if(ch>='0'&&ch<='9')//纯数字
        {
            a--;
            do
            {
                token[n++]=sum[a++];
                ch=sum[a];
            }while(ch>='0'&&ch<='9');
            zbm=11;
            return;
        }
        else
        {
            switch(ch)
            {
            case '+':zbm=13;token[0]=ch;break;
            case '-':zbm=14;token[0]=ch;break;
            case '*':zbm=15;token[0]=ch;break;
            case '/':zbm=16;token[0]=ch;break;
            case ':':zbm=17;token[0]=ch;ch=sum[a++];
                if(ch=='='){
                token[1]=ch;
                zbm++;
                }
                else a--;
                break;
            case '<':zbm=20;token[0]=ch;ch=sum[a++];
                if(ch=='='){
                            token[1]=ch;
                            zbm++;
                }
                else if(ch=='>'){
                                 token[1]=ch;
                                 zbm=zbm+2;
                }
                else a--;
                break;
            case '>':zbm=23;token[0]=ch;ch=sum[a++];
                if(ch=='='){
                            token[1]=ch;
                            zbm++;
                }
                else a--;
                break;
            case '=':zbm=25;token[0]=ch;break;
            case ';':zbm=26;token[0]=ch;break;
            case '(':zbm=27;token[0]=ch;break;
            case ')':zbm=28;token[0]=ch;break;
            case '#':zbm=0;token[0]=ch;break;
            default:break;
            }
        }
    }

    运行结果:

  • 相关阅读:
    JDBC原理及常见错误分析
    response,session,cookie
    Activity LifeCycle (安卓应用的运行机制)
    简单的接口取数据渲染到图表
    图表里面双重下拉框进行判断
    用js方式取得接口里面json数据的key和value值
    一个div多个图表共用一个图例
    一个页面多图表展示(四个div的方式)
    vue组件之子组件和父组件
    根据判断对颜色进行改变
  • 原文地址:https://www.cnblogs.com/FZW1874402927/p/5942478.html
Copyright © 2011-2022 走看看