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

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

递归下降语法分析程序

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

    连续签到: 1 天

    [LV.2]偶尔看看I

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

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

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

    ×
    属于编译的,内层的东西了 呵呵2 g8 A5 F, V: H! {) p/ }2 i! c$ b
    3 o& g. D+ W$ b1 d  g! w) Q
    文法G[E]
    ; ]; R7 f- j4 x* R" X0 KE –> E + T | T
      P: A1 F/ B; eT –> T + F | F- T2 G8 X& X( V" W1 `
    F –> i | (E)1 E' Q9 t1 K. I) V& d$ O) x
    ' o) b- |8 y, H3 I5 d2 x
    消除左递归6 Q7 J/ k7 W6 b, [1 c% R* ^
    E –> TE’
    8 J; I9 b5 J) @2 }1 S9 W5 v# YE’-> +TE’
    6 x. O( ^0 m$ {. e; `E’-> ε8 U' Q3 Q% y+ Y! ~8 R
    T –> FT’
    " f% t! G8 _6 D. U, U1 i1 R, pT’–> *FT’" R/ p6 Z8 h3 B# I
    T’-> ε% |9 V( O( H+ J  |  C9 y# f
    F -> i|(E)
    ; ]# Z8 C; i/ m. w$ J+ x
    1 B7 I7 C( e( |% ]$ Z) M+ r编码实现  ?- h& M9 s. ?
    #include<iostream>, R* G) @" A( J0 I( M: }$ C! s9 T
    using namespace std;2 y( H, F  e1 f2 c# n* S+ o( l: |
    $ ]) G  J3 S9 j. D7 x3 w
    void E();- w; L' S% g* V! t
    void E1();+ ?9 [+ l+ L! E: D. \1 p. b
    void T();* f% G6 S' @4 I: p, U8 v
    void T1();
    ' {6 j" m* F5 P  {. h; Kvoid F();4 j' }6 l( }5 M1 t
    9 b1 A) y" F" W
    char ReadToken();7 k, ^& g+ M2 u% P% i/ F4 S
    bool Match(char a);5 V8 D$ F- B" d1 x* g* P
    void IsSuccess();9 ^8 X6 o' q- S. M- W

    & m2 ]% U; S' Z; z3 a* F2 qchar token;0 c) J. h4 E6 K1 j: H
    int cur = 0; // 当前字符索引
    % G- m  \5 Q3 h5 tchar *str = "i+i*i+(i*i)#"; // 语句
    + W. Z  O, ^% ]& b% T9 W# c2 T! M% F' n7 Q) m0 r; U7 O
    void main()5 `8 \- G& H3 S, }# A
    {1 Q# y) y- b5 Y. ?* M) @- ]
        ReadToken();6 d; R4 a' e- X; d8 X4 ?
       if(!Match('#'))
    4 e2 Z* S6 M* k) p1 S0 ^( n      E();! j' R" Z; D1 E9 t/ k4 W: l, z6 u
    }6 e$ ~6 k2 _0 I* s8 O" K/ q: A8 U
    void E()
      ^* l+ r5 d) N; m3 E- c; M0 h, X' c{- q, m# @2 V  \7 r# B0 z
       T();  Y( B! C: H8 G; B+ z$ O% P- Q
       E1();
    3 T. H% w* V- [, Q! w; N}& W; {, ^# G( `- J* E
    void T()
    % X1 g( M/ H  j2 U{
    # M# S9 t* o6 {' M9 g% p" e   F();5 k' ]2 w, P& n! x3 [  T! G& @$ F( R
       T1();
    ' ~, s& p& s1 ^% G}3 C) E8 u; B# c- ?% v; S
    void E1()
    8 {; r- u1 R; e' W4 @: I$ f{
    - c) V; V6 K, G* s* ]8 h$ u+ z   if(Match('+'))
    2 q+ y' C- [" E* h0 |) g   {+ X" ^2 e/ L# \3 r* O
          ReadToken();
    5 y: q  U0 j2 w8 R. P      IsSuccess();
    4 m- g: G6 ]  w. W+ M) w' S      T();; p8 l* k: C# {9 Q/ i0 g5 G' U
          E1();' O/ y) _( A: {% H# c1 ~  K
       }
    # k! ]# z- D6 [. A/ z0 d}
    . i" u, l1 `+ l& {% W5 A3 ]' B5 Uvoid T1()  Q: w& ^  |/ Q& b4 \" m
    {
    ! W- ^0 E; r" C" A6 c7 |) A   if(Match('*'))+ i8 L" x) Y  @
       {
    % r5 `# C9 s8 N6 e3 d2 s7 I      ReadToken();- R' d3 ~6 ~$ J  J7 A
          IsSuccess();
    ) h; E  X3 i) Z9 n5 k) c      F();% Y" D6 B: V$ P0 A
          T1();
    / t8 B& s4 Y* h0 L   }1 r7 J6 Y8 G3 M# o$ E; h+ I
    }, _; ~5 z7 ~* q5 S3 B* }
    void F()- o7 p, p) N2 ~6 u- ~( \: U
    {
    / e4 d) T6 n) O   if(Match('('))* B2 Z: v% M# T
       {# O" Z& f% `  d  K2 u3 J* @
          ReadToken();
    4 `+ h- |1 R$ G1 A/ J% K7 K      IsSuccess();
    - d9 z1 O2 R# C$ M- \# m      E();% V* x: E% Y2 R
          if(Match(')'))
    ) [& G* @6 x" x: ?% u0 P: w      {
    / g( {2 j# f. l        ReadToken();$ ^: v$ j# |- ^/ E  X2 \  @7 ?
            IsSuccess();! K0 X5 i0 S, L+ R8 V7 N
          }
    ! S8 S$ T2 {" X, b: Y8 w% T4 }; P      else   G! Z2 ]$ N0 h1 ]; b$ ?# {
          {
    5 k' @# F, ?' R* D0 q. `        cout << "error" << endl;) U. _  n4 \% @0 M& o7 J1 {
          }
    : p1 ]4 J" \1 v2 i  `   }
    ) N( z) w, x1 u! [  O% S" \' K" N   else if(Match('i'))
      C* Y& v) N4 K: D) N. D6 V+ X   {
    - a3 P6 ]0 v" g& n      ReadToken();( d3 O' M+ A  f7 X, Q& a
          IsSuccess();
    ! j7 d9 C' v) k   }
    1 A3 _. G1 \8 j9 a   else if(Match('#'))
    " o3 _: w( A+ c8 x: Q+ ]   {
    " l  B: S7 }/ N# Q8 n& d6 O' g9 P      cout << "success" << endl;7 a% n5 g2 Z2 y8 J9 N' v
       }
    5 ?" }1 }5 W$ g0 F- w  A! P# r   else8 n' X* Q* m5 E  x
       {0 C8 T! P4 N: ^: f4 A
           cout << "error" << endl;
    ; j& u" P, X" e" s1 @7 D' Y- l   }
    5 \* P& T9 b  K* ^" T: q}; W  Z+ e4 Z/ r
    char ReadToken()% t; l8 q+ f! j8 g0 X; C, d, h- K. l: z
    {; G7 Y$ F$ v% V& C! r  ]8 x
       return token = str[cur++];
    ! f; S# p5 @0 u& q6 {}
    7 w2 L7 b; x: q! t) E1 `5 sbool Match(char ch)6 o) H( `3 B' H0 p4 {# E
    {
    8 k' I' m5 E7 M4 q1 l" E2 h# \   if(token == ch)
    - [! J4 [3 H; o! b3 P" e+ |      return true;
    0 ?$ J6 `7 r) l/ v  R   return false;# V( z$ q8 \: P' ^$ l. a
    }. R. ]" E( |; K  g
    void IsSuccess()
    8 w* }9 M# }* I$ K- B; T{
      K& _0 C( n9 r/ Q& h6 \1 P   if(Match('#'))- }/ f( [& F% U  `8 O0 U
       {0 @/ h. H8 Z7 L6 n8 \. x1 y
          cout << "success!" << endl;
    - E6 v2 X# ^3 s! F- K- Y7 c. n      exit(0);
    ( Q/ `" W4 `# W& X4 @   }  y% d* i5 o' m+ s) j* ]' d# \5 |
    }
    "真诚赞赏,手留余香"
    还没有人打赏,支持一下
    楼主热帖
    帖文化:【文明发帖 和谐互动】 社区精神:【创新、交流、互助、共享】

    该用户从未签到

    尚未签到

    发表于 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, 2026-10-10 03:37

    Powered by Discuz! X3.5 Licensed

    © 2001-2026 Discuz! Team.

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