TA的每日心情 | 慵懒 2016-4-21 12:07 |
|---|
签到天数: 3 天 连续签到: 1 天 [LV.2]偶尔看看I 累计签到:3 天 连续签到:1 天
|
|
马上加入,结交更多好友,共享更多资料,让你轻松玩转电力研学社区!
您需要 登录 才可以下载或查看,没有账号?立即加入
×
属于编译的,内层的东西了 呵呵
( 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. ~
} |
|