• 0916 编译原理第二次上机作业


    #include <stdio.h>                 

    #include <string.h>               /*定义字符串库函数*/

    #include <conio.h>                  /*提供有关屏幕窗口操作函数*/

    #include <ctype.h>                  /*分类函数*/

    char prog[80]={''},

         token[8];                     /*存放构成单词符号的字符串*/

    char ch;

    int syn,                           /*存放单词字符的种别码*/

          n,

        sum,                           /*存放整数型单词*/

        m,p;                           /*p是缓冲区prog的指针,m是token的指针*/

    char *rwtab[6]={"begin","if","then","while","do","end"};

    void scaner(){

        m=0;

        sum=0;

        for(n=0;n<8;n++)

            token[n]='';

        ch=prog[p++];

        while(ch==' ')

            ch=prog[p++];

        if(isalpha(ch))    /*ch为字母字符*/{

            while(isalpha(ch)||isdigit(ch))    /*ch 为字母字符或者数字字符*/{

               token[m++]=ch;

               ch=prog[p++];}

            token[m++]='';

            ch=prog[p--];

            syn=10;

            for(n=0;n<6;n++)

                if(strcmp(token,rwtab[n])==0)    /*字符串的比较*/{

                    syn=n+1;

                    break;}}

        else

            if(isdigit(ch))    /*ch是数字字符*/{

                while(isdigit(ch))    /*ch是数字字符*/{

                    sum=sum*10+ch-'0';

                    ch=prog[p++];}

                ch=prog[p--];

                syn=11;}

            else

                switch(ch){

                    case'<':m=0;token[m++]=ch;ch=prog[p++];

                            if(ch=='>'){

                                syn=21;

                                token[m++]=ch;}

                            else if(ch=='='){

                                syn=22;

                                token[m++]=ch;}

                                else{

                                     syn=20;

                                     ch=prog[p--];}

                            break;

                    case'>':m=0;token[m++]=ch;ch=prog[p++];

                            if(ch=='='){

                                syn=24;

                                token[m++]=ch;}

                            else{

                                syn=23;

                                ch=prog[p--];}

                            break;

                 case':':m=0;token[m++]=ch;ch=prog[p++];

                         if(ch=='='){

                             syn=18;

                             token[m++]=ch;}

                         else{

                             syn=17;

                             ch=prog[p--];}

                         break;

                 case'+':syn=13;token[0]=ch;break;

                 case'-':syn=14;token[0]=ch;break;

                 case'*':syn=15;token[0]=ch;break;

                 case'/':syn=16;token[0]=ch;break;

                 case'=':syn=25;token[0]=ch;break;

                 case';':syn=26;token[0]=ch;break;

                 case'(':syn=27;token[0]=ch;break;

                 case')':syn=28;token[0]=ch;break;

                 case'#':syn=0;token[0]=ch;break;

                 default:syn=-1;}}

    main()

    {

        printf(" The significance of the figures: "

               "1.figures 1 to 6 said Keyword "

               "2.figures 10 and 11 said Other indicators "

               "3.figures 13 to 28 said Operators ");

        

    p=0;

        printf(" please input string: ");

        do {

               ch=getchar();

               prog[p++]=ch;

           }while(ch!='#');

         

    p=0;

        do{

            scaner();

            switch(syn){

                case 11: printf("(%d,%d) ",syn,sum);break;

                case -1: printf("  ERROR; ");break;

                default: printf("(%d,%s) ",syn,token);

    }

         }while(syn!=0);

        getch();

    }

  • 相关阅读:
    Java Thread 源码
    新的篇章,新的开始,寄没有的希望于未来。
    命名的常用关键字
    通俗易懂的TCP三次握手
    Java多态
    servlet容器工作顺序
    IOC思想
    Spring MVC工作流程
    一对一,一对多,多对多
    JDBC的步骤
  • 原文地址:https://www.cnblogs.com/alfredzhu/p/4826929.html
Copyright © 2020-2023  润新知