zoukankan      html  css  js  c++  java
  • 0916 编程实验一 词法分析程序

    #include<stdio.h>
    #include<string.h>
    #include <conio.h>
    #include <ctype.h>
    char prog[80],token[8],ch;
    
    int p,syn,m,n,sum;
    char *rwtab[6]={"begin","if","then","while","do","end"};
     
      
    scaner() 
    { 
    sum=0;  
    for(m=0;m<8;m++)
    token[m]=''; 
    ch=prog[p++]; 
    m=0;  
    while((ch==' ')||(ch=='
    '))
    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=21;  
           token[m++]=ch; }
         else 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 '+':syn=13;  
             token[m++]=ch; 
             break; 
    case '-':syn=14;  
             token[m++]=ch; 
             break;
    case '*': syn=15;  
              token[m++]=ch; 
              break;
    case '/': syn=16;  
              token[m++]=ch; 
              break;
    case ':': token[m++]=ch;
              ch=prog[p++]; 
              if(ch=='=') { 
             syn=18;  
             token[m++]=ch; }  
         else  { 
             syn=17;  
             p--; }  
          break; 
    case '=':syn=25;  
             token[m++]=ch;
             break; 
    case '(': syn=27;   
              token[m++]=ch; 
              break; 
    case ')': syn=28;  
              token[m++]=ch; 
              break; 
    case ';': syn=26;  
              token[m++]=ch; 
              break; 
    case '#': syn=0;  
              token[m++]=ch; 
              break; 
    default: syn=-1; 
             break; 
    }  
    token[m++]=''; 
    } 
    
    
    main()
    {
     p=0;
     printf("
    please input a string(end with #):
    ");
     do{
      scanf("%c",&ch);
      prog[p++]=ch;
    
    }while(ch!='#'); 
     
    p=0; 
     
    do{  
       scaner(); 
       switch(syn)  
       {case 11:printf("( %-10d%5d )
    ",sum,syn); 
             break;  
        case -1:printf("you have input a wrong string
    "); 
              getch(); 
              break;
        default: printf("( %-10s%5d )
    ",token,syn); 
              break; 
       }  
               }while(syn!=0); 
               getch(); 
    }

  • 相关阅读:
    HTTP状态码及其含义
    c和python解决各种字符串反转问题的不同思路
    Python找出一串字符中出现最多的字符
    3个基本算法的实现技巧
    一种字符串搜索方法
    数据库开发经典总结
    apt、dpkg参数整理
    Python集合(set)类型的操作
    Python和Decorator(装饰器)模式
    Git使用基础
  • 原文地址:https://www.cnblogs.com/950525kxj/p/4825849.html
Copyright © 2011-2022 走看看