属于编译的,内层的东西了 呵呵 3 `! o' t2 J$ q4 I2 J # J. N6 m& x, J文法G[E]3 o! |4 x5 C, T
E –> E + T | T 7 L2 R$ g: J8 ?3 NT –> T + F | F) c5 {4 R$ Q, J. \" H' Z9 I6 L
F –> i | (E): x0 u' z8 g5 _3 T6 S/ ^
6 p0 h8 l! V% Y F3 g7 z: C消除左递归3 o0 C3 v! y" S1 W* @
E –> TE’+ l6 s U5 d# a# [* ]$ I
E’-> +TE’ # H6 b/ W8 L, yE’-> ε7 l$ ?$ [8 K4 \9 ]9 |
T –> FT’5 P/ t$ n& e" O' W6 k$ d
T’–> *FT’, b. R, y$ h; r( A; p" \
T’-> ε ; I/ D% a9 _; Y( I6 yF -> i|(E) # R3 ^- {/ k4 d& J6 B/ a H4 Z8 K. M
编码实现0 h: A" e( f/ {& h2 e
#include<iostream>6 Q3 w# n. t X0 N
using namespace std;) k0 x1 m" s2 m
, b! N! l* t- _void E();% {4 }4 R; `! _' q* L" o" t1 I
void E1(); t3 \8 {/ R% b) [; \6 A
void T();# r) o: j$ U3 s! `$ R
void T1(); 6 l) i$ L% @! j8 o ?" jvoid F(); " n. Y: R6 s& r( X8 a8 C, F . W& @6 |7 J% ]! {char ReadToken(); 4 d8 l+ T7 [. r V; d2 jbool Match(char a); % J. ?( }& t! z5 ^; i; S" yvoid IsSuccess();" i! q* h! t, Z& V& W
; Q. M% I6 P. C
char token; 6 d) {9 m0 ?. X3 t, e: X, Xint cur = 0; // 当前字符索引 : v/ q6 }8 G2 ^$ gchar *str = "i+i*i+(i*i)#"; // 语句 S) F6 z: J( \, f# J: U' g% J+ t8 {5 ?% I. j& b
void main() 1 V9 Z* q. i8 H$ q# |' `{ 6 a6 Y, b& N4 y b3 I ReadToken();- h) p- s9 h6 m; ? w2 }' F& f
if(!Match('#'))8 O/ r5 ^1 c$ K; i7 n
E(); - j$ j% R+ w! v' Z$ }} 7 F0 _6 f' r1 S; v I0 Y1 svoid E()6 P k+ Z. W1 h/ F
{: O( Q* _9 J/ ^1 ~' ?3 H
T();3 q; ]% I3 E; c
E1();! T u+ T- Z6 \6 u: ^' `
}- Q2 Z s0 L/ ~' j8 m$ I* A
void T()1 X: M4 m! G0 ?% F! s
{, T( F' T' y: c5 H$ m& V3 g0 F
F(); ' C$ \# q+ ?# `! a* m T1();2 x v1 K# I( c/ w4 a6 B4 @
} 4 n* H- }$ \+ S; H% D- d! f% Svoid E1()) C4 M; ?! B+ i; V. o r
{! v5 N2 ^( ?6 t2 ?
if(Match('+')) + ~# g/ x- U( X2 _- e {, ?7 Z6 @ K9 A2 j
ReadToken(); 0 o. a D& [0 g IsSuccess(); * _1 @- J5 g. \: U" B! c T(); ' z! |# T4 N2 S3 U3 F! w7 ^5 q% m E1(); : \9 C: Q+ O" w7 x }; k. Q; l" o$ b* k0 b* R1 H
}, `# \# p$ G; X4 ^6 R5 ~1 ~
void T1()$ k l$ V- d$ H o- G1 O
{ 4 {) j( O1 Z6 ^8 T9 w if(Match('*')) 6 n1 d/ ^( j: H {) \2 E( {2 w6 @' i/ r' b* \* _
ReadToken(); 3 q) z1 s w- \) M8 [! h IsSuccess();% w3 S4 R2 y) i" B+ f
F();# `# b% g# ^. @7 B# e7 D
T1(); + O9 Q( r& ?5 ~( y } - r' i* g1 o: J1 d}7 G$ | I2 \1 j$ k
void F(): L: d1 x" y- r8 q. \
{. f& ?. w% ?4 q T; f G B
if(Match('(')) & R1 B# H2 }* K { 2 ~0 t/ C# Z% _& S ReadToken(); 9 m3 Q3 }, ?. m, C1 b8 T IsSuccess(); - a6 X9 X3 t2 D- C E(); * b, n+ b: w. s! b8 H3 t8 g2 N0 y7 @1 C7 u if(Match(')'))+ Z1 ]6 K1 D) [; \5 y
{! E! h2 L. F- e8 G! c
ReadToken();* [) t8 n) Q* K- U6 K$ B! w1 {
IsSuccess();5 s, H n' o" o9 n/ @# ~, ?
}. C+ Q$ S, _" U# t( f: B
else / W, v) U$ r8 w# C9 |2 m { ! `3 w& Z j' G cout << "error" << endl;+ L& G; V9 |# }* a; ]0 B; t" t- _( e. h
} 0 ?3 E+ |" {/ B* { }, V0 s' F5 B5 D1 n- Q9 v
else if(Match('i'))1 [8 x7 K* S- l6 J( h$ F2 I5 C! \3 x
{4 n( Q# ]2 @/ {+ x
ReadToken();. k7 B% F; [- E" N0 ?7 h4 s9 e( w( F
IsSuccess(); B% ]" }2 ]; s } - J$ T2 [) Y5 P else if(Match('#'))1 b! P" B" a) w
{ " a' O8 y! O, |! i cout << "success" << endl;; C; G Z: Q$ V! |& H7 ^, Z8 [ Q
}3 g2 K$ f1 a5 y' _1 n3 u u
else. u0 d; y# b! K
{7 C' V$ y: x0 a' @7 L6 D; z, r
cout << "error" << endl; ' [5 j$ O1 N. O }, }, A _+ L7 O+ |. A1 Y* \/ m! K
} 0 H! l3 c @8 X+ V* ^char ReadToken() / |. \6 x W5 N; y' [2 C4 z& j1 _{) F% D$ m6 @3 U/ N/ j" C
return token = str[cur++]; . @/ x( |7 d3 b% r, k2 U} . H4 N- Y( [! d3 ~bool Match(char ch) # q1 }) O; Q. X+ y+ q3 E6 h{ . ]& K# b3 G: {$ x+ Q if(token == ch) 9 h: C) ?9 \! y4 \( \: O return true;4 M/ H5 w8 M0 Q5 f2 _: n2 O6 u
return false;" L3 F- H- z! v9 w* ?$ y# K; t
} 6 R8 t# g2 y* h/ B( v. pvoid IsSuccess()3 s1 T# r' o. }" |
{ G k. u2 w% F( L
if(Match('#')); s! G( A- ]- h
{5 v) f: y$ s0 M. K! E* u
cout << "success!" << endl;+ P, z" Z/ J% ?1 \/ w1 S
exit(0); 8 Q* D, e8 C- F# ?. z* n( W } ( E% z6 r r) ^}