TA的每日心情 | 慵懒 2016-4-21 12:07 |
|---|
签到天数: 3 天 连续签到: 1 天 [LV.2]偶尔看看I 累计签到:3 天 连续签到:1 天
|
|
马上加入,结交更多好友,共享更多资料,让你轻松玩转电力研学社区!
您需要 登录 才可以下载或查看,没有账号?立即加入
×
属于编译的,内层的东西了 呵呵 I! ]9 a% b$ J/ R
% \3 f7 B3 B9 b0 w& `0 ^* b9 j1 Z文法G[E]& B& F& U4 d% K' c3 z4 m" N) L6 Z9 i" V7 L
E –> E + T | T6 S& X% w/ [5 ]' q
T –> T + F | F
' L- I6 t& W$ n8 g! [ hF –> i | (E)+ q; b: u( p% G3 y0 }1 L% S% q7 w
% f+ I6 G4 o2 ~% w Q
消除左递归1 }! |3 _& T- }7 X, q0 w
E –> TE’4 h8 \: z' }" s6 k j
E’-> +TE’4 V! Q q7 V% n7 o& n$ I' E
E’-> ε' M) O7 D% d% x' r
T –> FT’5 F# S% e! u0 q& Y/ {5 n+ E; ~' L0 L$ W
T’–> *FT’; ~+ R% s7 B" t3 Q) G9 a
T’-> ε
" ^& Q! g9 K$ PF -> i|(E)
0 w: x6 I( I6 O5 {( G' f: t$ a, g; z
: `0 w3 }. x5 Z, z( B8 r8 W9 E编码实现
2 y, B* I3 R; s#include<iostream>
9 I- P5 Y0 [0 J# c! Q5 C; ]# Husing namespace std;+ q1 s: K5 Y+ T7 w" {# q
# ^: @* v/ Q, s$ O/ u" Yvoid E();
_: R) g, G3 j. p5 H" Qvoid E1();
! H. y$ u- g; C9 t3 G# J. J' mvoid T();; ]7 R* e" n# K% n- S
void T1();( z# M, T* C; A) E6 @
void F();
; m) H( t' s- x9 c. R0 K0 Z0 L V& K5 l7 y
char ReadToken();
. S6 S0 T; x+ t( z- w- k$ Bbool Match(char a);
, s' Y" S& F) f9 b) f& pvoid IsSuccess();
3 X4 e# L f& H, Y) {& Z8 k
6 g+ N8 h. [' W( j- H! _char token;
. Y1 A0 {3 y* h) N7 O% eint cur = 0; // 当前字符索引* m S; b0 @ z% R" O
char *str = "i+i*i+(i*i)#"; // 语句
! g [$ D& L. h
6 B; e1 n) D' K7 q7 A* M( h3 Svoid main()
/ H3 W# J& T+ A6 ?+ ~- f{
; g* H0 J$ `: `1 U- A ReadToken();
9 J, L3 N$ u$ h" ~% w# Y% u5 x if(!Match('#'))4 o# ?. f3 Q `- s" V
E();8 g. _3 p5 h, ]" S
}
$ N% |; J4 Z" wvoid E(): G6 k4 O$ R$ s4 U* C
{
" A' l8 s* O5 E" W% R T();
( _/ r6 S4 {8 Y h5 t$ P E1();5 X; j \$ e+ U' t/ W
}% N# l! H7 P+ H$ z P- ]( [
void T()& R+ Y9 n, I! O* C, J
{
4 h0 ^5 B! s8 F/ ]' k4 N! N Q F();
' V) o9 s9 W U( H0 [0 k) h T1();
" s1 s% ]; r: Y3 b) q1 L}
+ q3 W& V+ E0 d% _void E1()& C& h; t) m: H! g2 H
{
: D8 X) \# _/ f; P if(Match('+'))
! {+ R1 u( w# {8 |1 b0 M1 c9 I {# f8 ?, `" c+ q
ReadToken();
: A8 \. ]/ T6 Z7 y4 Z IsSuccess();
$ V6 {. |) C f) c7 N" _' H* I r! ? T();
& b( f ~1 t# j B$ V E1();7 C+ Q/ T) A; M4 s, q
}
! C! `9 {) F6 o, @* Y}
9 @( C3 _4 k% C2 i: h; J! @; e" Xvoid T1()
. K, A4 S. Q/ N{
G" j# n2 c8 L: s6 @& O; N if(Match('*'))
4 W: q* d# P( w9 z {+ m1 O2 A5 v/ L
ReadToken();
4 y9 a8 A, ~' o9 K: [8 t IsSuccess();
: h; l: w6 C' c( z- g F();5 B5 U& D4 y1 D6 Q
T1();
, s5 I4 p9 ^' A, G( H' H: E5 A }; E* n. U4 B/ L
}0 ?, R6 V7 y$ u3 R
void F()2 z0 t1 I6 u' j# C+ X3 N6 z
{
! d/ f. z' Z2 f# v) [7 n if(Match('('))4 G& [2 r. ]7 J- h3 W' u. o- H
{! f: h3 Y& v- A( @8 k
ReadToken();
+ [: o7 H2 N, o0 Q IsSuccess();
6 ]# g' e' Q! U& y E();
7 G1 E5 t+ a# }0 F, O$ W I if(Match(')'))
4 H) N' D7 r0 r+ N5 s. p& T) @ {
: T5 a: b/ @3 w ReadToken();" }$ d3 i$ m+ W& R
IsSuccess();
: \) N* v" q7 k& h) ~/ Q g3 h }# s; Z* w0 i, K2 N) ^% d
else
: ^/ B5 W6 `( o Y1 p, W& o {" w3 o3 n, h# X4 `
cout << "error" << endl;* O5 i; U: H% h* C
}5 ^ f; t$ j# T/ B
}( q5 \ r( `$ | d- i
else if(Match('i'))( Y( q+ N0 Q2 Q5 ?3 ?- V9 K3 _: ~* F
{
+ _7 T) F2 j4 i4 d L! L( { ReadToken();$ F& Y N+ H- y' Y& |% |
IsSuccess();9 X, K. E, b/ ^+ ^, a2 p0 ]- H+ y G
}
' Y0 D+ }, ] N! l4 m, c else if(Match('#'))
1 P, A2 g/ S3 Z( K/ M5 m) H8 M {( y# M& i1 \9 j" t" u+ L
cout << "success" << endl;3 r$ k: T9 B2 t( s& [! }0 L( }
}
A! R* ^; |2 X* w7 L% m else, v1 G+ ^( `! ^0 x8 {
{
* `% c: c2 K2 L( }6 S4 s, F cout << "error" << endl;
7 A, l0 `5 w7 u, |1 j }
3 x }; H' k( [}
: A: R' {0 c# k4 E$ Mchar ReadToken()5 N" ?2 Q7 R+ X* f9 y3 o" s/ ^
{
S& e8 M/ ]5 r return token = str[cur++];5 w% m% Z2 q4 Q
}
/ T9 |' {- y3 N8 Ibool Match(char ch)
' n" e5 r; m ?' h: f9 k{
' h, `$ k$ V H if(token == ch)% |- j, d# l) V& g9 i( d
return true;
n, A7 p1 \# d return false;
% M/ \2 h3 M# |8 J" `+ F% j}# N( ^! C9 v' ?
void IsSuccess()) E7 X) ^3 {. J2 D" y. G. b
{8 T% {* ?- w' A/ t) T8 g0 u0 @
if(Match('#'))5 k. J! j/ `3 p+ k" Z
{& i# E5 P( _% T8 ?# q1 L7 ~! c2 Y' ?
cout << "success!" << endl;5 _* M ~5 s6 G% D
exit(0);
1 i; D/ V$ p, p' n. `* u Q }1 E' D0 j+ j0 ]
} |
|