zoukankan      html  css  js  c++  java
  • 编译原理词法分析程序C语言版

    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    char KeyWord[20][100]={
        "begin",
        "end",
        "if",
        "while",
        "var",
        "procedure",
        "else",
        "for",
        "do",
        "int",
        "read",
        "write"
    };
    char yunsuanfu[]="+-*/<>%=";
    char fenjiefu[]=",;(){}:";
    int main()
    {
        char test[]="var a=10;\nvar b,c;\nprocedure p; \n\tbegin\n\t\tc=a+b\n\tend\n";
        int len_yunsuanfu=strlen(yunsuanfu);
        int len_fenjiefu=strlen(fenjiefu);
        puts(test);
        int length=strlen(test),i,j,k;
        for(i=0;i<length;i++)
        {
            if(test[i]==' '||test[i]=='\n'||test[i]=='\t')
                continue;
            int tag=0;
            for(j=0;j<len_fenjiefu;j++)
            {
                if(fenjiefu    [j]==test[i]){
                    printf("分界符\t%c\n",test[i]);
                    tag=1;
                    break;
                }
            }
            if(tag==1)
                continue;
            tag=0;
            for(j=0;j<len_yunsuanfu;j++)
            {
                if(yunsuanfu[j]==test[i]){
                    printf("运算符\t%c\n",test[i]);
                    tag=1;
                    break;
                }
            }
            if(tag==1)
                continue;
            if(test[i]>='0'&&test[i]<='9')
            {
                printf("数字\t");
                while(test[i]>='0'&&test[i]<='9')
                {
                    printf("%c",test[i]);
                    i++;
                }
                printf("\n");
                continue;
            }
            char temp[100];
            j=0;
            while(test[i]>='0'&&test[i]<='9'||test[i]>='a'&&test[i]<='z'||test[i]>='A'&&test[i]<='Z'||test[i]=='_')
            {
                temp[j++]=test[i];
                i++;
            }
            i--;
            temp[j++]='\0';
            tag=0;
            for(j=0;j<20;j++){
                if(strcmp(temp,KeyWord[j])==0)
                {
                    tag=1;
                    printf("关键字\t%s\n",temp);
                    break;
                }
            }
            if(tag==0)
                printf("标识符\t%s\n",temp);
        }
    }
  • 相关阅读:
    upload.go
    heartbeat.go
    delete.go
    get.go
    handler.go
    uuid.go
    kingpin_parser.go
    disk.go
    logrus_hook.go
    反连接NOT EXISTS子查询中有or 谓词连接条件SQL优化一例
  • 原文地址:https://www.cnblogs.com/ma6174/p/2407364.html
Copyright © 2011-2022 走看看