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

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    char prog[80],token[8],ch;
    int syn,p,m,n,sum;
    char *rwtab[6]={"begin","if","then","while","do","end"};
     scaner();
    main()
    {p=0;
     printf("\n please input a string(end with '#'):/n");
     do{
        scanf("%c",&ch);
        prog[p++]=ch;
        }while(ch!='#');
     p=0;
     do{
        scaner();
        switch(syn)
         {case 11:printf("( %-10d%5d )\n",sum,syn);
              break;
          case -1:printf("you have input a wrong string\n");
              getchar();
              exit(0);
          default: printf("( %-10s%5d )\n",token,syn);
              break;
          }
        }while(syn!=0);
        getchar();
     }
     
     scaner()
     {  sum=0;
        for(m=0;m<8;m++)token[m++]=NULL;
        ch=prog[p++];
        m=0;
        while((ch==' ')||(ch=='\n'))ch=prog[p++];
        if(((ch<='z')&&(ch>='a'))||((ch<='Z')&&(ch>='A')))
          { while(((ch<='z')&&(ch>='a'))||((ch<='Z')&&(ch>='A'))||((ch>='0')&&(ch<='9')))
          {token[m++]=ch;
           ch=prog[p++];
          }
          p--;
          syn=10;
          for(n=0;n<6;n++)
        if(strcmp(token,rwtab[n])==0)
           { syn=n+1;
             break;
           }
          }
        else if((ch>='0')&&(ch<='9'))
          { while((ch>='0')&&(ch<='9'))
        { sum=sum*10+ch-'0';
          ch=prog[p++];
        }
        p--;
        syn=11;
          }
        else switch(ch)
        { case '<':token[m++]=ch;
              ch=prog[p++];
               if(ch=='=')
                {  syn=22;
                   token[m++]=ch;
                }
              else
                {  syn=20;
                   p--;
                }
              break;
         case '>':token[m++]=ch;
              ch=prog[p++];
              if(ch=='=')
                { syn=24;
                  token[m++]=ch;
                }
              else
                { syn=23;
                  p--;
                }
              break;
         case '+': token[m++]=ch;
              ch=prog[p++];
              if(ch=='+')
                { syn=17;
                  token[m++]=ch;
                }
              else
                { syn=13;
                  p--;
                }
              break;
     
         case '-':token[m++]=ch;
              ch=prog[p++];
              if(ch=='-')
                { syn=29;
                  token[m++]=ch;
                }
              else
                { syn=14;
                  p--;
                }
              break;
     
         case '!':ch=prog[p++];
              if(ch=='=')
               { syn=21;
                 token[m++]=ch;
               }
              else
              { syn=31;
                 p--;
              }
              break;
     
         case '=':token[m++]=ch;
              ch=prog[p++];
              if(ch=='=')
                { syn=25;
                  token[m++]=ch;
                }
              else
                { syn=18;
                  p--;
                }
              break;
         case '*': syn=15;
               token[m++]=ch;
               break;
         case '/': syn=16;
               token[m++]=ch;
               break;
         case '(': syn=27;
               token[m++]=ch;
               break;
         case ')': syn=28;
               token[m++]=ch;
               break;
         case '{': syn=5;
               token[m++]=ch;
               break;
         case '}': syn=6;
               token[m++]=ch;
               break;
         case ';': syn=26;
              token[m++]=ch;
              break;
         case '\"': syn=30;
               token[m++]=ch;
               break;
         case '#': syn=0;
               token[m++]=ch;
               break;
         case ':':syn=17;
               token[m++]=ch;
               break;
        default: syn=-1;
             break;
           }
        token[m++]='\0';
        }
  • 相关阅读:
    Oracle 基本命令
    一个完整的创建用户,创建表空间,授权建表过程
    jQueryMobile之Popup
    data-theme 几种值的样式
    jQueryMobile之listview
    jQueryMobile之弹出对话框
    android EditText内嵌图片
    css 盒子模型
    kms可用激活服务器地址|kms可用激活服务器分享
    本地配置DNS服务器(MAC版)
  • 原文地址:https://www.cnblogs.com/AAAAAAAA/p/5925045.html
Copyright © 2011-2022 走看看