第四章 语法分析
DESCRIPTION
第四章 语法分析. 南京大学计算机系 戴新宇 2014-3. 概要. 语法分析器 上下文无关文法 语法分析技术 自顶向下 自底向上 语法分析器生成工具. 引言. 程序设计语言源程序的构成 文法:一种用于描述程序设计语言语法的表示方法,能够自然地描述程序设计语言构造的层次化语法结构。 文法给出了一个程序设计语言的精确易懂的语法规约 可以基于文法构造语法分析器,帮助确定源程序的语法结构 语法结构有助于把源程序翻译为正确的目标代码,以及检测导语法错误。 文法的扩展性 Standard C++ Grammar Java SE7 Grammar. - PowerPoint PPT PresentationTRANSCRIPT
2015-312Standard C++ GrammarJava SE7 Grammar3What
(CKYEarley)LLLR4Why
5
Context Free Grammar, CFG stmt if ( expr ) stmt else stmt expr stmt 6CFGCFG 7
8S -> NP VPVP -> V NPNP -> NAMENP -> ART NNAME -> JohnV -> ateART -> theN -> cata b + 3 id: A B C, S, stmt: X Y :u v w: : 1 2 3 : S9
Rewriting rulee.g. E -E (E) (id) E-(id)(id)EEA A 101 2 n 1n 1 n S G{w|S w}GL(G)11
12
13 , SG G14
w1415
SNPVPNAMEJohnVNPateARTNthecatS -> NP VPVP -> V NPNP -> NAMENP -> ART NNAME -> JohnV -> ateART -> theN -> cat 17
18
19
20Chomsky0() 1() A 2() A 3()A t, A tB21CFG(a|b)*abb
22NFA
23
L={anbn|n>=1}
G: S aS|a|b, L(G)={ai(a|b), i>=0}GS aSb|abL(G)={anbn, n>=1}GS (S)S|L(G)={}
GLGLLG25A 26
27
28
: thenelsethenelsethenthen/else29
A A A,
30
A A|A AA A|
31
A(iiA)
32
SAa|b, AAc|Sd|S => Aa => Sda33A1,A2,AnAi -> Aj (i Aj (i>j),AjAi
Ai Ai A 34
SAa|b, AAc|Sd| S Ai=1i=2, ASdSAAc|Aad|bd|35
36
A1\2
A AA1\2 GAA A1\ 2\...\n\ AA\ A1\2\...\n37
38
39id+id*id
40
41
AA
w=cadS cAdA ab|a43
()A2AA44451G(S) SpA SqB AcAd Aa W=pccadd
462G(S) S Ap S Bq A acA BbdBW=ccapFIRSTFOLLOW47FIRST() FIRST()FIRSTA A |First()First()aa First()A a First()A 48
First(X)XFIRST(X)FIRSTXFIRST(X)={X}XX a,aFIRST(X)X FIRST(X)X Y1Y2Yn,FIRST(Y1)FIRST(X)FIRST(Y1)FIRST(Y2)FIRST(X)FIRST(Yn)FIRST(X)
49First()=X1X2XnFirstFirst(X1X2Xn)First(X1)First(X1)First(X2)First(X1)First(X2)First(X3)i1nFirst(Xi)First(X1X2Xn)50FirstFirst(F)=First(T)=First(E)={(,id}First(E)={+, }First(T)={*, }First(TE)=First(T)={(,id}First(+TE)={+}51
FOLLOWAFOLLOW(A)AS AaaFollow(A)A$ Follow(A) $FOLLOWA FOLLOW(A)if A , bFOLLOW(A) bA Ab52
G[S], bcd
S AB|CDA aD| C cDB bCD d
FOLLOWAFOLLOW(A)FOLLOW$FOLLOW(S)S$A BFirst()Follow(B)A BA BFirst()Follow(A)FollowB53Follow54 E::=TEE::=+TE| T::=FT T::=*FT| F::=(E)|iFOLLOW(E)={) $} FOLLOW(E)={) $}FOLLOW(T)={+)$}FOLLOW(T)={+)$}FOLLOW(F)=(*+)$) FIRST( ) ) U {$} FOLLOW(E) FIRST(E) U FOLLOW(E) FOLLOW(T) FIRST(T) U FOLLOW(T)LL(1)GA |First() First() = FIRST() FOLLOW(A)=LL(1)LL1LL(1)
55
& LL(1)firstfollowM[A,a]AaaFirst()A aFollow(A)A ;a$$Follow(A)A 56
GMGA First()aA M[A,a]First()Follow(A)bA M[A,b]First()$Follow(A)A M[A,$]M[A,a]error
57 E::=TEE::=+TE| T::=FT T::=*FT| F::=(E)|i58FIRST(TE )={ ( i}FIRST(TE )={}FIRST(FT)={(i}FIRST(*FT)={*}FIRST((E))={(}FIRST(i){i}
FOLLOW(E)={) $} FOLLOW(E)={) $}FOLLOW(T)={+)$}FOLLOW(T)={+)$}FOLLOW(F)=(*+)$)
F T T E E $ ) ( * + iE::=TEE::=TEE::=+TEE::=E::=T::=FTT::=FTT::=*FTT::= T::= T::= F::=(E)F::=iGLL(1)errorLL(1)59
60
XaX=a= $ X=a $ XXAA[X][a]=X::=X1X2XkXXkX2X1 X1
61
wGMwL(G)ww$, GS$ 62
63
66AFOLLOW(A)AAifwhileFIRST(A)AA6714.28FIRSTFOLLOWETFsynch
682+id * + id
69
70-LRLRLR71Bottom-Up Parsing72
- Bottom-up parsing wBottom-up parsing w 73 Bottom-Up Parsing S Aw wA w 74
id1*id2id1FidF*id2FTFT*id2id2FidT*FT*FTT*FTTET ww=n, nn
nn A nn -1S76
$ w$ $ S, $77(Shift) (Reduce)78
79
-/k/
80/
81
/
82
idprocid[]()83Review of Bottom-up Parsing -- - or 84LR-LR-LRLR(k)-LR: k:kk