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

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

递归下降语法分析程序

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

    连续签到: 1 天

    [LV.2]偶尔看看I

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

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

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

    ×
    属于编译的,内层的东西了 呵呵
    . z$ C; i/ o, n) Y- |4 v5 I# J! H' ^+ [
    文法G[E]( u! r# H4 w* f; O1 Q
    E –> E + T | T
    " @: X3 }- U! R9 C& KT –> T + F | F# w* A( O6 d! i# p
    F –> i | (E)* s* E  m/ h5 q2 y* S
      P5 @' i5 C0 I1 ^2 }/ G
    消除左递归! ^' H3 e2 z: q8 i4 Q/ K4 |
    E –> TE’
    : U* U( k/ D# A" v5 r( V; P& LE’-> +TE’& b4 H# i. f+ Q/ ]& c; u; ]
    E’-> ε
    * H. V% |/ M' D2 C! [! L+ cT –> FT’6 f* m1 ~7 W" @3 N& k# E
    T’–> *FT’
    ( W( U2 |% [. n) a1 R6 AT’-> ε; v3 C& w- J, A
    F -> i|(E)3 c$ M+ k8 a% \9 K8 b" A! }" B

    1 \. u5 v, ]5 x' _4 L编码实现
    9 D3 S6 ^' q. D$ F$ O: p#include<iostream>
    ( C9 z( `' G! `& Yusing namespace std;
    ) \; E: n3 Z( j. ?9 u. Q
    8 D& a; ^( {3 H8 h4 }5 J4 r- Jvoid E();- c$ C8 \2 [! \1 w4 q
    void E1();) i* I4 V" x5 T3 H
    void T();0 |2 D1 r* }4 ^, D, V& j6 P
    void T1();* ?/ J2 v7 f" P+ a/ Z
    void F();
    : w* c# S2 H2 m( Q0 W6 p  u3 ?8 |( ^
    char ReadToken();
    ' h* n7 L# o/ e! n* B7 jbool Match(char a);) L) K: u' o. i% M0 p6 t/ u* l) K
    void IsSuccess();0 k9 E2 \+ G) s# b

    ( b0 C2 z. c+ X" ]! Schar token;! T/ g; J9 V8 u, C  Z! `
    int cur = 0; // 当前字符索引  Z# a( K/ D! _1 t5 d; o( v3 G$ z
    char *str = "i+i*i+(i*i)#"; // 语句. o* v6 x) z& [; X2 c  b
    & [; c5 o9 D" R% @% U
    void main()9 ]; D" |+ u; Z5 d& v
    {% y+ G- M! T" t4 b! c% C
        ReadToken();
    4 x% ]/ n8 b) v) I* P   if(!Match('#'))
    8 d, B! {( D! l+ y/ V0 d      E();; }9 s1 N+ `: z" H# b# j! s$ {
    }
    2 b: A" _7 o- e( wvoid E()
    * `1 h. `. ]: ?5 p$ Q) f{% s/ I: \8 E0 }4 V; i
       T();
    4 B) w0 ]8 F$ w& f% K   E1();
    ( H' f) [2 a) e}
    ; O' D# n% x( W6 Avoid T()7 |/ a4 |- q3 Y$ i
    {
    2 n, l* r! h2 x- A# `& i' U   F();! q6 d2 O. [* \" I
       T1();9 K1 \4 Z4 X6 f( ]. g
    }( k1 a4 x, \# @2 U
    void E1()( h# ]) U7 L1 @% B, E3 S2 ]
    {: f% A1 W* n) h( w4 t1 n% h5 S- S. q
       if(Match('+'))
    5 C, P& g8 }. \& s" J4 ^   {
    ) S% W  v" }. Q2 W1 \& D6 Q: A2 f      ReadToken();
    ( z6 H  {  j: P# X  q; v      IsSuccess();
    , _0 j- u. L3 l3 F+ C      T();6 z/ L  b! V8 h2 [
          E1();
    8 P2 x( r/ O9 Y3 t7 w- o   }
    5 n5 n% d$ Q5 B}
    3 E* Y: u! `) X- J+ m) U& {void T1()
    1 h2 w/ a% S( H7 O; I; b6 q' B' C+ ?{
    : }3 j# ~+ |% [: C) I- Z/ O' q   if(Match('*'))
    - q7 c1 R8 q6 F; p   {7 k2 |  t/ I0 [* s$ L: A2 I, f; P
          ReadToken();0 [) D# `+ E3 [- @3 A  Q2 Z
          IsSuccess();
    4 H) _" j1 ^0 u/ k8 W5 v3 ~      F();' U/ f/ O" M  h/ C
          T1();
    / W& l. C6 u, E3 P! [9 t2 ]; o   }/ V, y3 {2 ~# H: J7 o2 g4 _
    }# k* A  c9 j% P& x7 k
    void F(): z, T4 ~0 y8 U
    {' w1 B: @+ }( I" s* {
       if(Match('('))# d8 N' l; ]$ G; ^$ z% h* M
       {
    ! a0 B! {8 f- Q7 M! h9 n      ReadToken();
    2 D9 _; ^5 W2 r' }      IsSuccess();
    ! |) M9 w' I% k- o( L7 O      E();
    ; Z, e6 C* B+ M2 q2 `      if(Match(')'))
    9 a" L: L# @7 t0 z3 L- X      {
    6 d; t6 _2 ]7 }/ ?! z        ReadToken();: U! ^  q2 S' {, }
            IsSuccess();
    7 l% u" U. ]- n& D0 `4 P& y      }
    * g" B; ?  j& b4 _, w" T( z      else
    + R- S2 @. x& a$ K2 K# f% {0 c      {/ M. r* M6 a3 m" ~$ W: [% [, i
            cout << "error" << endl;* n6 l: X7 S/ i% ?: z
          }
    9 d6 i% P" N& B   }  G) m, W  Q. _" q2 `% J
       else if(Match('i'))
    " ]2 m1 L9 c# w/ ~$ |' Z   {" }0 v1 j; f9 |
          ReadToken();
    3 T5 f3 V+ v0 O- u      IsSuccess();
    2 f0 i- h' O8 `; }& r   }" A  p$ P& _* j3 a6 i/ F
       else if(Match('#'))5 C; b5 L9 Y! U1 O
       {
    7 L8 K- w* ?# T2 r1 X6 H      cout << "success" << endl;  x4 S9 i+ B8 O2 |$ J& [
       }
    . c2 o7 G8 I; i   else4 a& [' Q9 M% Y: ]  e
       {
    ; @/ W3 `0 B7 f/ Z8 F- j       cout << "error" << endl;
    * ]$ T9 W6 q0 ?4 ]   }8 A4 S: U1 S1 D
    }& }5 G4 q3 J: K* ^
    char ReadToken()
    " i3 H, ~+ r! d# e' h# t  X{
    - C9 ~- n2 j' p- t8 ?6 S   return token = str[cur++];
    ' o$ A1 S- C3 e3 U: ]6 f6 v; v}. N* p  e  }. Y: I! @# Y) B) h* s
    bool Match(char ch)
    & L0 K6 v% S0 q  C0 Y8 F{2 t/ z: N" `7 R1 `. G9 ?9 p
       if(token == ch)" g' P: z" `1 \. C2 d8 `* c# R/ H
          return true;5 ^, R( B* L: \+ Y; s8 I6 ?
       return false;
    * j8 n% A. J% `}' l7 D  _* f& V
    void IsSuccess()
    0 i; o# u/ G: C0 L  O{6 |8 @5 [2 I! d$ P) x2 R
       if(Match('#'))
      W1 f" m- k7 V3 W( o; ?- e6 N   {
    + f% d/ `0 C; f- n# O. l2 [      cout << "success!" << endl;  \6 N$ J1 Y, M; n7 L, @
          exit(0);
    4 |+ h2 l* d% R0 w0 \% m$ d7 o   }
    " u! y. d4 \& _1 \1 A1 B}
    "真诚赞赏,手留余香"
    还没有人打赏,支持一下
    楼主热帖
    帖文化:【文明发帖 和谐互动】 社区精神:【创新、交流、互助、共享】

    该用户从未签到

    尚未签到

    发表于 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-31 16:05

    Powered by Discuz! X3.5 Licensed

    © 2001-2026 Discuz! Team.

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