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

    #include<stdio.h>
    #include<stdalign.h>
    #define M 100
    main()
    {
        int i,i1=0,i2=0,j;
        char n[M],n1[M],n2[M];
        printf("请输入一串数据:(数字,字母,界符,运行符)
    ");
        gets(n);
          for(i=0;i<n;i++)
        {
            j=(int)n[i];
            n1[i]=n[M];
            if((j>=65)&&(j<=90)||(j>=90)&&(j<=122))
            {
                n1[i1]=n[i];
                i1++;
            }
            else{
                 while(i1!=0)
                {
                   n1[i1]='';
                   if(  strcmp(n1,"auto")==0||strcmp(n1,"int")==0||strcmp(n1,"double")==0||strcmp(n1,"long")==0
                      ||strcmp(n1,"char")==0||strcmp(n1,"float")==0||strcmp(n1,"short")==0||strcmp(n1,"signed")==0
                      ||strcmp(n1,"unsigned")==0||strcmp(n1,"struct")==0||strcmp(n1,"union")==0||strcmp(n1,"enum")==0
                      ||strcmp(n1,"static")==0||strcmp(n1,"switch")==0||strcmp(n1,"case")==0||strcmp(n1,"default")==0
                      ||strcmp(n1,"break")==0||strcmp(n1,"register")==0||strcmp(n1,"const")==0||strcmp(n1,"volatile")==0
                      ||strcmp(n1,"typedef")==0||strcmp(n1,"extern")==0||strcmp(n1,"return")==0||strcmp(n1,"void")==0
                      ||strcmp(n1,"continue")==0||strcmp(n1,"do")==0||strcmp(n1,"while ")==0||strcmp(n1,"if")==0
                      ||strcmp(n1,"else")==0||strcmp(n1,"for")==0||strcmp(n1,"goto")==0||strcmp(n1,"sizeof")==0)
                 {
                   n1[i1]=')';
                   printf("(1,");
                   puts(n1);
                   i1=0;
                   memset(n1,0,100);
                 }
                  else
                 {
                   n1[i1]=')';
                   printf("(10,");
                   puts(n1);
                   i1=0;
                   memset(n1,0,100);
                 }
               }
    
              if((j>48)&& (j<57))
             {
                 n2[i2]=n[i];
                 i2++;
             }
             else{
                   if((int) n[i-1]>48 && (int) n[i-1]<57)
                   {
                   n2[i2]=')';
                   printf("(11,");
                   puts(n2);
                   i2=0;
                   memset(n2,0,100);
                   }
             if(j==42||j==43||j==45||j==47||j==61||j==62||j==60)
            {
    
                if((int) n[i+1]==61)
                {
                 switch (j)
                 {
                   case 60:
                          printf("(21,%c=)",n[i]);
                          printf("
    ");
                          break ;
                   case 62:
                          printf("(24,%c=)",n[i]);
                          printf("
    ");
                          break;
                  default :
                          printf("(非法字符,%c)",n[i]);
                          printf("
    ");
                          break;
                 }
                 i=i+1;
                }
                else
                {
                 switch (j)
                 {
                   case 42:
                          printf("(15,%c)",n[i]);
                          printf("
    ");
                          break ;
                   case 43:
                          printf("(13,%c)",n[i]);
                          printf("
    ");
                          break;
                   case 45:
                          printf("(14,%c)",n[i]);
                          printf("
    ");
                          break;
                   case 60:
                          printf("(20,%c)",n[i]);
                          printf("
    ");
                          break;
    
                   case 61:
                          printf("(25,%c)",n[i]);
                          printf("
    ");
                          break;
                   case 62:
                          printf("(24,%c)",n[i]);
                          printf("
    ");
                          break;
                   default :
                          printf("(非法字符,%c)",n[i]);
                          printf("
    ");
                          break;
                 }
                }
            }
            else if(j==32)
            {
                 printf("
    ");
            }
            else if(j==33||j==44||j==46||j==58||j==59||j==63||j==44)
            {
                switch (j)
                 {
                   case 59:
                          printf("(26,%c)",n[i]);
                          printf("
    ");
                          break ;
                   default :
                          printf("(非法字符,%c)",n[i]);
                          printf("
    ");
                          break;
                 }
            }
            else if(j==34||j==35||j==38||j==39||j==40||j==41||j==123||j==124||j==125||j==126)
            {
                switch (j)
                 {
                   case 40:
                          printf("(27,%c)",n[i]);
                          printf("
    ");
                          break ;
                   case 41:
                          printf("(28,%c)",n[i]);
                          printf("
    ");
                          break ;
                   case 35:
                          printf("(0,%c)",n[i]);
                          printf("
    ");
                          break ;
                   default :
                          printf("(非法字符,%c)",n[i]);
                          printf("
    ");
                          break;
                 }
            }
            else
            {
                break;
            }
         }
        }
      }
    }
  • 相关阅读:
    C语言 百炼成钢1
    C语言 位运算
    GPS nmealib学习 问题
    c语言 GPS nmealib学习笔记
    ubuntu 12.04 以固定 IP 地址连接网络并配置DNS
    WGS84 2 GCJ-02
    【转】地球坐标系 (WGS-84) 到火星坐标系 (GCJ-02) 的转换算法 C#
    【转】地球坐标系 (WGS-84) 到火星坐标系 (GCJ-02) 的转换算法 C语言
    nmealib-0.5.3 问题 Build Error: undefined reference to `ceil'
    ArcGIS for WPF 访问外部资源
  • 原文地址:https://www.cnblogs.com/wenjian1027/p/5979852.html
Copyright © 2011-2022 走看看