zoukankan      html  css  js  c++  java
  • 递归下降语法分析

      1 # include <stdio.h>
      2 # include <string.h>
      3 # include <stdlib.h>
      4 int E();
      5 int G();
      6 int T();
      7 int Ss();
      8 int F();
      9 char a[52];
     10 int total=0;
     11 int i=0;
     12 int temp=1;
     13 int main()
     14 {
     15     gets(a);
     16     int f;
     17     
     18     f=E();
     19     if(f==0)
     20         return 0;
     21     if(a[i] == '#')
     22         printf("accept
    ");
     23     else
     24     {
     25         printf("error
    ");
     26         return 0;
     27     }
     28 }
     29 int E()
     30 {
     31     int f,t;
     32     printf("%d E-->TG
    ",total++);
     33     f=T();
     34     if(!f)
     35         return 0;
     36     t=G();
     37     if(!t)
     38         return 0;
     39     else
     40         return 1;
     41     
     42 }
     43 int G()
     44 {
     45     int f,t;
     46     if(a[i] == '+')
     47     {
     48         i++;
     49         printf("%d G-->+TG
    ",total++);
     50         f=T();
     51         if(!f)
     52             return 0;
     53         t=G();
     54         if(!t)
     55             return 0;
     56         else
     57             return 1;
     58     }
     59     else 
     60     {
     61         printf("%d G-->&
    ",total++);
     62         return 1;
     63     }
     64 
     65 }
     66 int T()
     67 {
     68     int f,t;
     69     printf("%d T-->FS
    ",total++);
     70     f=F();
     71     if(!f)
     72         return 0;
     73     t=Ss();
     74     if(!t)
     75         return 0;
     76     else
     77         return 1;
     78 }
     79 int Ss()
     80 {
     81     int f,t;
     82     if(a[i] == '*')
     83     {
     84         i++;
     85         printf("%d S-->*FS
    ",total++);
     86         f=F();
     87         if(!f)
     88             return 0;
     89         t=Ss();
     90         if(!t)
     91             return 0;
     92         else
     93             return 1;
     94     }
     95     else
     96     {
     97         printf("%d S-->&
    ",total++);
     98         return 1;
     99     }
    100 
    101 }
    102 int F()
    103 {
    104     int f,t;
    105     if(a[i] == '(')
    106     {
    107         i++;
    108         printf("%d F-->(E)
    ",total++);
    109         f=E();
    110         if(!f)
    111             return 0;
    112         if(a[i] == ')')
    113             i++;
    114         else
    115         {
    116             printf("error
    ");
    117             return 0;
    118         }
    119     }
    120     else if(a[i] == 'i')
    121     {
    122         i++;
    123         printf("%d F-->i
    ",total++);
    124     }
    125     return 1;
    126 }
  • 相关阅读:
    NOIP 2016 提高组 复赛 Day2T1==洛谷2822 组合数问题
    Codevs 1710 == POJ 1190 生日蛋糕 == 洛谷P1731
    [网络流24题] COGS 750 栅格网络流
    [网络流24题] COGS 运输问题1
    狂K 线段树
    Graph coloring技能树
    智能体大赛酱油记
    graph coloring学习记录
    湖北省赛酱油记
    CCCC酱油记
  • 原文地址:https://www.cnblogs.com/liun1994/p/3784051.html
Copyright © 2011-2022 走看看