分享

递归下降分析法的简单例子的c语言实现

 quasiceo 2013-12-10
分类: 编译原理 2012-04-08 20:23 595人阅读 评论(0) 收藏 举报

我们举的简单例子是

G[s]:

Sa || (T)

TT, S | S

转化为LL1文法

S →a || (T)
T →ST'
T'→,ST'| ε
c语言代码实现
 
  1. #include<stdio.h>  
  2. char scaner(char*input,int* p);  
  3. void S(char*input,int* p);  
  4. void T(char*input,int* p);  
  5. void T1(char*input,int* p);  
  6. void error();  
  7. int sym=0;  
  8. int main()  
  9. {  
  10.  int p=0;  
  11.  char input[200]={0};  
  12.   
  13.  printf("请输入你要识别的单词\n");  
  14.  printf("单词只能由 ( ) a ^ , 组成,且单词必须以$#结尾\n");  
  15.  scanf("%[^#]s",input);  
  16.  printf("the word you input is  : %s\n",input);  
  17.  sym=scaner(input,&p);  
  18.  S(input,&p);  
  19.    
  20.  if(sym=='$')  
  21.       printf("sucess\n");  
  22.  else   
  23.       printf("fail");  
  24.         
  25. do   
  26. {  
  27.    ;   }while(1);        
  28.       
  29.  return 0;      
  30. }  
  31. char scaner(char*input,int *p)  
  32. {  
  33.  char temp=input[*p];  
  34.   (*p)++;  
  35.  return temp;       
  36. }  
  37. void S(char*input,int* p)  
  38. {   
  39.  if(sym=='a'||sym=='^')  
  40.        sym=scaner(input,p);  
  41.  else if(sym=='(')  
  42.       {  
  43.        sym=scaner(input,p);  
  44.        T(input,p);  
  45.        if(sym==')')  
  46.               sym=scaner(input,p);  
  47.        else   
  48.               error();       
  49.       }  
  50.  return ;  
  51.  }  
  52.  void T(char*input,int* p)  
  53.  {  
  54.  S(input,p);  
  55.  T1(input,p);  
  56.  return ;       
  57.  }  
  58.  void T1(char*input,int* p)  
  59.  {  
  60.   if(sym==','){  
  61.        sym=scaner(input,p);  
  62.        S(input,p);  
  63.        T1(input,p);}   
  64.   else if(sym!=')')  
  65.        error();  
  66.              
  67.  }  
  68.  void error()  
  69.  {  
  70.         printf("error!!!");  
  71.         return ;  
  72.         }  
  73.           


 

更多 0

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多