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

    #include<stdio.h>

    #include<string.h>
    #include<ctype.h>
    #define M 1000
    struct key
    {
        char g[20];
    };
    typedef struct key KEY;
    int main()
    {
        KEY k[6];
        int i=0,j=0;
        char a[M],b[M];
        strcpy(k[0].g,"begin");
        strcpy(k[1].g,"if");
        strcpy(k[2].g,"then");
        strcpy(k[3].g,"while");
        strcpy(k[4].g,"do");
        strcpy(k[5].g,"end");
     
        printf("请输入源程序: ");
        gets(a);
        while(a[i]!='')
        {
            j=0;
            if((isalpha(a[i]))||(a[i]=='_'))
            {
                while((a[i]!=' ')&&(a[i]!=''))
                {
                    if((isalpha(a[i]))||(isdigit(a[i])))
                    {
                     b[j]=a[i];
                     j++;
                     i++;
                    }
                    else
                        break;
                }
                if((a[i]==' ')||(a[i]==''))
                {
                    b[j]='';
                    if(strcmp(b,k[0].g)==0)
                        printf("begin 种别码   1 ");
                    else if(strcmp(b,k[1].g)==0)
                        printf("if   种别码   2 ");
                    else if(strcmp(b,k[2].g)==0)
                        printf("then 种别码   3 ");
                    else if(strcmp(b,k[3].g)==0)
                        printf("while 种别码   4 ");
                    else if(strcmp(b,k[4].g)==0)
                        printf("do   种别码   5 ");
                    else if(strcmp(b,k[5].g)==0)
                        printf("end  种别码   6 ");
                    else
                        printf("%s  种别码   10 ",b);
                }
                else
                {
                    b[j]='';
                    printf("%s   种别码       10 ",b);
                    i--;
                }
            }
     
            else if(isdigit(a[i]))
            {
                j=0;
                while(isdigit(a[i]))
                {
                     b[j]=a[i];
                     j++;
                     i++;
                }
                b[j]='';
                printf("%s    种别码    11 ",b);
                i--;
            }
            else
            {
                switch(a[i])
                {
                case '+':
                    printf("%c   种别码   13 ",a[i]);break;
                case '-':
                    printf("%c   种别码   14 ",a[i]);break;
                case '*':
                    printf("%c   种别码   15 ",a[i]);break;
                case '/':
                    printf("%c   种别码   16 ",a[i]);break;
                case ':':
                    if(a[i+1]=='=')
                    {   printf(":=   种别码   18 ");i++;break;}
                    else
                    {   printf("%c   种别码   17 ",a[i]);break;}
                case '<':
                    if(a[i+1]=='=')
                    {   printf("<=   种别码   21 ");i++;break;}
                    if(a[i+1]=='>')
                    {   printf("<>   种别码   22 ");i++;break;}
                    else
                        printf("%c   种别码   20 ",a[i]);break;
                case '>':
                    if(a[i+1]=='=')
                    {   printf(">=   种别码   24 ");i++;break;}
                    else
                        printf("%c   种别码   23 ",a[i]);break;
                case '=':
                    printf("=    种别码    25 ");break;
                case ';':
                    printf(";   种别码    26 ");break;
                case '(':
                    printf("(   种别码   27 ");break;
                case ')':
                    printf(")   种别码   28 ");break;
                case '#':
                    printf("#   种别码   0 ");break;
                default:
                    printf("%c   语法错误! ",a[i]);break;
                }
            }
     
            i++;
        }
    }
                 
  • 相关阅读:
    5.4.3 果园里的树
    5.3.2 字母重排
    5.3.1 6174问题
    Codeforces Round #253 (Div. 2), problem: (B)【字符串匹配】
    POJ1054 枚举【STL__binary_search()_的应用】
    432B
    0x3f3f3f3f...编程中无穷大常量的设置技巧
    2014年百度之星程序设计大赛 资格赛第一题 (longlong)
    Tarjan
    Dijkstra、Dij + heap、Floyd、SPFA、 SPFA + SLF Template
  • 原文地址:https://www.cnblogs.com/xiaoyy/p/4860696.html
Copyright © 2011-2022 走看看