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

Phân tích cú pháp từ trên xuố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 29 -32 )

M UC LU ÛÛ

3.3.2 Phân tích cú pháp từ trên xuống

Khi ph n tích cú pháp t tr n xu ng ta bă t đ u tạo ra c yâ ừ ê ố õ ầ â d ùn xu t t g c la ký hi ûu đ u cu a văn phạm va l n l üc ápâ ấ ừ ố ì ê ầ í ì ầ ươ dụng các qui tă c cho ký hi ûu ch a k t thúc trái nh t trong cácõ ê ư ế ấ c u thu đ üc cho đ n đỉnh cu i cu a c y d ùn xu t la ký hi ûuâ ươ ế ố í â â ấ ì ê nh tấ

trong các c u thu đ üc cho đ n đỉnh cu i cu a c y d ùn xu t la kýâ ươ ế ố í â â ấ ì hi ûu cu a c u đ üc ph n tích.ê í â ươ â

Gi ïi thi ûu kỹ thu ût ph n tích cú pháp qua xem xét m üt vănơ ê â â ơ phạm sau:

type → simple

|↑ id

| array[simple] of type (3.2)

simple → integer

| char

| num dotdot num

(a) type

type

array [ simple ] of type

type

(c) array [ simple ] of type

num dotdot num

type

(d) array [ simple ] of type

num dotdot num simple

integer

type

(e) array [ simple ] of type

num dotdot num simple

Hình 2.4 Các b ïc x y d ûng c y ph n tích cú pháp ươ â ư â â t tr n xu ngừ ê ố

S dụng the t ử í ừ dotdot thay cho “..” đ nh n mạnh ră ngể ấ ị chu ùi ký t û na y đ üc x lý nh m üt đ n vị.ơ ư ì ươ ử ư ơ ơ

X y d ûng c y ph n tích cú pháp theo l i t tr n xu ng (hìnhâ ư â â ố ừ ê ố 3.4) đ üc th ûc hi ûn t g c, v ïi nhãn la ch a t ûn kh i đ u r iươ ư ê ừ ố ơ ì ư â ở ầ ồ th ûc hi ûn hai b ïc sau lặp đi lặp lại:ư ê ươ

-Tại nút n cĩ nhãn la ch a t ûn ì ư â A, chọn m üt trong nh ỵngơ ư lu ût sinh cho â A va cho các ký hi ûu v pha i cu a lu ût sinh na yì ê ở ế í í â ì la m con cu a n. ì í

-Tìm nút k ti p đ x y d ûng m üt c y con tại đĩ. ế ế ể â ư ơ â

Đố ơi v ïi m üt s văn phạm các b ïc tr n cĩ th ca i đặt trongơ ố ươ ê ể ì khi quét chu ùi nguy n li ûu t trái sang pha i. The t đang đ ücơ ê ê ừ í í ừ ươ quét trong nguy n li ûu th ng đ üc gọi la ký hi ûu nhìn tr ïcê ê ườ ươ ì ê ươ (lookahead symbol). Lúc ban đ u ký hi ûu nhìn tr ïc la the tầ ê ươ ì í ừ đ u ti n, nghĩa la the t t ûn trái cu a chu ùi nguy n li ûu. Hìnhầ ê ì í ừ â í ơ ê ê 3.5 minh họa vi ûc ph n tích chu ùi.ê â ơ

array [num dotdot num ] of integer

Ban đ u the t ầ í ừ arrayla ký hi ûu nhìn tr ïc va ph n đã bi tì ê ươ ì ầ ế cu a c y ph n tích cú pháp bao g m g c cĩ nhãn la ch a t ûní â â ồ ố ì ư â kh i đ uở ầ type trong (hình 3.4a). Mục đích la x y d ûng ph n co nì â ư ầ ì lại cu a c y sao cho chu ùi đ üc sinh ra b i c y sẽ so kh ïp đ ücí â ơ ươ ở â ơ ươ v ïi chu ùi nguy n li ûu.ơ ơ ê ê

cĩ đ üc m üt đ i sánh cho ch a t ûn

Để ươ ơ ố ư â type pha i d ùn xu tí â ấ ra m üt chu ùi bă t đ u bă ng ký hi ûu nhìn tr ïc ơ ơ õ ầ ị ê ươ array. Trong văn phạm (3.2) chỉ cĩ m üt lu ût sinh cho ơ â type cĩ th d ùn xu t m ütể â ấ ơ chu ùi nh th n n ta sẽ chọn lu ût sinh đĩ va x y d ûng các conơ ư ế ê â ì â ư cho g c cĩ nhãn la nh ỵng ký hi ûu v pha i cu a lu ût sinh.ố ì ư ê ở ế í í â

M ùi trong ba hình 3.4 cĩ các mũi t n chỉ ra ký hi ûu nhìnơ ê ê tr ïc trong nguy n li ûu va nút đang đ üc xét trong c y ph n tíchươ ê ê ì ươ â â cú pháp. Khi x y d ûng các con cu a m üt nút thì b ïc k ti p taâ ư í ơ ươ ế ế xét các con t ûn trái. Trong hình 3.4b, các con v a đ üc x yâ ừ ươ â d ûng tại g c va con t ûn trái v ïi nhãnư ố ì â ơ array sẽ đ üc xét.ươ

Trong c y ph n tích cú pháp, khi m üt t ûn va m üt nút choâ â ơ â ì ơ t ûn đĩ đ i sánh đ üc v ïi ký hi ûu nhìn tr ïc thì ta dịch t ïiâ ố ươ ơ ê ươ ơ tr ïc m üt b ïc, ca c y ph n tích cú pháp va nguy n li ûu.ươ ơ ươ í ở â â ì ở ê ê

The t k ti p trong nguy ûn li ûu tr tha nh lookahead(nhìní ừ ế ế ê ê ở ì tr ïc) m ïi va con k ti p trong c y sẽ đ üc xét.ươ ơ ì ế ế â ươ

Trong hình 3.4c mũi t n trong c y đã đ üc dịch t ïi con k ti pê â ươ ơ ế ế cu a g c va mũií ố ì

t n trong nguy n li ûu sẽ đ üc dịch chuy n t ïi the t ti p theo laê ê ê ươ ể ơ í ừ ế ì [. Sau khi dịch t ïi tr ïc, mũi t n trong c y sẽ chỉ t ïi con cĩ nhãnơ ươ ê â ơ la ch a t ûn ì ư â simple. Khi m üt nút cĩ nhãn la ch a t ûn đ üc xétơ ì ư â ươ đ n, ta sẽ lặp lại quá trình chọn m üt lu ût sinh cho ch a t ûnế ơ â ư â đĩ.

Nĩi chung, vi ûc chọn m üt lu ût sinh cho m üt ký hi ûu ch aê ơ â ơ ê ư t ûn cĩ th đ üc th ûc hi ûn theo ki u th va sai; nghĩa la ta cĩâ ể ươ ư ê ể ử ì ì th pha i th m üt lu ût sinh r i pha i quay lại đ th m üt lu ûtể í ử ơ â ồ í ể ử ơ â sinh khác n u lu ût sinh th ï nh t kh ng phu h üp. M üt lu ûtế â ư ấ ơ ì ơ ơ â sinh sẽ kh ng phu h üp n u sau khi du ng nĩ, ta kh ng th tạo raơ ì ơ ế ì ơ ể m üt c y kh ïp đ üc v ïi chu ùi nguy ûn li ûu. Tuy nhi n cĩ m ütơ â ơ ươ ơ ơ ê ê ê ơ tr ng h üp đặc bi ût cĩ t n la ph n tích cú pháp d ûườ ơ ê ê ì â ư đốn(predictive parsing) kh ng cĩ tình trạng pha i th lại.ơ í ử

(a) type

Hình 3.5 Ph n tích cú pháp t tr n â ừ ê xu ng ố

array [ num dotdot num ] of integer

type

(b) array [ simple ] of type

c y â PTCP nguy n ê

li ûuê

array [ num dotdot num ] of integer

type

(c) array [ simple ] of type

c y â PTCP nguy n ê

li ûuê

array [ num dotdot num ] of integer

c y â PTCP nguy 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 29 -32 )

×