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

      1 #include <stdio.h>  
      2 #include <string.h>  
      3   
      4 char prog[80],token[8],ch;  
      5 int syn,p,m,n,sum;  
      6 char *rwtab[6]={"begin","if","then","while","do","end"};  
      7    
      8 void scaner(void);  
      9   
     10 main()  
     11 {  
     12     p=0;  
     13     printf("
     Please input the source code:
    ");  
     14       
     15     do{                                   
     16           scanf("%c",&ch);  
     17           prog[p++]=ch;  
     18     }while(ch!='#');  
     19       
     20     p=0;  
     21     do{  
     22             scaner();  
     23             switch(syn)  
     24             {  
     25                 case 11:  
     26                     printf("( %d,%d )
    ",syn,sum); 
     27                 break;  
     28                   
     29                 case -1:  
     30                     printf("you have input a wrong string
    ");  
     31                     return 0;  
     32                 break;  
     33                   
     34                 default:   
     35                 printf("( %d,%s )
    ",syn,token);  
     36                 break;  
     37             }  
     38         }while(syn!=0);  
     39          printf(" Over.
    ");
     40  }  
     41   
     42 void scaner(void)  
     43 {    
     44     sum=0;  
     45       
     46     for(m=0;m<8;m++)  
     47         token[m++]= NULL;  
     48       
     49         ch=prog[p++];  
     50         m=0;  
     51           
     52     while((ch==' ')||(ch=='
    '))  
     53         ch=prog[p++];  
     54       
     55     if(((ch<='z')&&(ch>='a'))||((ch<='Z')&&(ch>='A')))  
     56      {   
     57         while(((ch<='z')&&(ch>='a'))||((ch<='Z')&&(ch>='A'))||((ch>='0')&&(ch<='9')))  
     58         {  
     59             token[m++]=ch;  
     60             ch=prog[p++];  
     61         }  
     62           
     63         p--;  
     64         syn=10;  
     65   
     66         for(n=0;n<6;n++)  
     67         if(strcmp(token,rwtab[n])==0)  
     68         {   
     69             syn=n+1;  
     70             break;  
     71         }  
     72      }  
     73      else if((ch>='0')&&(ch<='9'))  
     74      {   
     75         while((ch>='0')&&(ch<='9'))  
     76         {  
     77             sum=sum*10+ch-'0';  
     78             ch=prog[p++];  
     79         }  
     80         p--;  
     81         syn=11;  
     82     }  
     83     else   
     84     {  
     85         switch(ch)  
     86         {  
     87         case '<':  
     88             token[m++]=ch;  
     89             ch=prog[p++];  
     90             if(ch=='=')  
     91             {   
     92                 syn=22;  
     93                 token[m++]=ch;  
     94             }  
     95             else  
     96             {    
     97                 syn=20;  
     98                 p--;  
     99             }  
    100         break;  
    101   
    102         case '>':  
    103             token[m++]=ch;  
    104             ch=prog[p++];  
    105             if(ch=='=')  
    106             {  
    107                 syn=24;  
    108                 token[m++]=ch;  
    109             }  
    110             else  
    111             {   
    112                 syn=23;  
    113                 p--;  
    114             }  
    115         break;  
    116   
    117         case '+':  
    118             token[m++]=ch;  
    119             ch=prog[p++];  
    120             if(ch=='+')  
    121             {  
    122                 syn=17;  
    123                 token[m++]=ch;  
    124             }  
    125             else  
    126             {  
    127                 syn=13;  
    128                 p--;  
    129             }  
    130         break;  
    131   
    132         case '-':  
    133             token[m++]=ch;  
    134             ch=prog[p++];  
    135             if(ch=='-')  
    136             {  
    137                 syn=29;  
    138                 token[m++]=ch;  
    139             }  
    140             else  
    141             {   
    142                 syn=14;  
    143                 p--;  
    144             }  
    145         break;  
    146   
    147         case '=':  
    148             token[m++]=ch;  
    149             ch=prog[p++];  
    150             if(ch=='=')  
    151             {  
    152                 syn=25;  
    153                 token[m++]=ch;  
    154             }  
    155             else  
    156             {  
    157                 syn=18;  
    158                 p--;  
    159             }  
    160         break;  
    161   
    162         case '*': syn=15;token[m++]=ch; break;
    163         case '/': syn=16;token[m++]=ch; break;
    164         case '(': syn=27;token[m++]=ch; break;
    165         case ')': syn=28;token[m++]=ch; break;
    166         case ';': syn=26;token[m++]=ch; break; 
    167         case '#': syn=0;token[m++]=ch; break;
    168         case ':': syn=17;token[m++]=ch; break;
    169         default: syn=-1;  break; 
    170         }  
    171     }  
    172         token[m++]='';  
    173 }

  • 相关阅读:
    Android模拟器安装程序及上传音乐并播放
    Android .classpath文件的作用
    eclipse常用快捷键
    使用Eclipse开发Android源码
    android模拟器环境选择媒体文件,解决"No media found"
    Android模拟器使用SD卡
    string.xml文件需要转译字符”’”
    播放器设计方案
    PHP文件系统文件上传
    PHP文件系统文件下载
  • 原文地址:https://www.cnblogs.com/lieson/p/4902383.html
Copyright © 2011-2022 走看看