0
Tải bản đầy đủ (.doc) (55 trang)

Phân tích cú pháp dự đốn

Một phần của tài liệu NGÔN NGỮ LẬP TRÌNH ĐƠN GIẢN: THIẾT KẾ & CÀI ĐẶT (Trang 32 -34 )

M UC LU ÛÛ

3.3.4 Phân tích cú pháp dự đốn

Ph n tích cú pháp đ û qui xu ng(recursive desent parsing) laâ ê ố ì ph ng pháp ph n tích t tr n xu ng, trong đĩ chúng ta th ûc thiươ â ừ ê ố ư m üt t ûp thu tục đ û qui đ x lý chu ùi nguy n li ûu. M ùi ch aơ â í ê ể ử ơ ê ê ơ ư t ûn cu a văn phạm đ üc ke m v ïi m üt thu tục. đ y ta xétâ í ươ ì ơ ơ í Ở â m üt hình thái đặc bi ût cu a ph n tích cú pháp đ û qui xu ng,ơ ê í â ê ố đĩ la ph n tích cú pháp d û đốn, trong đĩ ì â ư lookahead giúp xác định đúng thu tục c n chọn cho m ùi ch a t ûn. Loạt thu tụcí ầ ơ ư â í đ üc gọi trong khi x lý chu ùi nguy n li ûu ng m định nghĩaươ ử ơ ê ê ầ m üt c y ph n tích cú pháp cho nguy n li ûu.ơ â â ê ê

B ü ph n tích cú pháp d û đốn (hình 3.5) g m các thu tụcơ â ư ồ í cho ch a t ûn ư â type va ì simple cu a văn phạm (3.2) va m üt thuí ì ơ í tục b sung ổ match. Ta du ng ì match nhă m đ n gia n hĩa đoạn mãị ơ í cho typeva ì simple; nĩ dịch t ïi the t ti p theo n u đ i ơ í ừ ế ế ố tcu a nĩí so kh ïp đ üc v ïi ơ ươ ơ lookahead. Vì th ế match la m thay đ i bi nì ổ ế lookahead, đĩ la the t hi ûn đang đ üc quét trong nguy n li ûu.ì í ừ ê ươ ê ê

procedure match(t:token); begin if lookahead=t then lookahead:= nexttolen else error end; procedure type; begin

if lookahead thuộc{integer, char,num} then simple

else if lookahead = ‘↑’ then begin

match(‘↑‘); match(id) end

else if looahead = array then begin

match(array);match(‘[‘); simple; match(‘]’) match(of); type end else error end; procedure simple; begin

if lookahead = integer then match(integer)

else if lookahead=char then match(char)

else if lookahead = num then begin

match(num); match(dotdot); match(num) end

else error end;

Hình 3.6 oạn mã gia cho b ü ph n tích cú pháp d û đốnĐ í ơ â ư Ph n tích cú pháp bă t đ u bă ng m üt l i gọi đ n thu tụcâ õ ầ ị ơ ờ ế í cho ch a t ûn kh i đ u ư â ở ầ type. Cu ng v ïi nguy n li ûu (hình 3.5), banì ơ ê ê đ u ầ lookahead la the t th ï nh t ì í ừ ư ấ array. Thu tục í type th ûc thiư đoạn mã.

match(array); match(‘[‘); simple; match(‘]’) match(of); type

t ng ïng v ïi v pha i cu a lu ût sinhươ ư ơ ế í í â

type → array [simple] of type

M ùi t ûn v pha i đ üc đ i sánh v ïi ký hi ûu nhìn tr ïc vaơ â ở ế í ươ ố ơ ê ươ ì m ùi ch a t ûn v pha i d ùn đ n m üt l i gọi thu tục cu a nĩ.ơ ư â ở ế í â ế ơ ờ í í

V ïi nguy n li ûu (hình 3.4), sau khi các the t ơ ê ê í ừ array va ì [ đã đ i sánh, ký hi ûu nhìn tr ïc sẽ la ố ê ươ ìnum. Lúc na y thu tục ì í simple

đ üc gọi la đoạn mãươ ì

match(num); match(dotdot); match(num)

trong ph n th n cu a nĩ đ üc th ûc thi.ầ â í ươ ư

Ký hi ûu nhìn tr ïc h ïng d ùn vi ûc chọn l ûa lu ût sinh.ê ươ ươ â ê ư â N u v pha i cu a m üt lu ût sinh bă t đ u bă ng m üt the t thìế ế í í ơ â õ ầ ị ơ í ừ lu ût sinh cĩ th đ üc du ng khi ký hi ûu nhìn tr ïc đ i sánhâ ể ươ ì ê ươ ố đ üc v ïi the t . B y gi ta xét v pha i bă t đ u bă ng m üt ch aươ ơ í ừ â ờ ế í õ ầ ị ơ ư t ûn nh :â ư

type → simple

Lu ût sinh na y đ üc du ng n u ký hi ûu nhìn tr ïc cĩ thâ ì ươ ì ế ê ươ ể đ üc sinh ra t ươ ừ simple. Ví dụ trong khi th ûc hi ûn đoạn mã: ư ê

match(array); match(‘[‘); simple;

match(‘]’) match(of); type

gia s ký hi ûu nhìn tr ïc í ử ê ươ integer khi quy n đi u khi n đ ücề ề ể ươ trao cho l i gọi thu tục ờ í type. Kh ng cĩ lu ût sinh na o cho ơ â ì type

bă t đ u bă ng the t õ ầ ị í ừ integer. Tuy nhi n m üt lu ût sinh ê ơ â simple

lại cĩ vì th lu ût sinh ế â type →simple đ üc du ng bă ng cách y uươ ì ị ê c u ầ typegọi thu tục í simpletr n nhìn tr ïcê ươ integer.

Ph n tích cú pháp d û đốn d ûa va o th ng tin v nh ỵng kýâ ư ư ì ơ ề ư hi ûu đ u ti n đ üc sinh ra b i v pha i cu a lu ût sinh. Nĩi chínhê ầ ê ươ ở ế í í â xác h n, gọi ơ α la v pha i cu a m üt lu ût sinh cho b i ch a t ûn ì ế í í ơ â ở ư â A. Ta định nghĩa FIRST(α) la t ûp the t xu t hi ûn nh nh ỵng kýì â í ừ ấ ê ư ư hi ûu đ u ti n cu a m üt hoặc nhi u chu ùi đ üc sinh ra t ê ầ ê í ơ ề ơ ươ ừ α. N u ế α la ìε hoặc cĩ th sinh ra ể ε thì ε cũng thu üc ơ FIRST(α).

Các t ûp â FIRST pha i đ üc xét đ n n u cĩ hai lu ût sinh í ươ ế ế â A → α va ì B →β. Ph n tích đ û qui xu ng kh ng tr lui đo i ho i ră ngâ ê ố ơ ở ì í ị FIRST(α) va ì FIRST(β) pha i r i nhau. Vì th ký hi ûu nhìn tr ïc cĩí ờ ế ê ươ th đ üc du ng đ quy t định xem pha i s dụng lu ût sinh na o;ể ươ ì ể ế í ử â ì n u ký hi ûu sa i v ïi thu üc ế ê í ơ ơ FIRST(α) thì α đ üc du ng. Ng üc lạiươ ì ươ n u ký hi ûu sa i v ïi thu üc ế ê í ơ ơ FIRST(β) thì β đ üc du ng.ươ ì

Một phần của tài liệu NGÔN NGỮ LẬP TRÌNH ĐƠN GIẢN: THIẾT KẾ & CÀI ĐẶT (Trang 32 -34 )

×