设为首页收藏本站|繁體中文 快速切换版块

 找回密码
 立即加入
搜索
查看: 1251|回复: 3

递归下降语法分析程序

[复制链接]
  • TA的每日心情
    慵懒
    2016-4-21 12:07
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    累计签到:3 天
    连续签到:1 天
    发表于 2010-4-27 13:28:40 | 显示全部楼层 |阅读模式

    马上加入,结交更多好友,共享更多资料,让你轻松玩转电力研学社区!

    您需要 登录 才可以下载或查看,没有账号?立即加入

    ×
    属于编译的,内层的东西了 呵呵1 i' S9 M8 v3 C# Y) k5 v0 E

    8 m0 _3 z) @4 G0 ^2 u# b6 R* u文法G[E]
    ' e$ z4 [9 ]6 EE –> E + T | T
    6 u# C4 n/ S* ?T –> T + F | F0 G/ j& A/ P% S: U$ B
    F –> i | (E)
    1 j2 r! Q8 z: S/ M! i4 A, f7 ]- W" t& r/ F& a
    消除左递归
    + i7 W0 U: i, W0 c# n; S; D+ A  ]E –> TE’
    8 d0 N( N2 I5 H$ B/ QE’-> +TE’4 B8 E" v& s, X  ^$ X, d8 ?
    E’-> ε: d0 R1 G- Q8 C. L
    T –> FT’& a8 l3 |9 W- x# Y- h
    T’–> *FT’
    ' w: x' ~6 D. Y3 R2 ^3 v0 HT’-> ε
    + ?1 N+ a1 u) i* K1 tF -> i|(E)5 N# H! G* L5 {  u4 i
    3 Z) k, `$ j# t: N/ T4 g: p0 v7 S
    编码实现! O3 E3 e6 r/ |9 F# c7 t
    #include<iostream>
    : ~& I5 W$ E7 E' C5 lusing namespace std;; n% f. U" \6 \6 k4 k; f
    9 B9 V5 V2 i# \' t2 d
    void E();
    # Z( c! ]% W. S- t' f! Dvoid E1();1 u* U0 J, W0 H$ k& E
    void T();
    + @8 r: F* j* h5 O, p' a5 Qvoid T1();& }% v, |+ c& L) \' D+ J
    void F();
    7 @+ s, u! C- h4 G1 @
    + l$ z9 e* p/ d2 N- {char ReadToken();; v- W" s* t3 ?/ @% }/ \  {
    bool Match(char a);
    # B. d! X6 }% ]1 R/ n( f- X2 rvoid IsSuccess();
    7 H6 `/ V$ z* D) j$ e- p
    " ?+ J1 |" B/ q: \char token;
    6 J: y2 ^1 e  ^1 P8 v" e0 Dint cur = 0; // 当前字符索引
    * m3 R  l- A4 B  I* tchar *str = "i+i*i+(i*i)#"; // 语句
    % h0 b- `! V0 O8 ?; l* Y- ?; b0 P; l% _+ u1 w( l% r
    void main()
    / d1 W+ m- z. I1 e{0 K( t1 [* Q8 C
        ReadToken();
    - U$ K$ K! S9 m6 Q   if(!Match('#'))
    & [1 F% f4 h( K  a9 F      E();) Q4 K6 F& L7 S
    }7 e2 B& k* b, E
    void E()* |( s  Y8 o, n3 x5 i- z
    {( t# V0 o- q; r. T
       T();8 m5 ^$ F1 g4 e
       E1();
    9 u9 |. p& Q/ G. r/ x}
    . v9 p  I5 i" j2 ]) lvoid T()3 {; p  J, a! R! r) Y6 D
    {* B& [6 k4 {" ?: c8 h) e
       F();
    + n; ^: c2 r# M) O; {% {% C   T1();
    % S/ M/ @8 N( u2 T$ Y. N* e}
    7 f/ p( z0 G+ E! l& |  y8 Lvoid E1()
    / _; m) ?6 k4 M  q) G6 I{
    / u: e4 d. E, c7 N4 V   if(Match('+'))
    % u% o& b6 m5 U: x. ?  D   {7 t4 d/ J  P6 T# g
          ReadToken();
    2 x' t3 R( x- E) a. g      IsSuccess();
    1 r8 @1 r4 e( `% z, u& d      T();
    3 |$ T5 y+ s( W# ?* H: G; Q8 p0 i' m; E      E1();
    & @* P3 _2 E6 ^7 s1 E   }
    3 Q  W" H; p' B3 [& ]}9 {  ?: x$ O+ D5 h9 @" S
    void T1()
    6 i7 e9 k# Y' U$ W{  w$ d8 H" n( L' U: O
       if(Match('*'))
    9 P  s: E" m* H6 W8 ]6 v   {7 l$ i( ~  t& B; i6 u' i/ \7 M
          ReadToken();
    ! ]4 ], f: w) P3 ^% y2 f6 Q      IsSuccess();
    ! }2 g' K3 K' _3 _      F();
    5 d2 ^( o( J8 A8 ]      T1();
    3 e9 C+ n8 H- m* T   }
    . I; L5 Q- H9 ~4 U% s% t}
    ) I# B1 Y& m" r- R3 Bvoid F()6 ^' i8 O) u1 h, d
    {! T; [) i3 z0 }: r; g$ L
       if(Match('('))$ q. H+ K( {: a# o8 F' @( x; m9 J
       {& \& X% U) Q6 ]) [: H+ l
          ReadToken();0 O1 B# a3 ~0 x5 i. }
          IsSuccess();
    # U* ?% f# B0 e9 H5 y      E();
    6 t- T( k0 Z0 V" _      if(Match(')'))8 q$ w+ k2 y9 \. d# ?/ k
          {5 B- _* l5 P/ q7 b$ q. j
            ReadToken();  l3 D/ u# K! ~. t, G7 h7 |
            IsSuccess();% M* X$ w) I$ U
          }% \: w$ Q- x: Z2 R' y" \
          else
    , l% t0 f3 a. K/ \( [1 P* k9 \: N      {3 d) ?6 B+ F: [$ K
            cout << "error" << endl;
    * V8 b+ }' u9 {& [  u( [      }6 L% x% f$ p% Z% X& o1 d
       }
    # @7 E! f. J# m9 \* x   else if(Match('i'))+ W" h1 B) u" k* a5 p( h
       {
    9 q, z6 e( `. q- C5 G! G# ?      ReadToken();
    3 _9 E4 s6 Z) z6 e* A6 d! \1 H      IsSuccess();& q# \' }# |7 v  U8 ?
       }
    9 a, W: L+ X) {$ ~  w+ }, l! ^) r6 O$ y   else if(Match('#'))- u# q/ F3 G5 y' S/ f2 r. _, I# E/ D
       {
    ! {  a- }2 V2 H! B) {/ F      cout << "success" << endl;+ E4 r: N# ?# X" R
       }
    7 X9 x! Z) w! J   else! J7 f- ^3 X( x; Y; G
       {
    + K" o  }" g7 H, x3 |+ e       cout << "error" << endl;5 P/ ]& L8 _0 x" U1 ^
       }
    - f! @* N* l/ K5 f4 @}
    ( }/ B' d. d8 n- ~) R. Fchar ReadToken()
    0 n9 h9 z2 a7 }, t. F{8 t2 a4 S$ J2 U0 L3 p1 D7 J- k
       return token = str[cur++];
    2 a0 u0 ~( g: J1 t; L/ @) i: Q) Y}% F9 i2 b3 b5 j( @5 N
    bool Match(char ch)
    $ D$ k8 e( O6 A{
    * Q5 L5 s. _0 ^9 q. [   if(token == ch)" g# C* r6 M% a# V  }1 S6 N
          return true;
    % D2 S  o1 ~3 j- D   return false;8 }3 r. u8 `5 d3 U- h' ~! j; x/ {( b
    }( T0 v' Z3 P" M- ]* D
    void IsSuccess()5 i5 p4 h7 L% c: D4 V' h3 k
    {: g1 x' N& W, @% n
       if(Match('#'))7 ]: s4 C/ `- I
       {. X7 h' X9 m- v: }8 Q+ b* y
          cout << "success!" << endl;5 T0 S' g5 l$ m* g2 M9 k
          exit(0);( ^+ `; A; i' t
       }" N+ b' `. n$ G& m4 d5 T
    }
    "真诚赞赏,手留余香"
    还没有人打赏,支持一下
    楼主热帖
    帖文化:【文明发帖 和谐互动】 社区精神:【创新、交流、互助、共享】

    该用户从未签到

    尚未签到

    发表于 2010-4-28 21:20:03 | 显示全部楼层
    让我看看吧,谢谢
    "真诚赞赏,手留余香"
    还没有人打赏,支持一下
    帖文化:【文明发帖 和谐互动】 社区精神:【创新、交流、互助、共享】

    该用户从未签到

    尚未签到

    发表于 2010-4-28 21:24:00 | 显示全部楼层
    为啥还是不能看啊
    "真诚赞赏,手留余香"
    还没有人打赏,支持一下
    帖文化:【文明发帖 和谐互动】 社区精神:【创新、交流、互助、共享】

    该用户从未签到

    尚未签到

    发表于 2010-4-28 21:26:23 | 显示全部楼层
    原来是这么回复啊
    "真诚赞赏,手留余香"
    还没有人打赏,支持一下
    帖文化:【文明发帖 和谐互动】 社区精神:【创新、交流、互助、共享】
    您需要登录后才可以回帖 登录 | 立即加入

    本版积分规则

    招聘斑竹

    小黑屋|手机版|APP下载(beta)|Archiver|电力研学网 ( 赣ICP备12000811号-1|赣公网安备36040302000210号 )|网站地图

    GMT+8, 2025-6-12 17:41

    Powered by Discuz! X3.5 Licensed

    © 2001-2025 Discuz! Team.

    快速回复 返回顶部 返回列表