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

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

递归下降语法分析程序

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

    连续签到: 1 天

    [LV.2]偶尔看看I

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

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

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

    ×
    属于编译的,内层的东西了 呵呵1 b8 \5 G" P; O/ Q7 Q
    " D. }3 U+ b( J. ^* g0 u# |
    文法G[E]
    7 h* @, y6 @+ WE –> E + T | T6 u( Y+ m- G9 d+ i6 W7 ?
    T –> T + F | F
    ' D. X' V( ?1 i4 W' DF –> i | (E)
    " d1 }2 G7 m/ w; i/ {# ~- r! S. T$ L( o! r8 E; i
    消除左递归/ ~$ j2 s* I7 r; p8 ~/ q. f/ ~
    E –> TE’6 ?3 m! I5 J4 ?' g5 r* b) G
    E’-> +TE’
    " d' k9 M2 a$ s4 L8 b1 kE’-> ε) ~  O3 i' a1 D0 k9 z) z3 z
    T –> FT’
    & o* b1 ~3 m/ }: T, bT’–> *FT’
    # U  N5 I9 q- V1 BT’-> ε
    # R" Z( n/ y- E2 LF -> i|(E)
    9 [# A4 u% |0 ]( `) M4 w: W8 ]6 Y/ ^! R& m  S
    编码实现
    % c1 V9 O0 V  u8 f/ X#include<iostream>- T  l" J2 x- F! g, k
    using namespace std;
    " V1 f" F) T5 Q- M3 k5 p
    0 ]: Q- n/ D8 ^0 [5 }  jvoid E();
    + y$ ]/ Z$ O4 D, Y' f$ _void E1();% _5 C7 Q. B) _8 h$ H2 p) D
    void T();. b1 k, e  K$ e, a9 E
    void T1();
    - p6 r) {# `$ N$ U8 Zvoid F();
    1 J( A7 R8 {% l" F) U1 o9 K
    ( D% N. E) M4 N8 Z6 u4 |char ReadToken();5 t! G5 U; W, k  G- M
    bool Match(char a);+ A, G7 R5 t" L/ k
    void IsSuccess();" p8 U8 \% C, K. Q3 R2 e! |
    7 H& G% ^6 q, P: Q4 ]
    char token;
    $ ^# R/ i" a8 J0 J5 Lint cur = 0; // 当前字符索引3 [" _" k0 {5 X' U2 C
    char *str = "i+i*i+(i*i)#"; // 语句; W' I' l# i4 L* g% S- O4 `( v, i" J

    . X" g7 H& B8 E! v, fvoid main()0 q" o# W+ O  k( b8 C
    {2 Q0 l! U4 b. `! h+ g6 Z
        ReadToken();
    , M0 K4 h1 f+ ]0 {# s8 L   if(!Match('#'))/ T: D0 ], c% N! `7 V
          E();8 L; f$ [4 A! Z( h2 f6 `& S$ y
    }
    : }5 S' ]& b; h" ^9 Svoid E()
    & H: l% Z3 m% J/ p{6 R# c) a* ^4 n( r% }; H3 |' S
       T();' b6 G% l) O$ V2 o, h! S2 M1 L
       E1();
    * X0 G9 {3 ^0 @7 ?8 ~- D}1 n7 E, n, W, y) Y5 Q& V- U8 B
    void T()
    " {2 k* o9 J1 v{9 |0 S5 d4 b9 T6 k. x' n1 }. ?0 J. z
       F();
    / R5 S3 X- K$ k   T1();
    5 _$ m: }- i' n3 X' N}
    $ V  Y/ ~/ i. M% _% Kvoid E1()
    % T! H# x, @* K9 Q{# \  t' b$ n/ \
       if(Match('+'))
    " u7 H+ B0 j# h8 ]# P' C   {
    ( j$ o) L3 m9 Z8 r, Q      ReadToken();
    ) t! B8 V; ~  [9 H8 k" u      IsSuccess();
    , ~" i& M% [" z: ~! k      T();
    ; A6 E$ }2 \& u: q1 k) n9 g5 B      E1();
    / n( L, H: n+ E  _   }
    % i0 G3 l2 c' d1 w% Y+ \}
    . @2 p, Z' U( |1 Q. r  h$ Xvoid T1()/ Q; L: V2 j8 k& f" a- k
    {
    + s4 t* `% i) j2 D3 G: r# Q   if(Match('*'))
    6 {: g$ b: M; h   {
    " F8 k6 x/ ^2 \. e      ReadToken();
    % b& l+ j4 _( x      IsSuccess();3 W4 ]$ }# E7 f
          F();
    & V6 M  p/ i" h9 P      T1();
    4 C1 y1 Z6 J3 J) I( z/ E   }: w  \, |# P/ T
    }
    % U8 L, ]( O3 cvoid F()
    4 S/ e$ d4 h& \5 V# [( q{
    " H" E5 Q- a' O, \* t' L, r5 e   if(Match('('))& r; s/ w9 P& g
       {. @+ d. _& c2 ^$ X
          ReadToken();% w) [! b$ D9 w" d) W2 `+ Y. h
          IsSuccess();
    * R" M0 n3 L. \      E();
    ( E: s1 m! _) w) o$ B      if(Match(')'))
    - }# F6 N4 {# \/ i( e      {
    ! L5 d) l$ a/ Y5 b0 \% Y' |        ReadToken();4 t# F/ c- C0 e+ y2 Z) B+ b
            IsSuccess();
    ' N$ M, H- Z+ i- |4 I8 j      }
    % ?8 i5 `/ F+ e6 e      else # r# `1 @* y7 d
          {2 M$ R5 ?9 Q2 y( f/ d( u! A5 T
            cout << "error" << endl;* s/ _" R' ?: c; O' K' b
          }  w6 g) ~  f& p- G
       }; Q, p& r" C- c
       else if(Match('i')); R+ l9 _  D) b/ D2 w2 p
       {' ]. i. C0 |) I- k! h! s* `
          ReadToken();1 A7 T2 E6 z* |4 Z/ e
          IsSuccess();
    # m( \, \% S; Z0 X% }   }
    1 R7 U9 h/ Q3 T/ F" V   else if(Match('#'))6 F6 q, \5 N" h4 s) d8 f
       {) d5 s% Q( u2 b" J
          cout << "success" << endl;. {% C* h6 |) y; r3 c8 i$ H
       }# N1 Y7 u6 ]2 ^- V  N
       else
    ( o  k2 E! }# _6 v" c# Y' [   {* w" \8 W+ V7 W0 W
           cout << "error" << endl;, B( v$ F: N: D. C8 ^. E! ~
       }9 Z! G% g8 n8 p* L
    }
    - r5 E( R6 n; Q& f  d" @char ReadToken()
    7 @" X( H0 D. X. L{; `5 E0 D7 J4 y2 [# A* R
       return token = str[cur++];+ u5 w0 B( [' W0 h
    }
    4 O3 b& x+ O& X' Vbool Match(char ch)+ k, v8 a1 K* ?! U/ S; H1 c% _9 ?
    {
    . ]- R1 f0 u! u; @- t* b   if(token == ch)& g+ Q1 Q8 }1 o' q- i7 C
          return true;
    2 r6 ?1 v8 k! ]   return false;
    ; J: m( S( P, H, n& B: N}
    ' g2 e! J& |1 S' E, P. ?$ d3 ^void IsSuccess()
    1 P7 d; n/ f9 V# b7 x* b{4 \2 u3 E* \8 Z" g! `) I. W
       if(Match('#'))
    0 p; g' _% U/ y2 W   {
    # o# J3 m2 w" D! O7 T      cout << "success!" << endl;
    4 S6 f- D# g  `" W3 E0 K      exit(0);
    3 H7 m+ ^$ O3 ^1 K! ^' D4 _   }  Y- Q* s* ~! I) G
    }
    "真诚赞赏,手留余香"
    还没有人打赏,支持一下
    楼主热帖
    帖文化:【文明发帖 和谐互动】 社区精神:【创新、交流、互助、共享】

    该用户从未签到

    尚未签到

    发表于 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-3-18 11:02

    Powered by Discuz! X3.5 Licensed

    © 2001-2025 Discuz! Team.

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