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

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

递归下降语法分析程序

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

    连续签到: 1 天

    [LV.2]偶尔看看I

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

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

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

    ×
    属于编译的,内层的东西了 呵呵  I! ]9 a% b$ J/ R

    % \3 f7 B3 B9 b0 w& `0 ^* b9 j1 Z文法G[E]& B& F& U4 d% K' c3 z4 m" N) L6 Z9 i" V7 L
    E –> E + T | T6 S& X% w/ [5 ]' q
    T –> T + F | F
    ' L- I6 t& W$ n8 g! [  hF –> i | (E)+ q; b: u( p% G3 y0 }1 L% S% q7 w
    % f+ I6 G4 o2 ~% w  Q
    消除左递归1 }! |3 _& T- }7 X, q0 w
    E –> TE’4 h8 \: z' }" s6 k  j
    E’-> +TE’4 V! Q  q7 V% n7 o& n$ I' E
    E’-> ε' M) O7 D% d% x' r
    T –> FT’5 F# S% e! u0 q& Y/ {5 n+ E; ~' L0 L$ W
    T’–> *FT’; ~+ R% s7 B" t3 Q) G9 a
    T’-> ε
    " ^& Q! g9 K$ PF -> i|(E)
    0 w: x6 I( I6 O5 {( G' f: t$ a, g; z
    : `0 w3 }. x5 Z, z( B8 r8 W9 E编码实现
    2 y, B* I3 R; s#include<iostream>
    9 I- P5 Y0 [0 J# c! Q5 C; ]# Husing namespace std;+ q1 s: K5 Y+ T7 w" {# q

    # ^: @* v/ Q, s$ O/ u" Yvoid E();
      _: R) g, G3 j. p5 H" Qvoid E1();
    ! H. y$ u- g; C9 t3 G# J. J' mvoid T();; ]7 R* e" n# K% n- S
    void T1();( z# M, T* C; A) E6 @
    void F();
    ; m) H( t' s- x9 c. R0 K0 Z0 L  V& K5 l7 y
    char ReadToken();
    . S6 S0 T; x+ t( z- w- k$ Bbool Match(char a);
    , s' Y" S& F) f9 b) f& pvoid IsSuccess();
    3 X4 e# L  f& H, Y) {& Z8 k
    6 g+ N8 h. [' W( j- H! _char token;
    . Y1 A0 {3 y* h) N7 O% eint cur = 0; // 当前字符索引* m  S; b0 @  z% R" O
    char *str = "i+i*i+(i*i)#"; // 语句
    ! g  [$ D& L. h
    6 B; e1 n) D' K7 q7 A* M( h3 Svoid main()
    / H3 W# J& T+ A6 ?+ ~- f{
    ; g* H0 J$ `: `1 U- A    ReadToken();
    9 J, L3 N$ u$ h" ~% w# Y% u5 x   if(!Match('#'))4 o# ?. f3 Q  `- s" V
          E();8 g. _3 p5 h, ]" S
    }
    $ N% |; J4 Z" wvoid E(): G6 k4 O$ R$ s4 U* C
    {
    " A' l8 s* O5 E" W% R   T();
    ( _/ r6 S4 {8 Y  h5 t$ P   E1();5 X; j  \$ e+ U' t/ W
    }% N# l! H7 P+ H$ z  P- ]( [
    void T()& R+ Y9 n, I! O* C, J
    {
    4 h0 ^5 B! s8 F/ ]' k4 N! N  Q   F();
    ' V) o9 s9 W  U( H0 [0 k) h   T1();
    " s1 s% ]; r: Y3 b) q1 L}
    + q3 W& V+ E0 d% _void E1()& C& h; t) m: H! g2 H
    {
    : D8 X) \# _/ f; P   if(Match('+'))
    ! {+ R1 u( w# {8 |1 b0 M1 c9 I   {# f8 ?, `" c+ q
          ReadToken();
    : A8 \. ]/ T6 Z7 y4 Z      IsSuccess();
    $ V6 {. |) C  f) c7 N" _' H* I  r! ?      T();
    & b( f  ~1 t# j  B$ V      E1();7 C+ Q/ T) A; M4 s, q
       }
    ! C! `9 {) F6 o, @* Y}
    9 @( C3 _4 k% C2 i: h; J! @; e" Xvoid T1()
    . K, A4 S. Q/ N{
      G" j# n2 c8 L: s6 @& O; N   if(Match('*'))
    4 W: q* d# P( w9 z   {+ m1 O2 A5 v/ L
          ReadToken();
    4 y9 a8 A, ~' o9 K: [8 t      IsSuccess();
    : h; l: w6 C' c( z- g      F();5 B5 U& D4 y1 D6 Q
          T1();
    , s5 I4 p9 ^' A, G( H' H: E5 A   }; E* n. U4 B/ L
    }0 ?, R6 V7 y$ u3 R
    void F()2 z0 t1 I6 u' j# C+ X3 N6 z
    {
    ! d/ f. z' Z2 f# v) [7 n   if(Match('('))4 G& [2 r. ]7 J- h3 W' u. o- H
       {! f: h3 Y& v- A( @8 k
          ReadToken();
    + [: o7 H2 N, o0 Q      IsSuccess();
    6 ]# g' e' Q! U& y      E();
    7 G1 E5 t+ a# }0 F, O$ W  I      if(Match(')'))
    4 H) N' D7 r0 r+ N5 s. p& T) @      {
    : T5 a: b/ @3 w        ReadToken();" }$ d3 i$ m+ W& R
            IsSuccess();
    : \) N* v" q7 k& h) ~/ Q  g3 h      }# s; Z* w0 i, K2 N) ^% d
          else
    : ^/ B5 W6 `( o  Y1 p, W& o      {" w3 o3 n, h# X4 `
            cout << "error" << endl;* O5 i; U: H% h* C
          }5 ^  f; t$ j# T/ B
       }( q5 \  r( `$ |  d- i
       else if(Match('i'))( Y( q+ N0 Q2 Q5 ?3 ?- V9 K3 _: ~* F
       {
    + _7 T) F2 j4 i4 d  L! L( {      ReadToken();$ F& Y  N+ H- y' Y& |% |
          IsSuccess();9 X, K. E, b/ ^+ ^, a2 p0 ]- H+ y  G
       }
    ' Y0 D+ }, ]  N! l4 m, c   else if(Match('#'))
    1 P, A2 g/ S3 Z( K/ M5 m) H8 M   {( y# M& i1 \9 j" t" u+ L
          cout << "success" << endl;3 r$ k: T9 B2 t( s& [! }0 L( }
       }
      A! R* ^; |2 X* w7 L% m   else, v1 G+ ^( `! ^0 x8 {
       {
    * `% c: c2 K2 L( }6 S4 s, F       cout << "error" << endl;
    7 A, l0 `5 w7 u, |1 j   }
    3 x  }; H' k( [}
    : A: R' {0 c# k4 E$ Mchar ReadToken()5 N" ?2 Q7 R+ X* f9 y3 o" s/ ^
    {
      S& e8 M/ ]5 r   return token = str[cur++];5 w% m% Z2 q4 Q
    }
    / T9 |' {- y3 N8 Ibool Match(char ch)
    ' n" e5 r; m  ?' h: f9 k{
    ' h, `$ k$ V  H   if(token == ch)% |- j, d# l) V& g9 i( d
          return true;
      n, A7 p1 \# d   return false;
    % M/ \2 h3 M# |8 J" `+ F% j}# N( ^! C9 v' ?
    void IsSuccess()) E7 X) ^3 {. J2 D" y. G. b
    {8 T% {* ?- w' A/ t) T8 g0 u0 @
       if(Match('#'))5 k. J! j/ `3 p+ k" Z
       {& i# E5 P( _% T8 ?# q1 L7 ~! c2 Y' ?
          cout << "success!" << endl;5 _* M  ~5 s6 G% D
          exit(0);
    1 i; D/ V$ p, p' n. `* u  Q   }1 E' D0 j+ j0 ]
    }
    "真诚赞赏,手留余香"
    还没有人打赏,支持一下
    楼主热帖
    帖文化:【文明发帖 和谐互动】 社区精神:【创新、交流、互助、共享】

    该用户从未签到

    尚未签到

    发表于 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 15:11

    Powered by Discuz! X3.5 Licensed

    © 2001-2026 Discuz! Team.

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