TA的每日心情 | 慵懒 2016-4-21 12:07 |
|---|
签到天数: 3 天 连续签到: 1 天 [LV.2]偶尔看看I 累计签到:3 天 连续签到:1 天
|
|
马上加入,结交更多好友,共享更多资料,让你轻松玩转电力研学社区!
您需要 登录 才可以下载或查看,没有账号?立即加入
×
属于编译的,内层的东西了 呵呵2 g8 A5 F, V: H! {) p/ }2 i! c$ b
3 o& g. D+ W$ b1 d g! w) Q
文法G[E]
; ]; R7 f- j4 x* R" X0 KE –> E + T | T
P: A1 F/ B; eT –> T + F | F- T2 G8 X& X( V" W1 `
F –> i | (E)1 E' Q9 t1 K. I) V& d$ O) x
' o) b- |8 y, H3 I5 d2 x
消除左递归6 Q7 J/ k7 W6 b, [1 c% R* ^
E –> TE’
8 J; I9 b5 J) @2 }1 S9 W5 v# YE’-> +TE’
6 x. O( ^0 m$ {. e; `E’-> ε8 U' Q3 Q% y+ Y! ~8 R
T –> FT’
" f% t! G8 _6 D. U, U1 i1 R, pT’–> *FT’" R/ p6 Z8 h3 B# I
T’-> ε% |9 V( O( H+ J | C9 y# f
F -> i|(E)
; ]# Z8 C; i/ m. w$ J+ x
1 B7 I7 C( e( |% ]$ Z) M+ r编码实现 ?- h& M9 s. ?
#include<iostream>, R* G) @" A( J0 I( M: }$ C! s9 T
using namespace std;2 y( H, F e1 f2 c# n* S+ o( l: |
$ ]) G J3 S9 j. D7 x3 w
void E();- w; L' S% g* V! t
void E1();+ ?9 [+ l+ L! E: D. \1 p. b
void T();* f% G6 S' @4 I: p, U8 v
void T1();
' {6 j" m* F5 P {. h; Kvoid F();4 j' }6 l( }5 M1 t
9 b1 A) y" F" W
char ReadToken();7 k, ^& g+ M2 u% P% i/ F4 S
bool Match(char a);5 V8 D$ F- B" d1 x* g* P
void IsSuccess();9 ^8 X6 o' q- S. M- W
& m2 ]% U; S' Z; z3 a* F2 qchar token;0 c) J. h4 E6 K1 j: H
int cur = 0; // 当前字符索引
% G- m \5 Q3 h5 tchar *str = "i+i*i+(i*i)#"; // 语句
+ W. Z O, ^% ]& b% T9 W# c2 T! M% F' n7 Q) m0 r; U7 O
void main()5 `8 \- G& H3 S, }# A
{1 Q# y) y- b5 Y. ?* M) @- ]
ReadToken();6 d; R4 a' e- X; d8 X4 ?
if(!Match('#'))
4 e2 Z* S6 M* k) p1 S0 ^( n E();! j' R" Z; D1 E9 t/ k4 W: l, z6 u
}6 e$ ~6 k2 _0 I* s8 O" K/ q: A8 U
void E()
^* l+ r5 d) N; m3 E- c; M0 h, X' c{- q, m# @2 V \7 r# B0 z
T(); Y( B! C: H8 G; B+ z$ O% P- Q
E1();
3 T. H% w* V- [, Q! w; N}& W; {, ^# G( `- J* E
void T()
% X1 g( M/ H j2 U{
# M# S9 t* o6 {' M9 g% p" e F();5 k' ]2 w, P& n! x3 [ T! G& @$ F( R
T1();
' ~, s& p& s1 ^% G}3 C) E8 u; B# c- ?% v; S
void E1()
8 {; r- u1 R; e' W4 @: I$ f{
- c) V; V6 K, G* s* ]8 h$ u+ z if(Match('+'))
2 q+ y' C- [" E* h0 |) g {+ X" ^2 e/ L# \3 r* O
ReadToken();
5 y: q U0 j2 w8 R. P IsSuccess();
4 m- g: G6 ] w. W+ M) w' S T();; p8 l* k: C# {9 Q/ i0 g5 G' U
E1();' O/ y) _( A: {% H# c1 ~ K
}
# k! ]# z- D6 [. A/ z0 d}
. i" u, l1 `+ l& {% W5 A3 ]' B5 Uvoid T1() Q: w& ^ |/ Q& b4 \" m
{
! W- ^0 E; r" C" A6 c7 |) A if(Match('*'))+ i8 L" x) Y @
{
% r5 `# C9 s8 N6 e3 d2 s7 I ReadToken();- R' d3 ~6 ~$ J J7 A
IsSuccess();
) h; E X3 i) Z9 n5 k) c F();% Y" D6 B: V$ P0 A
T1();
/ t8 B& s4 Y* h0 L }1 r7 J6 Y8 G3 M# o$ E; h+ I
}, _; ~5 z7 ~* q5 S3 B* }
void F()- o7 p, p) N2 ~6 u- ~( \: U
{
/ e4 d) T6 n) O if(Match('('))* B2 Z: v% M# T
{# O" Z& f% ` d K2 u3 J* @
ReadToken();
4 `+ h- |1 R$ G1 A/ J% K7 K IsSuccess();
- d9 z1 O2 R# C$ M- \# m E();% V* x: E% Y2 R
if(Match(')'))
) [& G* @6 x" x: ?% u0 P: w {
/ g( {2 j# f. l ReadToken();$ ^: v$ j# |- ^/ E X2 \ @7 ?
IsSuccess();! K0 X5 i0 S, L+ R8 V7 N
}
! S8 S$ T2 {" X, b: Y8 w% T4 }; P else G! Z2 ]$ N0 h1 ]; b$ ?# {
{
5 k' @# F, ?' R* D0 q. ` cout << "error" << endl;) U. _ n4 \% @0 M& o7 J1 {
}
: p1 ]4 J" \1 v2 i ` }
) N( z) w, x1 u! [ O% S" \' K" N else if(Match('i'))
C* Y& v) N4 K: D) N. D6 V+ X {
- a3 P6 ]0 v" g& n ReadToken();( d3 O' M+ A f7 X, Q& a
IsSuccess();
! j7 d9 C' v) k }
1 A3 _. G1 \8 j9 a else if(Match('#'))
" o3 _: w( A+ c8 x: Q+ ] {
" l B: S7 }/ N# Q8 n& d6 O' g9 P cout << "success" << endl;7 a% n5 g2 Z2 y8 J9 N' v
}
5 ?" }1 }5 W$ g0 F- w A! P# r else8 n' X* Q* m5 E x
{0 C8 T! P4 N: ^: f4 A
cout << "error" << endl;
; j& u" P, X" e" s1 @7 D' Y- l }
5 \* P& T9 b K* ^" T: q}; W Z+ e4 Z/ r
char ReadToken()% t; l8 q+ f! j8 g0 X; C, d, h- K. l: z
{; G7 Y$ F$ v% V& C! r ]8 x
return token = str[cur++];
! f; S# p5 @0 u& q6 {}
7 w2 L7 b; x: q! t) E1 `5 sbool Match(char ch)6 o) H( `3 B' H0 p4 {# E
{
8 k' I' m5 E7 M4 q1 l" E2 h# \ if(token == ch)
- [! J4 [3 H; o! b3 P" e+ | return true;
0 ?$ J6 `7 r) l/ v R return false;# V( z$ q8 \: P' ^$ l. a
}. R. ]" E( |; K g
void IsSuccess()
8 w* }9 M# }* I$ K- B; T{
K& _0 C( n9 r/ Q& h6 \1 P if(Match('#'))- }/ f( [& F% U `8 O0 U
{0 @/ h. H8 Z7 L6 n8 \. x1 y
cout << "success!" << endl;
- E6 v2 X# ^3 s! F- K- Y7 c. n exit(0);
( Q/ `" W4 `# W& X4 @ } y% d* i5 o' m+ s) j* ]' d# \5 |
} |
|