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

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

递归下降语法分析程序

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

    连续签到: 1 天

    [LV.2]偶尔看看I

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

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

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

    ×
    属于编译的,内层的东西了 呵呵
    3 `! o' t2 J$ q4 I2 J
    # J. N6 m& x, J文法G[E]3 o! |4 x5 C, T
    E –> E + T | T
    7 L2 R$ g: J8 ?3 NT –> T + F | F) c5 {4 R$ Q, J. \" H' Z9 I6 L
    F –> i | (E): x0 u' z8 g5 _3 T6 S/ ^

    6 p0 h8 l! V% Y  F3 g7 z: C消除左递归3 o0 C3 v! y" S1 W* @
    E –> TE’+ l6 s  U5 d# a# [* ]$ I
    E’-> +TE’
    # H6 b/ W8 L, yE’-> ε7 l$ ?$ [8 K4 \9 ]9 |
    T –> FT’5 P/ t$ n& e" O' W6 k$ d
    T’–> *FT’, b. R, y$ h; r( A; p" \
    T’-> ε
    ; I/ D% a9 _; Y( I6 yF -> i|(E)
    # R3 ^- {/ k4 d& J6 B/ a  H4 Z8 K. M
    编码实现0 h: A" e( f/ {& h2 e
    #include<iostream>6 Q3 w# n. t  X0 N
    using namespace std;) k0 x1 m" s2 m

    , b! N! l* t- _void E();% {4 }4 R; `! _' q* L" o" t1 I
    void E1();  t3 \8 {/ R% b) [; \6 A
    void T();# r) o: j$ U3 s! `$ R
    void T1();
    6 l) i$ L% @! j8 o  ?" jvoid F();
    " n. Y: R6 s& r( X8 a8 C, F
    . W& @6 |7 J% ]! {char ReadToken();
    4 d8 l+ T7 [. r  V; d2 jbool Match(char a);
    % J. ?( }& t! z5 ^; i; S" yvoid IsSuccess();" i! q* h! t, Z& V& W
    ; Q. M% I6 P. C
    char token;
    6 d) {9 m0 ?. X3 t, e: X, Xint cur = 0; // 当前字符索引
    : v/ q6 }8 G2 ^$ gchar *str = "i+i*i+(i*i)#"; // 语句
      S) F6 z: J( \, f# J: U' g% J+ t8 {5 ?% I. j& b
    void main()
    1 V9 Z* q. i8 H$ q# |' `{
    6 a6 Y, b& N4 y  b3 I    ReadToken();- h) p- s9 h6 m; ?  w2 }' F& f
       if(!Match('#'))8 O/ r5 ^1 c$ K; i7 n
          E();
    - j$ j% R+ w! v' Z$ }}
    7 F0 _6 f' r1 S; v  I0 Y1 svoid E()6 P  k+ Z. W1 h/ F
    {: O( Q* _9 J/ ^1 ~' ?3 H
       T();3 q; ]% I3 E; c
       E1();! T  u+ T- Z6 \6 u: ^' `
    }- Q2 Z  s0 L/ ~' j8 m$ I* A
    void T()1 X: M4 m! G0 ?% F! s
    {, T( F' T' y: c5 H$ m& V3 g0 F
       F();
    ' C$ \# q+ ?# `! a* m   T1();2 x  v1 K# I( c/ w4 a6 B4 @
    }
    4 n* H- }$ \+ S; H% D- d! f% Svoid E1()) C4 M; ?! B+ i; V. o  r
    {! v5 N2 ^( ?6 t2 ?
       if(Match('+'))
    + ~# g/ x- U( X2 _- e   {, ?7 Z6 @  K9 A2 j
          ReadToken();
    0 o. a  D& [0 g      IsSuccess();
    * _1 @- J5 g. \: U" B! c      T();
    ' z! |# T4 N2 S3 U3 F! w7 ^5 q% m      E1();
    : \9 C: Q+ O" w7 x   }; k. Q; l" o$ b* k0 b* R1 H
    }, `# \# p$ G; X4 ^6 R5 ~1 ~
    void T1()$ k  l$ V- d$ H  o- G1 O
    {
    4 {) j( O1 Z6 ^8 T9 w   if(Match('*'))
    6 n1 d/ ^( j: H   {) \2 E( {2 w6 @' i/ r' b* \* _
          ReadToken();
    3 q) z1 s  w- \) M8 [! h      IsSuccess();% w3 S4 R2 y) i" B+ f
          F();# `# b% g# ^. @7 B# e7 D
          T1();
    + O9 Q( r& ?5 ~( y   }
    - r' i* g1 o: J1 d}7 G$ |  I2 \1 j$ k
    void F(): L: d1 x" y- r8 q. \
    {. f& ?. w% ?4 q  T; f  G  B
       if(Match('('))
    & R1 B# H2 }* K   {
    2 ~0 t/ C# Z% _& S      ReadToken();
    9 m3 Q3 }, ?. m, C1 b8 T      IsSuccess();
    - a6 X9 X3 t2 D- C      E();
    * b, n+ b: w. s! b8 H3 t8 g2 N0 y7 @1 C7 u      if(Match(')'))+ Z1 ]6 K1 D) [; \5 y
          {! E! h2 L. F- e8 G! c
            ReadToken();* [) t8 n) Q* K- U6 K$ B! w1 {
            IsSuccess();5 s, H  n' o" o9 n/ @# ~, ?
          }. C+ Q$ S, _" U# t( f: B
          else
    / W, v) U$ r8 w# C9 |2 m      {
    ! `3 w& Z  j' G        cout << "error" << endl;+ L& G; V9 |# }* a; ]0 B; t" t- _( e. h
          }
    0 ?3 E+ |" {/ B* {   }, V0 s' F5 B5 D1 n- Q9 v
       else if(Match('i'))1 [8 x7 K* S- l6 J( h$ F2 I5 C! \3 x
       {4 n( Q# ]2 @/ {+ x
          ReadToken();. k7 B% F; [- E" N0 ?7 h4 s9 e( w( F
          IsSuccess();
      B% ]" }2 ]; s   }
    - J$ T2 [) Y5 P   else if(Match('#'))1 b! P" B" a) w
       {
    " a' O8 y! O, |! i      cout << "success" << endl;; C; G  Z: Q$ V! |& H7 ^, Z8 [  Q
       }3 g2 K$ f1 a5 y' _1 n3 u  u
       else. u0 d; y# b! K
       {7 C' V$ y: x0 a' @7 L6 D; z, r
           cout << "error" << endl;
    ' [5 j$ O1 N. O   }, }, A  _+ L7 O+ |. A1 Y* \/ m! K
    }
    0 H! l3 c  @8 X+ V* ^char ReadToken()
    / |. \6 x  W5 N; y' [2 C4 z& j1 _{) F% D$ m6 @3 U/ N/ j" C
       return token = str[cur++];
    . @/ x( |7 d3 b% r, k2 U}
    . H4 N- Y( [! d3 ~bool Match(char ch)
    # q1 }) O; Q. X+ y+ q3 E6 h{
    . ]& K# b3 G: {$ x+ Q   if(token == ch)
    9 h: C) ?9 \! y4 \( \: O      return true;4 M/ H5 w8 M0 Q5 f2 _: n2 O6 u
       return false;" L3 F- H- z! v9 w* ?$ y# K; t
    }
    6 R8 t# g2 y* h/ B( v. pvoid IsSuccess()3 s1 T# r' o. }" |
    {  G  k. u2 w% F( L
       if(Match('#')); s! G( A- ]- h
       {5 v) f: y$ s0 M. K! E* u
          cout << "success!" << endl;+ P, z" Z/ J% ?1 \/ w1 S
          exit(0);
    8 Q* D, e8 C- F# ?. z* n( W   }
    ( E% z6 r  r) ^}
    "真诚赞赏,手留余香"
    还没有人打赏,支持一下
    楼主热帖
    帖文化:【文明发帖 和谐互动】 社区精神:【创新、交流、互助、共享】

    该用户从未签到

    尚未签到

    发表于 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-4-20 08:40

    Powered by Discuz! X3.5 Licensed

    © 2001-2025 Discuz! Team.

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