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);
        }
    }
  • 相关阅读:
    appcompat_v7 esvalues-v21 hemes_base.xml:158: error: Error: No resource
    Eclipse主题更换方法
    为什么一个RadioGroup增加子元素,循环不错误,不循环就错位
    关于RelativeLayout设置垂直居中对齐不起作用的问题
    Android 自定义 radiobutton
    thinkpad alert键一直处于按着的状态
    自定义RadioGrop,支持添加包裹着的RadioButton
    LyaoutParameters作用
    Java开发经验
    文章标题
  • 原文地址:https://www.cnblogs.com/ma6174/p/2407364.html
Copyright © 2011-2022 走看看