• 201406114257 张俊毅 词法分析


    修改了几次 最后找到方法改进 但最后在数字的处理还没修改好 例如:111 会出现(111,11)(11,11)(1,11) 还有最后一定要以#号结束

    因为后来才想到 改的位置比较大 有些地方还没处理好

    #include<stdio.h>
    find(char a[],int i);
    find2(char a[],int i);
    find3(char a[],int i);
    main()
    {
     int i=0;
     char a[100];
     gets(a);
     while (a[i]!='#'&&i<=100)
     {
      if (a[i]=='b'||a[i]=='i'||a[i]=='t'||a[i]=='w'||a[i]=='d'||a[i]=='e')
      {
      i=find(a,i);
      i++;
      }
      else
      {
       find3(a,i);
       i++;
      }
     }
     printf(" ");
    }
    find(char a[],int i)
    {
     switch (a[i])
     {
     case 'b':
      if (a[i+1]=='e'&&a[i+2]=='g'&&a[i+3]=='i'&&a[i+4]=='n')
      {
       printf("(begin,1)");
       i=i+4;return i;
      }
      else
      {i=find2(a,i);
      return i;
      }
     case 'i':
      if (a[i+1]=='f')
      {
       printf("(if,2)");
       i=i+1;
       return i;
      }
      else
      {i=find2(a,i);
      return i;
      }
     case 't':
      if (a[i+1]=='h'&&a[i+2]=='e'&&a[i+3]=='n')
      {
       printf("(then,3)");
       i=i+3;
       return i;
      }
      else
      {i=find2(a,i);
      return i;
      }
     case 'w':
      if (a[i+1]=='h'&&a[i+2]=='i'&&a[i+3]=='l'&&a[i+4]=='e')
      {
       printf("(while,4)");
       i=i+4;
       return i;
      }
      else
      {i=find2(a,i);
      return i;
      }
     case 'd':
      if (a[i+1]=='o')
      {
       printf("(do,5)");
       i=i+1;
       return i;
      }
      else
      {i=find2(a,i);
      return i;
      }
     case 'e':
      if (a[i+1]=='n'&&a[i+2]=='d')
      {
       printf("(end,6)");
       i=i+2;
       return i;
      }
      else
      {i=find2(a,i);
      return i;
      }
     
     default:
      return i;
     }
    }
    find2(char a[],int i)
    {
     printf("(");
     for (i;a[i]!=' ';i++)
       {
        printf("%c",a[i]);
       }
     printf(",10)");
      return i;
    }
    find3(char a[],int i)
    {
     switch(a[i])
     {
        case '+':
      printf("(+,13)");
      break;
     case '-':
      printf("(-,14)");
      break;
     case '*':
      printf("(*,15)");
      break;
     case '/':
      printf("(/,16)");
      break;
     case ':':
      if (a[i+1]=='=')
      {
       printf("(:=,18)");
      }
      else
      {
       printf("(:,17)");
      }
      break;
     case '<':
      if (a[i+1]=='=')
      {
       printf("(<=,21)");
      }
      else if(a[i+1]=='>')
      {
       printf("(<>,22)");
      }
      else
      {
       printf("(<,20)");
      }
      break;
     case '>':
      if (a[i+1]=='=')
      {
       printf("(>=,24)");
      }
      else
      {
       printf("(>,23)");
      }
      break;
     case '=':
      printf("(=,25)");
      break;
     case ';':
      printf("(;,26)");
      break;
     case '(':
      printf("((,27)");
      break;
     case ')':
      printf("(),28)");
      break;
     case '1':case '2':case '3':case '4':case '5':case '6':case '7':case '8':case '9':case '0':
      printf("(");
      for (i;;i++)
      {
       if (a[i]=='1'||a[i]=='2'||a[i]=='3'||a[i]=='4'||a[i]=='5'||a[i]=='6'||a[i]=='7'||a[i]=='8'||a[i]=='9'||a[i]=='0')
       {
        printf("%c",a[i]);
       }
       else
       {
        printf(",11)");
        return i;
       }
      }
     default:
      return i;
     }
     return i;
    }

  • 相关阅读:
    java smtp 发送邮件
    Java 数据库连接配置
    kettle基础操作数据同步
    Java上传文件到服务器指定位置
    Java 操作word
    Java 导出Zip文件
    Java 遍历二叉树字符串
    一款基于vue.js 和node构建个人博客项目
    CSS选择器介绍和优先级
    CSS Position属性
  • 原文地址:https://www.cnblogs.com/Mrwhite/p/4824402.html
Copyright © 2020-2023  润新知