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

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

递归下降语法分析程序

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

    连续签到: 1 天

    [LV.2]偶尔看看I

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

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

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

    ×
    属于编译的,内层的东西了 呵呵. j. u* [% b3 s- F' x+ i' |
    $ y/ N0 O9 X3 P2 z
    文法G[E]
    2 `; d9 A' }4 W# J- wE –> E + T | T$ F9 i0 d( h0 O! ?! g5 S
    T –> T + F | F
    , p  b1 a) a5 Y( u, V9 JF –> i | (E)! N( D6 l! H/ K5 Z/ y' p2 N

    ' Q- ~  S8 ~# q消除左递归
    # p- r6 z3 Z) G$ S0 q( L$ cE –> TE’
      t4 e2 K; }$ vE’-> +TE’8 f: t" \4 c5 p6 m
    E’-> ε
    ; b# i2 O0 E; H3 V6 c0 c; qT –> FT’
    ' N: c/ |8 ]' k4 C0 [T’–> *FT’$ N5 L$ U9 {( Z9 I& S+ S  j
    T’-> ε
    + H# ?5 s/ M' U$ |" LF -> i|(E)3 p" l9 E: v' L' `$ C
    8 l1 P2 [- r8 K3 L
    编码实现& V! d% E8 j3 E+ B, ^% K
    #include<iostream>
    * g& j: b- `( Q6 D2 P+ ?using namespace std;
    * r$ G( D7 \/ l* Y3 M6 r3 g4 w
    8 n( q0 Y" c' V" O, t6 O" o" hvoid E();7 E7 @0 e9 D/ z3 s1 }; N/ z9 y  o
    void E1();
    . C' n8 T6 q( j# ~' Svoid T();9 q0 \' e1 w: N& Z0 w
    void T1();5 m8 `: H+ [$ ~* j: u1 u
    void F();6 W# }- o* U9 a; k6 r

    + q- V* |0 g" f2 Jchar ReadToken();
    $ {! `( L* }) E5 H6 I& `; Fbool Match(char a);
    8 _; r( T5 K- t  A. }# I- kvoid IsSuccess();/ T! |7 x8 p) `2 v+ L

    7 n+ F, k3 Q, s( b2 b: ~char token;
    # r9 b7 X" F4 uint cur = 0; // 当前字符索引2 D8 }* v& {5 P. E, ?
    char *str = "i+i*i+(i*i)#"; // 语句
    % S3 K7 j& x. P" q" T
    ) a6 c6 z2 `! G, J- J: vvoid main()
    # S3 ]: s- O( d{; x9 ?1 S6 [6 q! q
        ReadToken();
    # E; p' L; @1 f, @4 O   if(!Match('#'))" H- ]9 u: V5 ^$ R8 b
          E();
    ; W" ]4 v! Z! ]+ s$ R9 t}
    : }( M$ w3 S( Ivoid E()/ s# w6 O, S( N( Y$ \5 A( S
    {
    $ J: w  \: m3 F   T();
    % e/ R" W6 o; S7 v- [, M" h( [   E1();
    - Y/ T6 O& d# ~9 w}( g( W/ k1 B& _) c7 u, a
    void T()
    " V# T5 S8 c4 j{
    5 T7 {/ |2 F; r! r0 ]6 V" b   F();
    ; y# {) O% g5 p- h9 v4 s" X% W   T1();# \# o+ @7 |6 F/ C8 i# C1 D: ~
    }# E9 j( I: l; K( `% B) `2 }4 W) F
    void E1()) ^8 H* Q# A" {2 {4 y6 Q
    {; u. c; q5 ]5 K' Y1 s  w
       if(Match('+'))
    ! z5 c( W$ L* @0 o   {
      F5 f: O' |7 G: N      ReadToken();
    / I6 o. S! D( ?9 S2 _$ I. I6 r      IsSuccess();, \; O+ P/ D) L  r4 c
          T();
    & G& M8 F. J+ ^1 t: s. {      E1();. f9 N" ?) I1 k$ y/ P
       }
    ; e- ~$ E8 B) U: {3 w4 l- M}
    % r- }( r3 C. J3 pvoid T1()9 Y: f% b* [/ a0 P7 Z* V
    {, w4 |% E: w  Z+ D" l
       if(Match('*'))
    ) v* g7 W' Z1 W$ u   {
    ! Q. y5 T0 h: F3 S$ Y: u      ReadToken();( Y2 @2 L4 D+ Z; d4 a) r! ~5 S
          IsSuccess();
      a) g% Z# M+ C3 S  S; V) {      F();0 I1 h2 ~+ N/ T8 h. X
          T1();
    6 O) b  E4 W. Z1 [( s( x" @   }3 ]' E0 ~  [! }; R9 Z! L; v
    }
    3 H4 c" a6 Q4 d% Xvoid F()
    ; o/ t6 O1 _' [  a% D{: S0 s. g: T+ Q* O4 f
       if(Match('('))
    $ A( [! b3 [; T9 t6 V6 s   {/ s; s0 @) j7 H" f, F
          ReadToken();
    7 @" f: f# f& [      IsSuccess();
    ' d- H. x+ q  y8 e      E();
    $ O. ?1 y0 Z  U. o$ X3 I      if(Match(')'))
    4 x+ ~8 q; v: a1 J  }      {
    % q9 }. T) [+ U/ n3 g% f        ReadToken();/ |4 R( F! V5 p/ t* Z1 L6 |
            IsSuccess();
    2 f4 K; n3 I# H      }$ R) [6 h& e, y3 }8 T
          else
    ' ?2 u) t9 k0 T/ r! C      {
    6 y5 b9 c( V- U/ ]; m9 f/ o7 N# i        cout << "error" << endl;7 |  c2 z: F  a5 T+ h9 `; I& Q, v
          }
    0 O' v2 o  i% @# h   }( \) g% W9 m& r9 Y7 L
       else if(Match('i'))5 y% }/ X  I4 a( Y1 S$ J+ H
       {
    7 R) _" ~( E. b$ S7 \" `- @/ Q      ReadToken();4 k% A/ u+ M9 U3 n4 y: {
          IsSuccess();
    4 `  ?: D4 v: }( V   }: {) N! A6 s$ K& N/ H8 J9 G' p
       else if(Match('#'))" I5 |8 g0 y1 Y) |
       {
    * d3 Z  m6 A7 Q9 e' C      cout << "success" << endl;! Z3 k1 n6 L) c+ N0 t
       }
    $ |: t! v( \- f   else7 g0 N" p' f* w6 C
       {/ h  ^: e  E0 c( J2 m+ @
           cout << "error" << endl;
    + D7 S( t9 C  L$ q6 I+ ~3 `   }/ j8 G! L, A( h: D
    }$ p9 ?$ I; B# y% L1 O$ k
    char ReadToken()6 M+ D2 F9 {8 Y7 a5 n& D
    {
    ; {+ P; N. t6 M' C0 h( w6 r& O   return token = str[cur++];
    - \- C, L9 p9 Y8 ^& D& F& m0 G}4 W/ q  }8 c3 H) [$ V
    bool Match(char ch), X+ E8 Y' h+ z; Q8 f  }: V! W2 f# \
    {7 E) W% ~, b' \- I" Z5 O- P* o
       if(token == ch)4 ~9 R5 z8 b0 L6 n6 R9 n, b
          return true;
    2 V2 G+ x: k' W# O4 m   return false;6 G. [! l, I' N9 ]2 ~$ x3 {, i
    }
    : E- H9 L8 ^3 {. l7 Hvoid IsSuccess()5 p/ d! Y4 h1 G* k6 s1 f* M
    {
    5 Z3 `. R( I. |4 @/ e   if(Match('#'))  M! T2 r# i* `/ M" P
       {
    4 W9 L2 ?0 W* h7 N9 v' s: X  {  d3 o! u      cout << "success!" << endl;* E$ o) C* f- r8 n
          exit(0);
    5 R- C, R, ?0 B   }
    5 y$ N+ S7 w" o# O}
    "真诚赞赏,手留余香"
    还没有人打赏,支持一下
    楼主热帖
    帖文化:【文明发帖 和谐互动】 社区精神:【创新、交流、互助、共享】

    该用户从未签到

    尚未签到

    发表于 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-19 19:26

    Powered by Discuz! X3.5 Licensed

    © 2001-2025 Discuz! Team.

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