TA的每日心情 慵懒 2016-4-21 12:07
签到天数: 3 天
连续签到: 1 天
[LV.2]偶尔看看I
累计签到:3 天 连续签到:1 天
马上加入,结交更多好友,共享更多资料,让你轻松玩转电力研学社区!
您需要 登录 才可以下载或查看,没有账号?立即加入
×
属于编译的,内层的东西了 呵呵. j. u* [% b3 s- F' x+ i' |
$ y/ N0 O9 X3 P2 z
文法G[E]
2 `; d9 A' }4 W# J- w E –> E + T | T$ F9 i0 d( h0 O! ?! g5 S
T –> T + F | F
, p b1 a) a5 Y( u, V9 J F –> i | (E)! N( D6 l! H/ K5 Z/ y' p2 N
' Q- ~ S8 ~# q 消除左递归
# p- r6 z3 Z) G$ S0 q( L$ c E –> TE’
t4 e2 K; }$ v E’-> +TE’8 f: t" \4 c5 p6 m
E’-> ε
; b# i2 O0 E; H3 V6 c0 c; q T –> FT’
' N: c/ |8 ]' k4 C0 [ T’–> *FT’$ N5 L$ U9 {( Z9 I& S+ S j
T’-> ε
+ H# ?5 s/ M' U$ |" L F -> i|(E)3 p" l9 E: v' L' `$ C
8 l1 P2 [- r8 K3 L
编码实现& V! d% E8 j3 E+ B, ^% K
#include<iostream>
* g& j: b- `( Q6 D2 P+ ? using namespace std;
* r$ G( D7 \/ l* Y3 M6 r3 g4 w
8 n( q0 Y" c' V" O, t6 O" o" h void E();7 E7 @0 e9 D/ z3 s1 }; N/ z9 y o
void E1();
. C' n8 T6 q( j# ~' S void T();9 q0 \' e1 w: N& Z0 w
void T1();5 m8 `: H+ [$ ~* j: u1 u
void F();6 W# }- o* U9 a; k6 r
+ q- V* |0 g" f2 J char ReadToken();
$ {! `( L* }) E5 H6 I& `; F bool Match(char a);
8 _; r( T5 K- t A. }# I- k void IsSuccess();/ T! |7 x8 p) `2 v+ L
7 n+ F, k3 Q, s( b2 b: ~ char token;
# r9 b7 X" F4 u int cur = 0; // 当前字符索引2 D8 }* v& {5 P. E, ?
char *str = "i+i*i+(i*i)#"; // 语句
% S3 K7 j& x. P" q" T
) a6 c6 z2 `! G, J- J: v void main()
# S3 ]: s- O( d {; x9 ?1 S6 [6 q! q
ReadToken();
# E; p' L; @1 f, @4 O if(!Match('#'))" H- ]9 u: V5 ^$ R8 b
E();
; W" ]4 v! Z! ]+ s$ R9 t }
: }( M$ w3 S( I void E()/ s# w6 O, S( N( Y$ \5 A( S
{
$ J: w \: m3 F T();
% e/ R" W6 o; S7 v- [, M" h( [ E1();
- Y/ T6 O& d# ~9 w }( g( W/ k1 B& _) c7 u, a
void T()
" V# T5 S8 c4 j {
5 T7 {/ |2 F; r! r0 ]6 V" b F();
; y# {) O% g5 p- h9 v4 s" X% W T1();# \# o+ @7 |6 F/ C8 i# C1 D: ~
}# E9 j( I: l; K( `% B) `2 }4 W) F
void E1()) ^8 H* Q# A" {2 {4 y6 Q
{; u. c; q5 ]5 K' Y1 s w
if(Match('+'))
! z5 c( W$ L* @0 o {
F5 f: O' |7 G: N ReadToken();
/ I6 o. S! D( ?9 S2 _$ I. I6 r IsSuccess();, \; O+ P/ D) L r4 c
T();
& G& M8 F. J+ ^1 t: s. { E1();. f9 N" ?) I1 k$ y/ P
}
; e- ~$ E8 B) U: {3 w4 l- M }
% r- }( r3 C. J3 p void T1()9 Y: f% b* [/ a0 P7 Z* V
{, w4 |% E: w Z+ D" l
if(Match('*'))
) v* g7 W' Z1 W$ u {
! Q. y5 T0 h: F3 S$ Y: u ReadToken();( Y2 @2 L4 D+ Z; d4 a) r! ~5 S
IsSuccess();
a) g% Z# M+ C3 S S; V) { F();0 I1 h2 ~+ N/ T8 h. X
T1();
6 O) b E4 W. Z1 [( s( x" @ }3 ]' E0 ~ [! }; R9 Z! L; v
}
3 H4 c" a6 Q4 d% X void F()
; o/ t6 O1 _' [ a% D {: S0 s. g: T+ Q* O4 f
if(Match('('))
$ A( [! b3 [; T9 t6 V6 s {/ s; s0 @) j7 H" f, F
ReadToken();
7 @" f: f# f& [ IsSuccess();
' d- H. x+ q y8 e E();
$ O. ?1 y0 Z U. o$ X3 I if(Match(')'))
4 x+ ~8 q; v: a1 J } {
% q9 }. T) [+ U/ n3 g% f ReadToken();/ |4 R( F! V5 p/ t* Z1 L6 |
IsSuccess();
2 f4 K; n3 I# H }$ R) [6 h& e, y3 }8 T
else
' ?2 u) t9 k0 T/ r! C {
6 y5 b9 c( V- U/ ]; m9 f/ o7 N# i cout << "error" << endl;7 | c2 z: F a5 T+ h9 `; I& Q, v
}
0 O' v2 o i% @# h }( \) g% W9 m& r9 Y7 L
else if(Match('i'))5 y% }/ X I4 a( Y1 S$ J+ H
{
7 R) _" ~( E. b$ S7 \" `- @/ Q ReadToken();4 k% A/ u+ M9 U3 n4 y: {
IsSuccess();
4 ` ?: D4 v: }( V }: {) N! A6 s$ K& N/ H8 J9 G' p
else if(Match('#'))" I5 |8 g0 y1 Y) |
{
* d3 Z m6 A7 Q9 e' C cout << "success" << endl;! Z3 k1 n6 L) c+ N0 t
}
$ |: t! v( \- f else7 g0 N" p' f* w6 C
{/ h ^: e E0 c( J2 m+ @
cout << "error" << endl;
+ D7 S( t9 C L$ q6 I+ ~3 ` }/ j8 G! L, A( h: D
}$ p9 ?$ I; B# y% L1 O$ k
char ReadToken()6 M+ D2 F9 {8 Y7 a5 n& D
{
; {+ P; N. t6 M' C0 h( w6 r& O return token = str[cur++];
- \- C, L9 p9 Y8 ^& D& F& m0 G }4 W/ q }8 c3 H) [$ V
bool Match(char ch), X+ E8 Y' h+ z; Q8 f }: V! W2 f# \
{7 E) W% ~, b' \- I" Z5 O- P* o
if(token == ch)4 ~9 R5 z8 b0 L6 n6 R9 n, b
return true;
2 V2 G+ x: k' W# O4 m return false;6 G. [! l, I' N9 ]2 ~$ x3 {, i
}
: E- H9 L8 ^3 {. l7 H void IsSuccess()5 p/ d! Y4 h1 G* k6 s1 f* M
{
5 Z3 `. R( I. |4 @/ e if(Match('#')) M! T2 r# i* `/ M" P
{
4 W9 L2 ?0 W* h7 N9 v' s: X { d3 o! u cout << "success!" << endl;* E$ o) C* f- r8 n
exit(0);
5 R- C, R, ?0 B }
5 y$ N+ S7 w" o# O }
楼主热帖