TA的每日心情 | 慵懒 2016-4-21 12:07 |
|---|
签到天数: 3 天 连续签到: 1 天 [LV.2]偶尔看看I 累计签到:3 天 连续签到:1 天
|
|
马上加入,结交更多好友,共享更多资料,让你轻松玩转电力研学社区!
您需要 登录 才可以下载或查看,没有账号?立即加入
×
属于编译的,内层的东西了 呵呵
. z$ C; i/ o, n) Y- |4 v5 I# J! H' ^+ [
文法G[E]( u! r# H4 w* f; O1 Q
E –> E + T | T
" @: X3 }- U! R9 C& KT –> T + F | F# w* A( O6 d! i# p
F –> i | (E)* s* E m/ h5 q2 y* S
P5 @' i5 C0 I1 ^2 }/ G
消除左递归! ^' H3 e2 z: q8 i4 Q/ K4 |
E –> TE’
: U* U( k/ D# A" v5 r( V; P& LE’-> +TE’& b4 H# i. f+ Q/ ]& c; u; ]
E’-> ε
* H. V% |/ M' D2 C! [! L+ cT –> FT’6 f* m1 ~7 W" @3 N& k# E
T’–> *FT’
( W( U2 |% [. n) a1 R6 AT’-> ε; v3 C& w- J, A
F -> i|(E)3 c$ M+ k8 a% \9 K8 b" A! }" B
1 \. u5 v, ]5 x' _4 L编码实现
9 D3 S6 ^' q. D$ F$ O: p#include<iostream>
( C9 z( `' G! `& Yusing namespace std;
) \; E: n3 Z( j. ?9 u. Q
8 D& a; ^( {3 H8 h4 }5 J4 r- Jvoid E();- c$ C8 \2 [! \1 w4 q
void E1();) i* I4 V" x5 T3 H
void T();0 |2 D1 r* }4 ^, D, V& j6 P
void T1();* ?/ J2 v7 f" P+ a/ Z
void F();
: w* c# S2 H2 m( Q0 W6 p u3 ?8 |( ^
char ReadToken();
' h* n7 L# o/ e! n* B7 jbool Match(char a);) L) K: u' o. i% M0 p6 t/ u* l) K
void IsSuccess();0 k9 E2 \+ G) s# b
( b0 C2 z. c+ X" ]! Schar token;! T/ g; J9 V8 u, C Z! `
int cur = 0; // 当前字符索引 Z# a( K/ D! _1 t5 d; o( v3 G$ z
char *str = "i+i*i+(i*i)#"; // 语句. o* v6 x) z& [; X2 c b
& [; c5 o9 D" R% @% U
void main()9 ]; D" |+ u; Z5 d& v
{% y+ G- M! T" t4 b! c% C
ReadToken();
4 x% ]/ n8 b) v) I* P if(!Match('#'))
8 d, B! {( D! l+ y/ V0 d E();; }9 s1 N+ `: z" H# b# j! s$ {
}
2 b: A" _7 o- e( wvoid E()
* `1 h. `. ]: ?5 p$ Q) f{% s/ I: \8 E0 }4 V; i
T();
4 B) w0 ]8 F$ w& f% K E1();
( H' f) [2 a) e}
; O' D# n% x( W6 Avoid T()7 |/ a4 |- q3 Y$ i
{
2 n, l* r! h2 x- A# `& i' U F();! q6 d2 O. [* \" I
T1();9 K1 \4 Z4 X6 f( ]. g
}( k1 a4 x, \# @2 U
void E1()( h# ]) U7 L1 @% B, E3 S2 ]
{: f% A1 W* n) h( w4 t1 n% h5 S- S. q
if(Match('+'))
5 C, P& g8 }. \& s" J4 ^ {
) S% W v" }. Q2 W1 \& D6 Q: A2 f ReadToken();
( z6 H { j: P# X q; v IsSuccess();
, _0 j- u. L3 l3 F+ C T();6 z/ L b! V8 h2 [
E1();
8 P2 x( r/ O9 Y3 t7 w- o }
5 n5 n% d$ Q5 B}
3 E* Y: u! `) X- J+ m) U& {void T1()
1 h2 w/ a% S( H7 O; I; b6 q' B' C+ ?{
: }3 j# ~+ |% [: C) I- Z/ O' q if(Match('*'))
- q7 c1 R8 q6 F; p {7 k2 | t/ I0 [* s$ L: A2 I, f; P
ReadToken();0 [) D# `+ E3 [- @3 A Q2 Z
IsSuccess();
4 H) _" j1 ^0 u/ k8 W5 v3 ~ F();' U/ f/ O" M h/ C
T1();
/ W& l. C6 u, E3 P! [9 t2 ]; o }/ V, y3 {2 ~# H: J7 o2 g4 _
}# k* A c9 j% P& x7 k
void F(): z, T4 ~0 y8 U
{' w1 B: @+ }( I" s* {
if(Match('('))# d8 N' l; ]$ G; ^$ z% h* M
{
! a0 B! {8 f- Q7 M! h9 n ReadToken();
2 D9 _; ^5 W2 r' } IsSuccess();
! |) M9 w' I% k- o( L7 O E();
; Z, e6 C* B+ M2 q2 ` if(Match(')'))
9 a" L: L# @7 t0 z3 L- X {
6 d; t6 _2 ]7 }/ ?! z ReadToken();: U! ^ q2 S' {, }
IsSuccess();
7 l% u" U. ]- n& D0 `4 P& y }
* g" B; ? j& b4 _, w" T( z else
+ R- S2 @. x& a$ K2 K# f% {0 c {/ M. r* M6 a3 m" ~$ W: [% [, i
cout << "error" << endl;* n6 l: X7 S/ i% ?: z
}
9 d6 i% P" N& B } G) m, W Q. _" q2 `% J
else if(Match('i'))
" ]2 m1 L9 c# w/ ~$ |' Z {" }0 v1 j; f9 |
ReadToken();
3 T5 f3 V+ v0 O- u IsSuccess();
2 f0 i- h' O8 `; }& r }" A p$ P& _* j3 a6 i/ F
else if(Match('#'))5 C; b5 L9 Y! U1 O
{
7 L8 K- w* ?# T2 r1 X6 H cout << "success" << endl; x4 S9 i+ B8 O2 |$ J& [
}
. c2 o7 G8 I; i else4 a& [' Q9 M% Y: ] e
{
; @/ W3 `0 B7 f/ Z8 F- j cout << "error" << endl;
* ]$ T9 W6 q0 ?4 ] }8 A4 S: U1 S1 D
}& }5 G4 q3 J: K* ^
char ReadToken()
" i3 H, ~+ r! d# e' h# t X{
- C9 ~- n2 j' p- t8 ?6 S return token = str[cur++];
' o$ A1 S- C3 e3 U: ]6 f6 v; v}. N* p e }. Y: I! @# Y) B) h* s
bool Match(char ch)
& L0 K6 v% S0 q C0 Y8 F{2 t/ z: N" `7 R1 `. G9 ?9 p
if(token == ch)" g' P: z" `1 \. C2 d8 `* c# R/ H
return true;5 ^, R( B* L: \+ Y; s8 I6 ?
return false;
* j8 n% A. J% `}' l7 D _* f& V
void IsSuccess()
0 i; o# u/ G: C0 L O{6 |8 @5 [2 I! d$ P) x2 R
if(Match('#'))
W1 f" m- k7 V3 W( o; ?- e6 N {
+ f% d/ `0 C; f- n# O. l2 [ cout << "success!" << endl; \6 N$ J1 Y, M; n7 L, @
exit(0);
4 |+ h2 l* d% R0 w0 \% m$ d7 o }
" u! y. d4 \& _1 \1 A1 B} |
|