码迷,mamicode.com
首页 > 其他好文 > 详细

0916 编程实验一 词法分析程序

时间:2015-09-21 14:02:39      阅读:138      评论:0      收藏:0      [点我收藏+]

标签:

#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]=\0; 
ch=prog[p++]; 
m=0;  
while((ch== )||(ch==\n))
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++]=\0; 
} 


main()
{
 p=0;
 printf("\nplease input a string(end with #):\n");
 do{
  scanf("%c",&ch);
  prog[p++]=ch;

}while(ch!=#); 
 
p=0; 
 
do{  
   scaner(); 
   switch(syn)  
   {case 11:printf("( %-10d%5d )\n",sum,syn); 
         break;  
    case -1:printf("you have input a wrong string\n"); 
          getch(); 
          break;
    default: printf("( %-10s%5d )\n",token,syn); 
          break; 
   }  
           }while(syn!=0); 
           getch(); 
}

技术分享

0916 编程实验一 词法分析程序

标签:

原文地址:http://www.cnblogs.com/950525kxj/p/4825849.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!