148
第第第 第第第第 南南南南南南南南 南南南 2015-3 1

第四章 语法分析

Embed Size (px)

DESCRIPTION

第四章 语法分析. 南京大学计算机系 戴新宇 2014-3. 概要. 语法分析器 上下文无关文法 语法分析技术 自顶向下 自底向上 语法分析器生成工具. 引言. 程序设计语言源程序的构成 文法:一种用于描述程序设计语言语法的表示方法,能够自然地描述程序设计语言构造的层次化语法结构。 文法给出了一个程序设计语言的精确易懂的语法规约 可以基于文法构造语法分析器,帮助确定源程序的语法结构 语法结构有助于把源程序翻译为正确的目标代码,以及检测导语法错误。 文法的扩展性 Standard C++ Grammar Java SE7 Grammar. - PowerPoint PPT Presentation

Citation preview

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