• 词法分析程序 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;
            }
        }
    }

    运行结果:

  • 相关阅读:
    ML .NET 二手车价格预测之评估(三)
    ML .NET 二手车价格预测之再次训练与参数调整(二)
    C# 转换枚举为字典
    C# 获得调用者信息
    ML .NET 二手车价格预测(一)
    lock与Monitor
    长赢指数投资分析01全市场估值 明
    长赢指数投资分析02宽基和行业估值图 明
    达梦数据库自动化脚本安装
    欧几里得算法(又称辗转相除法)
  • 原文地址:https://www.cnblogs.com/FZW1874402927/p/5942478.html
Copyright © 2020-2023  润新知