• 0916词法分析


      1 #include<stdio.h>
      2 #include<string.h>
      3 int i,s=1;
      4 
      5 //判断是否数字
      6 void number(char a[])
      7 {
      8     char b[100];
      9     int m,k=0,t;
     10     m=i;
     11     while(a[m]>='0' && a[m]<='9')  
     12     {
     13         b[k]=a[m];   //用数组b存放数组a中的数字
     14         k++;
     15         m++;
     16     }
     17     i=m-1;
     18     printf("(11,");
     19     for(t=0;t<k;t++)
     20         printf("%c",b[t]);
     21     printf(")
    ");
     22 }
     23 
     24 //检索关键字表格
     25 void keyword(char a[])
     26 {
     27     int k=0,m,flag=0,t;
     28     char b[100];
     29     char *key[6]={"begin","if","then","while","do","end"};
     30     m=i;
     31     while((a[m]>='a'&&a[m]<='z')||(a[m]>='A'&&a[m]<='Z')) //用数组b存放数组a中的字母
     32     {
     33         b[k]=a[m];   
     34         k++;
     35         m++;
     36         b[k]='';
     37     }
     38     i=m-1;
     39     for(t=0;t<6;t++)
     40     {
     41         if(strcmp(b,key[t])==0)  //将数组b与关键字进行比较
     42         {
     43             printf("(%d,%s)
    ",t+1,key[t]);  //输出关键字
     44             flag=1;
     45         }
     46     }
     47     if(flag==0)
     48     {
     49         printf("(?,%s)
    ",b);   //输出标识符
     50     }
     51 }
     52 
     53 //词法扫描函数
     54 void Fenxi(char ch,char b)
     55 {  
     56      switch(ch)
     57      {
     58         case '=':
     59             if(b==':')
     60                 printf("(18,:=)
    ");
     61             else if(b=='<')
     62                 printf("(21,<=)
    ");
     63             else if(b=='>')
     64                 printf("(24,>=)
    ");
     65             else
     66                 printf("(25,=)
    ");
     67             i++;
     68             break;
     69         case '+':
     70             printf("(13,+)
    ");break;
     71         case '-':
     72             printf("(14,-)
    ");break;
     73         case '*':
     74             printf("(15,*)
    ");break;
     75         case '/':
     76             printf("(16,/)
    ");break;
     77         case'(':
     78             printf("(27,()
    ");break;
     79         case')':
     80             printf("(28,))
    ");break;
     81         case ',':
     82             printf("(32,,)
    ");break;
     83         case ':':
     84             if(b=='=')
     85                 printf("(18,:=)
    ");
     86             else
     87                 printf("(17,:)
    ");
     88             i++;
     89             break;
     90         case ';':
     91             printf("(34,;)
    ");break;
     92         case '>':
     93             if(b=='=')
     94                 printf("(24,>=)
    ");
     95             else
     96             {
     97                 i=i-2;
     98                 if(b=='<')
     99                     printf("(22,<>)
    ");
    100                 else
    101                     printf("(23,>)
    ");
    102             }
    103             i++;
    104             break;
    105         case '<':
    106             if(b=='=')
    107                 printf("(21,<=)
    ");
    108             else if(b=='>')
    109                 printf("(22,<>)
    ");
    110             else
    111                 printf("(20,<)
    ");
    112             i++;
    113             break;
    114         default:
    115             s=0;
    116             break;
    117     }
    118 }
    119 
    120 main()
    121 {
    122     char a[100];
    123     printf("请输入源程序(以#结束):
    ");
    124     scanf("%[^#]s",&a);
    125     printf("
    输入要分析的源程序为:
    ");
    126     printf("%s",a);
    127     printf("
    ");
    128     printf("
    分析结果为:
    ");
    129     i=0;
    130     while(i<100&&a[i]!='#')
    131     {
    132         if((a[i]>=65&&a[i]<=90)||(a[i]>=97&&a[i]<=122))   
    133             keyword(a);
    134         else if(a[i]>=48&&a[i]<=57)
    135             number(a);
    136         else
    137             Fenxi(a[i],a[i+1]);
    138         i++;
    139     }
    140     printf("
    ");
    141 }

  • 相关阅读:
    cubic-bezier贝塞尔曲线css3动画工具
    css媒体查询
    this call和apply
    容易混淆的url src href
    你不知道的css中的expression
    不同浏览器对document.documentElement和document.body的scrollheight ,scrollTop,clientHeight以及判断滚动条是否滚动到页面最底部 【转载】
    jquery动画遮罩
    手机页面中的meta标签
    Knowledge Point 20180305 机器数转换与进制转换
    Knowledge Point 20180305 数据在计算机中的表示
  • 原文地址:https://www.cnblogs.com/blueYE00/p/4865613.html
Copyright © 2020-2023  润新知