TA的每日心情 | 慵懒 2016-4-21 12:07 |
---|
签到天数: 3 天 连续签到: 1 天 [LV.2]偶尔看看I 累计签到:3 天 连续签到:1 天
|
马上加入,结交更多好友,共享更多资料,让你轻松玩转电力研学社区!
您需要 登录 才可以下载或查看,没有账号?立即加入
×
属于编译的,内层的东西了 呵呵1 i' S9 M8 v3 C# Y) k5 v0 E
8 m0 _3 z) @4 G0 ^2 u# b6 R* u文法G[E]
' e$ z4 [9 ]6 EE –> E + T | T
6 u# C4 n/ S* ?T –> T + F | F0 G/ j& A/ P% S: U$ B
F –> i | (E)
1 j2 r! Q8 z: S/ M! i4 A, f7 ]- W" t& r/ F& a
消除左递归
+ i7 W0 U: i, W0 c# n; S; D+ A ]E –> TE’
8 d0 N( N2 I5 H$ B/ QE’-> +TE’4 B8 E" v& s, X ^$ X, d8 ?
E’-> ε: d0 R1 G- Q8 C. L
T –> FT’& a8 l3 |9 W- x# Y- h
T’–> *FT’
' w: x' ~6 D. Y3 R2 ^3 v0 HT’-> ε
+ ?1 N+ a1 u) i* K1 tF -> i|(E)5 N# H! G* L5 { u4 i
3 Z) k, `$ j# t: N/ T4 g: p0 v7 S
编码实现! O3 E3 e6 r/ |9 F# c7 t
#include<iostream>
: ~& I5 W$ E7 E' C5 lusing namespace std;; n% f. U" \6 \6 k4 k; f
9 B9 V5 V2 i# \' t2 d
void E();
# Z( c! ]% W. S- t' f! Dvoid E1();1 u* U0 J, W0 H$ k& E
void T();
+ @8 r: F* j* h5 O, p' a5 Qvoid T1();& }% v, |+ c& L) \' D+ J
void F();
7 @+ s, u! C- h4 G1 @
+ l$ z9 e* p/ d2 N- {char ReadToken();; v- W" s* t3 ?/ @% }/ \ {
bool Match(char a);
# B. d! X6 }% ]1 R/ n( f- X2 rvoid IsSuccess();
7 H6 `/ V$ z* D) j$ e- p
" ?+ J1 |" B/ q: \char token;
6 J: y2 ^1 e ^1 P8 v" e0 Dint cur = 0; // 当前字符索引
* m3 R l- A4 B I* tchar *str = "i+i*i+(i*i)#"; // 语句
% h0 b- `! V0 O8 ?; l* Y- ?; b0 P; l% _+ u1 w( l% r
void main()
/ d1 W+ m- z. I1 e{0 K( t1 [* Q8 C
ReadToken();
- U$ K$ K! S9 m6 Q if(!Match('#'))
& [1 F% f4 h( K a9 F E();) Q4 K6 F& L7 S
}7 e2 B& k* b, E
void E()* |( s Y8 o, n3 x5 i- z
{( t# V0 o- q; r. T
T();8 m5 ^$ F1 g4 e
E1();
9 u9 |. p& Q/ G. r/ x}
. v9 p I5 i" j2 ]) lvoid T()3 {; p J, a! R! r) Y6 D
{* B& [6 k4 {" ?: c8 h) e
F();
+ n; ^: c2 r# M) O; {% {% C T1();
% S/ M/ @8 N( u2 T$ Y. N* e}
7 f/ p( z0 G+ E! l& | y8 Lvoid E1()
/ _; m) ?6 k4 M q) G6 I{
/ u: e4 d. E, c7 N4 V if(Match('+'))
% u% o& b6 m5 U: x. ? D {7 t4 d/ J P6 T# g
ReadToken();
2 x' t3 R( x- E) a. g IsSuccess();
1 r8 @1 r4 e( `% z, u& d T();
3 |$ T5 y+ s( W# ?* H: G; Q8 p0 i' m; E E1();
& @* P3 _2 E6 ^7 s1 E }
3 Q W" H; p' B3 [& ]}9 { ?: x$ O+ D5 h9 @" S
void T1()
6 i7 e9 k# Y' U$ W{ w$ d8 H" n( L' U: O
if(Match('*'))
9 P s: E" m* H6 W8 ]6 v {7 l$ i( ~ t& B; i6 u' i/ \7 M
ReadToken();
! ]4 ], f: w) P3 ^% y2 f6 Q IsSuccess();
! }2 g' K3 K' _3 _ F();
5 d2 ^( o( J8 A8 ] T1();
3 e9 C+ n8 H- m* T }
. I; L5 Q- H9 ~4 U% s% t}
) I# B1 Y& m" r- R3 Bvoid F()6 ^' i8 O) u1 h, d
{! T; [) i3 z0 }: r; g$ L
if(Match('('))$ q. H+ K( {: a# o8 F' @( x; m9 J
{& \& X% U) Q6 ]) [: H+ l
ReadToken();0 O1 B# a3 ~0 x5 i. }
IsSuccess();
# U* ?% f# B0 e9 H5 y E();
6 t- T( k0 Z0 V" _ if(Match(')'))8 q$ w+ k2 y9 \. d# ?/ k
{5 B- _* l5 P/ q7 b$ q. j
ReadToken(); l3 D/ u# K! ~. t, G7 h7 |
IsSuccess();% M* X$ w) I$ U
}% \: w$ Q- x: Z2 R' y" \
else
, l% t0 f3 a. K/ \( [1 P* k9 \: N {3 d) ?6 B+ F: [$ K
cout << "error" << endl;
* V8 b+ }' u9 {& [ u( [ }6 L% x% f$ p% Z% X& o1 d
}
# @7 E! f. J# m9 \* x else if(Match('i'))+ W" h1 B) u" k* a5 p( h
{
9 q, z6 e( `. q- C5 G! G# ? ReadToken();
3 _9 E4 s6 Z) z6 e* A6 d! \1 H IsSuccess();& q# \' }# |7 v U8 ?
}
9 a, W: L+ X) {$ ~ w+ }, l! ^) r6 O$ y else if(Match('#'))- u# q/ F3 G5 y' S/ f2 r. _, I# E/ D
{
! { a- }2 V2 H! B) {/ F cout << "success" << endl;+ E4 r: N# ?# X" R
}
7 X9 x! Z) w! J else! J7 f- ^3 X( x; Y; G
{
+ K" o }" g7 H, x3 |+ e cout << "error" << endl;5 P/ ]& L8 _0 x" U1 ^
}
- f! @* N* l/ K5 f4 @}
( }/ B' d. d8 n- ~) R. Fchar ReadToken()
0 n9 h9 z2 a7 }, t. F{8 t2 a4 S$ J2 U0 L3 p1 D7 J- k
return token = str[cur++];
2 a0 u0 ~( g: J1 t; L/ @) i: Q) Y}% F9 i2 b3 b5 j( @5 N
bool Match(char ch)
$ D$ k8 e( O6 A{
* Q5 L5 s. _0 ^9 q. [ if(token == ch)" g# C* r6 M% a# V }1 S6 N
return true;
% D2 S o1 ~3 j- D return false;8 }3 r. u8 `5 d3 U- h' ~! j; x/ {( b
}( T0 v' Z3 P" M- ]* D
void IsSuccess()5 i5 p4 h7 L% c: D4 V' h3 k
{: g1 x' N& W, @% n
if(Match('#'))7 ]: s4 C/ `- I
{. X7 h' X9 m- v: }8 Q+ b* y
cout << "success!" << endl;5 T0 S' g5 l$ m* g2 M9 k
exit(0);( ^+ `; A; i' t
}" N+ b' `. n$ G& m4 d5 T
} |
|