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

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

递归下降语法分析程序

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

    连续签到: 1 天

    [LV.2]偶尔看看I

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

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

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

    ×
    属于编译的,内层的东西了 呵呵
    ( I3 V0 c+ y, p% Z( b; H7 ^1 R* ]( b0 r0 P8 y; P
    文法G[E]
    ; g$ W' r# K5 \: z* G9 LE –> E + T | T
    ' M4 ~. N2 W. N' dT –> T + F | F
    & a; J  o  L! n; OF –> i | (E)& K7 Y% Q/ _2 f% n* T5 a
    & A7 E. r; t3 V: q; @
    消除左递归  u! @2 r2 K" o3 M& m
    E –> TE’5 f, J' s8 V! }
    E’-> +TE’
    ' G1 Z9 \1 x% H: z) OE’-> ε
    9 w8 W4 \  D) z, @T –> FT’
    * d5 F, N; }8 iT’–> *FT’; u8 [) Q, ^. U
    T’-> ε
    ' J+ f* P7 u: S/ t, s  i$ L4 X, M7 W) JF -> i|(E)
    # X: c- k  U% O. V$ H2 H7 j7 u( d1 w
    编码实现
    & a$ z- m3 M- d! w! @1 z. N) a#include<iostream>8 @! ~5 U# v6 b$ b$ [' ]9 R& q- m$ @/ l
    using namespace std;. V' Z2 v2 D0 w+ I& u' M
    ; `) ]: q; p- }. O" ]( o" n
    void E();
    $ ~. Y6 H4 l: `3 q0 Wvoid E1();
    ! o) S1 T4 t9 L6 O% H% lvoid T();
    8 T* P( R: h/ U+ a- p$ S" M9 \void T1();
    ; }4 o$ }; t* w) w* avoid F();
    7 q2 c' v, D4 D
    1 n( n! X8 O7 M2 x: lchar ReadToken();
    * I; U! o# H! z( N6 f2 \0 H' Ibool Match(char a);8 j8 K) P) x) c
    void IsSuccess();
    8 }' d7 b* U( |/ c2 n! w5 T. q! i& a' o4 d
    char token;
    1 Y& @# ?1 h6 j8 a' l- n; ]; Pint cur = 0; // 当前字符索引+ ]" s; D. T: R+ a' I
    char *str = "i+i*i+(i*i)#"; // 语句
    . o- l, s( V8 g) {# i9 R8 Y3 o+ J( j* C
    void main()
    $ x) o/ q; l4 J' k  ^+ D% D{( b! T% ]- \7 G4 z& t: [& G1 Y( P
        ReadToken();" E. U3 q2 s  D
       if(!Match('#'))
    ' B0 M% {$ J$ p) s      E();$ R# w. G/ s/ R" D- M" I2 Q
    }
    7 F$ W' i& c1 jvoid E()) i' |+ t! j  e  D0 M6 M3 S' Z3 l
    {
    " o# C2 ]+ z8 {* g* Y9 j* l/ j1 ^6 X5 }   T();
    ) G  j! O3 p% B   E1();
    , D3 m# I" C( t( ^, K  H}
    ' M+ R# c/ {  ]) H$ }  z2 r5 M6 ]void T()! t% c: {& i2 X, g4 y
    {4 F! |" [9 ?) W$ l8 K. c$ O
       F();
    " l3 t( I! N2 s' j* O+ y   T1();3 V8 h2 N( a' U1 v+ f
    }' n( d& L7 _5 J; i8 g3 i
    void E1()+ c6 ~; m8 O, S$ y
    {
    4 w; v* O( W0 P* u; i3 z. n   if(Match('+'))6 Q* o3 B8 P* P8 O0 l7 ?# I4 @& Y
       {: F8 S4 w$ o9 j/ ?& A7 n
          ReadToken();
    * @# E4 V% x, A- b# X      IsSuccess();) e5 V. o/ I) s8 S% S7 U: f
          T();( j' G# U$ P( \; F
          E1();" I5 @2 K+ l& f# K! O# {* @
       }: X* A, t' C0 v3 c6 o, J
    }
    ; K" \: H0 A* _# |void T1()
    - V' D; e0 l! N1 d{( B* t' B/ _5 O  j& d2 b( X3 M4 I* l
       if(Match('*'))
    . N7 Y, w9 o6 ~1 X   {
    # t+ T8 O$ i, f4 C      ReadToken();; M6 s% `" }5 y0 g/ G! ~! ?! z9 v
          IsSuccess();
    9 }9 ?1 Z$ q$ T5 d( D' r      F();. k  ]. Z# i9 _9 L. P1 ^! v. k
          T1();
    2 x( O, r# t: a+ U4 |7 d' Z   }
    , q) E! e; h! q/ u; D) J}
    0 M) i5 N  F% P! Y" yvoid F()$ I" c; Y' R& G9 U
    {4 _0 L  J; Z4 @2 X
       if(Match('('))
    8 ^* ?8 g) v# Z' R9 t( \   {8 L/ f% k/ Z' A7 C( t* ~( z0 e
          ReadToken();
    0 v+ z! x( Q' y1 l8 }' N      IsSuccess();" H. S: s. D  L
          E();
    + u) Z4 g! G+ F, r+ }- P$ c8 n      if(Match(')'))
    ' o7 U* i- T3 h  _% A! L! Q, x2 D      {
    , `, b8 e* d! ~' @        ReadToken();
    - D. I7 @( J+ S! u7 y. S* m        IsSuccess();
    % {+ E/ V: f, B4 x7 s$ q5 e. @8 {      }$ k( m: E( s- m5 m; {$ z
          else
    & b2 s* `5 W  h1 _+ i! M      {
    ! W2 T( ]8 \) M/ f        cout << "error" << endl;" N! m1 @; ^9 @8 h, U# x2 }
          }
    3 n" X3 I2 G0 ~% ]! P   }
    : t) i& }+ U. U& A8 @! Z   else if(Match('i'))
    3 @* V& f8 O4 u" u   {
    ' y! `; }9 H/ E  Q# R2 H      ReadToken();' @- U) Y, z' K+ A3 ?
          IsSuccess();3 ~* W, ~, A, ^/ S& j3 F
       }# S6 p+ l0 Y5 }5 i. J7 l( s4 ~2 N
       else if(Match('#'))
    ! Y+ t, h' o( N" ?/ W7 L/ T7 M% Q9 {   {3 {+ E/ i) e% V8 h' T* r- S$ J
          cout << "success" << endl;' I1 u: S% |4 `  s, e9 R# P  d
       }$ I6 d/ e' Q# ~) c4 V
       else
    4 n5 D& q# _9 u0 }" P  b6 u, _1 D4 S   {
    2 B, a: J8 x( P* l       cout << "error" << endl;* ^3 L3 v% n3 |3 J3 `: f; b
       }
    . @! j$ t. t* r! E9 ~; {}
    4 ^( @5 X( D5 Z5 Echar ReadToken()
    " `# q- \) Z7 L, y4 [; v3 H{  V9 a7 V/ P2 f7 c' {
       return token = str[cur++];
      N6 n! U+ \" F" w. U8 G- C* E}
    2 N8 J. E- x% ]8 p$ s" k6 [bool Match(char ch)  o2 j, v* i- ?& A
    {2 J0 I! h3 p; y! N4 p  W1 I
       if(token == ch)4 w" P5 r' Q2 O* n8 p( [9 B5 S
          return true;
      U4 ]$ z; r9 d1 ^9 m% D   return false;
    ( {. U. u# ~% Q4 D}% u0 B2 k0 ]8 f
    void IsSuccess()
    5 ~8 b( `  D% ]/ E7 F{' F; `$ |  r5 W+ ?$ u! |
       if(Match('#'))
    # A1 u# A5 t) g% x: x   {1 j$ ~  n; ]" i2 G
          cout << "success!" << endl;
      g( N/ `# @, P1 [1 Q      exit(0);- Q6 E' K; \6 R( q. W: p- I6 p
       }$ C/ q  o& f4 h/ v3 R. 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, 2026-10-9 23:50

    Powered by Discuz! X3.5 Licensed

    © 2001-2026 Discuz! Team.

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