TA的每日心情 | 慵懒 2016-4-21 12:07 |
|---|
签到天数: 3 天 连续签到: 1 天 [LV.2]偶尔看看I 累计签到:3 天 连续签到:1 天
|
马上加入,结交更多好友,共享更多资料,让你轻松玩转电力研学社区!
您需要 登录 才可以下载或查看,没有账号?立即加入
×
属于编译的,内层的东西了 呵呵1 b8 \5 G" P; O/ Q7 Q
" D. }3 U+ b( J. ^* g0 u# |
文法G[E]
7 h* @, y6 @+ WE –> E + T | T6 u( Y+ m- G9 d+ i6 W7 ?
T –> T + F | F
' D. X' V( ?1 i4 W' DF –> i | (E)
" d1 }2 G7 m/ w; i/ {# ~- r! S. T$ L( o! r8 E; i
消除左递归/ ~$ j2 s* I7 r; p8 ~/ q. f/ ~
E –> TE’6 ?3 m! I5 J4 ?' g5 r* b) G
E’-> +TE’
" d' k9 M2 a$ s4 L8 b1 kE’-> ε) ~ O3 i' a1 D0 k9 z) z3 z
T –> FT’
& o* b1 ~3 m/ }: T, bT’–> *FT’
# U N5 I9 q- V1 BT’-> ε
# R" Z( n/ y- E2 LF -> i|(E)
9 [# A4 u% |0 ]( `) M4 w: W8 ]6 Y/ ^! R& m S
编码实现
% c1 V9 O0 V u8 f/ X#include<iostream>- T l" J2 x- F! g, k
using namespace std;
" V1 f" F) T5 Q- M3 k5 p
0 ]: Q- n/ D8 ^0 [5 } jvoid E();
+ y$ ]/ Z$ O4 D, Y' f$ _void E1();% _5 C7 Q. B) _8 h$ H2 p) D
void T();. b1 k, e K$ e, a9 E
void T1();
- p6 r) {# `$ N$ U8 Zvoid F();
1 J( A7 R8 {% l" F) U1 o9 K
( D% N. E) M4 N8 Z6 u4 |char ReadToken();5 t! G5 U; W, k G- M
bool Match(char a);+ A, G7 R5 t" L/ k
void IsSuccess();" p8 U8 \% C, K. Q3 R2 e! |
7 H& G% ^6 q, P: Q4 ]
char token;
$ ^# R/ i" a8 J0 J5 Lint cur = 0; // 当前字符索引3 [" _" k0 {5 X' U2 C
char *str = "i+i*i+(i*i)#"; // 语句; W' I' l# i4 L* g% S- O4 `( v, i" J
. X" g7 H& B8 E! v, fvoid main()0 q" o# W+ O k( b8 C
{2 Q0 l! U4 b. `! h+ g6 Z
ReadToken();
, M0 K4 h1 f+ ]0 {# s8 L if(!Match('#'))/ T: D0 ], c% N! `7 V
E();8 L; f$ [4 A! Z( h2 f6 `& S$ y
}
: }5 S' ]& b; h" ^9 Svoid E()
& H: l% Z3 m% J/ p{6 R# c) a* ^4 n( r% }; H3 |' S
T();' b6 G% l) O$ V2 o, h! S2 M1 L
E1();
* X0 G9 {3 ^0 @7 ?8 ~- D}1 n7 E, n, W, y) Y5 Q& V- U8 B
void T()
" {2 k* o9 J1 v{9 |0 S5 d4 b9 T6 k. x' n1 }. ?0 J. z
F();
/ R5 S3 X- K$ k T1();
5 _$ m: }- i' n3 X' N}
$ V Y/ ~/ i. M% _% Kvoid E1()
% T! H# x, @* K9 Q{# \ t' b$ n/ \
if(Match('+'))
" u7 H+ B0 j# h8 ]# P' C {
( j$ o) L3 m9 Z8 r, Q ReadToken();
) t! B8 V; ~ [9 H8 k" u IsSuccess();
, ~" i& M% [" z: ~! k T();
; A6 E$ }2 \& u: q1 k) n9 g5 B E1();
/ n( L, H: n+ E _ }
% i0 G3 l2 c' d1 w% Y+ \}
. @2 p, Z' U( |1 Q. r h$ Xvoid T1()/ Q; L: V2 j8 k& f" a- k
{
+ s4 t* `% i) j2 D3 G: r# Q if(Match('*'))
6 {: g$ b: M; h {
" F8 k6 x/ ^2 \. e ReadToken();
% b& l+ j4 _( x IsSuccess();3 W4 ]$ }# E7 f
F();
& V6 M p/ i" h9 P T1();
4 C1 y1 Z6 J3 J) I( z/ E }: w \, |# P/ T
}
% U8 L, ]( O3 cvoid F()
4 S/ e$ d4 h& \5 V# [( q{
" H" E5 Q- a' O, \* t' L, r5 e if(Match('('))& r; s/ w9 P& g
{. @+ d. _& c2 ^$ X
ReadToken();% w) [! b$ D9 w" d) W2 `+ Y. h
IsSuccess();
* R" M0 n3 L. \ E();
( E: s1 m! _) w) o$ B if(Match(')'))
- }# F6 N4 {# \/ i( e {
! L5 d) l$ a/ Y5 b0 \% Y' | ReadToken();4 t# F/ c- C0 e+ y2 Z) B+ b
IsSuccess();
' N$ M, H- Z+ i- |4 I8 j }
% ?8 i5 `/ F+ e6 e else # r# `1 @* y7 d
{2 M$ R5 ?9 Q2 y( f/ d( u! A5 T
cout << "error" << endl;* s/ _" R' ?: c; O' K' b
} w6 g) ~ f& p- G
}; Q, p& r" C- c
else if(Match('i')); R+ l9 _ D) b/ D2 w2 p
{' ]. i. C0 |) I- k! h! s* `
ReadToken();1 A7 T2 E6 z* |4 Z/ e
IsSuccess();
# m( \, \% S; Z0 X% } }
1 R7 U9 h/ Q3 T/ F" V else if(Match('#'))6 F6 q, \5 N" h4 s) d8 f
{) d5 s% Q( u2 b" J
cout << "success" << endl;. {% C* h6 |) y; r3 c8 i$ H
}# N1 Y7 u6 ]2 ^- V N
else
( o k2 E! }# _6 v" c# Y' [ {* w" \8 W+ V7 W0 W
cout << "error" << endl;, B( v$ F: N: D. C8 ^. E! ~
}9 Z! G% g8 n8 p* L
}
- r5 E( R6 n; Q& f d" @char ReadToken()
7 @" X( H0 D. X. L{; `5 E0 D7 J4 y2 [# A* R
return token = str[cur++];+ u5 w0 B( [' W0 h
}
4 O3 b& x+ O& X' Vbool Match(char ch)+ k, v8 a1 K* ?! U/ S; H1 c% _9 ?
{
. ]- R1 f0 u! u; @- t* b if(token == ch)& g+ Q1 Q8 }1 o' q- i7 C
return true;
2 r6 ?1 v8 k! ] return false;
; J: m( S( P, H, n& B: N}
' g2 e! J& |1 S' E, P. ?$ d3 ^void IsSuccess()
1 P7 d; n/ f9 V# b7 x* b{4 \2 u3 E* \8 Z" g! `) I. W
if(Match('#'))
0 p; g' _% U/ y2 W {
# o# J3 m2 w" D! O7 T cout << "success!" << endl;
4 S6 f- D# g `" W3 E0 K exit(0);
3 H7 m+ ^$ O3 ^1 K! ^' D4 _ } Y- Q* s* ~! I) G
} |
|