- Đỏnh dấu thứ tự cỏc lựa chọn của cỏc sản xuất cú cựng vế trỏi.
2.3.2. phõn ttớch bottom up.
Phương phỏp phõn tớch Bottom-up về tư tưởng là ngược lại với phương phỏp Top-down.
- Xõy dựng cỳ phỏp cho xõu nhập bắt đầu từ lỏ lờn tới gốc. Đõy là quỏ trỡnh rỳt gọn một xõu thành một kớ hiệu mở đầu của văn phạm. Tại mỗi bước rỳt gọn, một xõu con bằng một xõu phải của một sản xuất nào đú thỡ xõu con này được thay thế bởi vế trỏi của sản xuất đú. (cũn gọi là phương phỏp gạt thu gọn - shift reduce parsing).
Có 2 vấn đề: xác định handle và chọn luật sinh.
* Cấu tạo:
- 1 STACK để lu các ký hiệu văn phạm.
- 1 BUFFER INPUT để giữ chuỗi cần phân tích w. - Dùng $ để đánh dấu đáy stack và cuối chuỗi nhập. * Hoạt động:
- Khởi đầu thì stack rỗng và w nằm trong input buffer. Bộ phân tích gạt lần lượt cỏc ký hiệu đầu vào từ trỏi sang phải vào ngăn xếp đến khi nào đạt được một thu gọn thỡ thu gọn (thay thế vế phải xuất hiện trờn đỉnh ngăn xếp bởi vế trỏi của sản xuất đú).Nếu cú nhiều cỏch thu gọn tại một trạng thỏi thỡ lưu lại cho quỏ trỡnh quay lui. Quỏ trỡnh cứ tiếp tục, nếu dừng lại mà chưa đạt đến trạng thỏi kết thỳc thỡ quay lại tại bước quay lui gần nhất.
- Nếu quỏ trỡnh đạt đến trạng thỏi ngăn xếp là $S và xõu vào là $ thỡ quỏ trỡnh kết thỳc và phõn tớch thành cụng.
- Nếu đó xột hết tất cả cỏc trường hợp, tức là khụng quay lui được nữa mà chưa đạt đến trạng thỏi kết thỳc thỡ dừng lại và thụng bỏo xõu vào khụng phõn tớch được bởi văn phạm đó cho.
Vớ dụ: S -> aABe; A -> Abc | b; B -> d; Phõn tớch cõu vào “abbcde”
quỏ trỡnh phõn tớch Bottom-up như sau:
Ngăn xếp Đầu vào Hành động
$ abbcde$ gạt
$a bbcde$ gạt
$ab bcde$ thu gọn A -> b
$aA bcde$ gạt
$aAb cde$ thu gọn A -> b (2)
Trờn ngăn xếp chứa xõu y =αβ, β là vế phải của một sản xuất được bộ phõn tớch ỏp dụng để thu gọn và bước thu gọn này phải dẫn đến quỏ trỡnh phõn tớch thành cụng thỡ β là handle của chuỗi αβv (v là phần chuỗi cũn lại trờn input buffer).
Vậy nếu S =>*rmαAw =>rmαβw thỡ β là handle của suy dẫn phải αβw
$aAA cde$ gạt
$aAAc de$ gạt
$aAAcd e$ thu gọn B -> d (1)
$aAAcB e$ gạt
$aAAcBe $ dừng, quay lui 1 (gạt)
$aAAcde $ dừng, quay lui 2 (gạt)
$aAbc de$ thu gọn A -> Abc
$aA de$ gạt
$aAd e$ thu gọn B -> d
$aAB e$ gạt
$aABe $ thu gọn S -> aABe
$S $ chấp nhận
Vẽ cõy cho quỏ trỡnh phõn tớch và quay lui trờn, chỳng ta cú kết quả như sau:
Quỏ trỡnh 1 Quỏ trỡnh 2
Quỏ trỡnh suy dẫn cũng cú thể được viết lại như sau:
Abbcde => aAbcde (A -> b) => aAde (A -> Abc) => aABe (B -> d) => S (S -> aABe) Nếu viết ngược lại chỳng ta sẽ được dẫn xuất phải nhất:
S =>rm aABe =>rm aAde =>rm aAbcde =>rm abbcde
- Quỏ trỡnh phõn tớch Bottom-up là quỏ trỡnh sinh dẫn suất phải nhất
a b b c d e A A B* a b b c d e A A* a b b c d e A B A S (2c) Quỏ trỡnh 3
Trờn ngăn xếp chứa xõu y =αβ, β là vế phải của một sản xuất được bộ phõn tớch ỏp dụng để thu gọn và bước thu gọn này phải dẫn đến quỏ trỡnh phõn tớch thành cụng thỡ β là handle của chuỗi αβv (v là phần chuỗi cũn lại trờn input buffer).
Vậy nếu S =>*rmαAw =>rmαβw thỡ β là handle của suy dẫn phải αβw
- Phõn tớch Bottom-up khụng phõn tớch được văn phạm cú cỏc sản xuất B->ε
hoặc cú suy dẫnA =>+ A
*
Handle của một chuỗi
Handle của một chuỗi là một chuỗi con của nú và là vế phải của một sản xuất trong phộp thu gọn nú thành ký hiệu vế trỏi của 1 sản xuất.
Vớ dụ: Trong vớ dụ trờn.
Ngăn
xếp Đầu vào Hành động Handle Suy dẫn phải Tiền tố khả tồn
$ abbcde$ gạt
$a bbcde$ gạt abbcde a
$ab bcde$ thu gọn A -> b b abbcde ab
$aA bcde$ gạt aAbcde aA
$aAb cde$ thu gọn A -> b (2) b aAbcde aAb
$aAA cde$ gạt
$aAAc de$ gạt
$aAAcd e$ thu gọn B -> d (1) d khụng phải là handle do ỏp dụng thu gọn này là khụng thành cụng
$aAAcB e$ gạt
$aAAcBe $ dừng, quay lui 1 (gạt) $aAAcde $ dừng, quay lui 2 (gạt)
$aAbc de$ thu gọn A -> Abc Abc AAbcde
$aA de$ gạt
$aAd e$ thu gọn B -> d d AAde
$aAB e$ gạt
$aABe $ thu gọn S -> aABe
$S $ chấp nhận
Chỳ ý Handle là chuỗi mà chuỗi đú phải là một kết quả của suy dẫn phải từ S và phộp thu gọn xảy ra trong suy dẫn đú.
W = a1a2...an Stack β α ai ai+1 ... an $ Sản xuất A -> β
Trờn ngăn xếp chứa xõu y =αβ, β là vế phải của một sản xuất được bộ phõn tớch ỏp dụng để thu gọn và bước thu gọn này phải dẫn đến quỏ trỡnh phõn tớch thành cụng thỡ β là handle của chuỗi αβv (v là phần chuỗi cũn lại trờn input buffer).
Vậy nếu S =>*rmαAw =>rmαβw thỡ β là handle của suy dẫn phải αβw
Trong việc sử dụng ngăn xếp để phõn tớch cỳ phỏp gạt thu gọn, handle luụn luụn xuất hiện trờn đỉnh của ngăn xếp.
*Tiền tố khả tồn (viable prefixes)
Xõu ký hiệu trong ngăn xếp tại mỗi thời điểm của một quỏ trỡnh phõn tớch gạt - thu gọn là một tiền tố khả tồn.
Vớ dụ: tại một thời điểm trong ngăn xếp cú dữ liệu là αβ và xõu vào cũn lại là w thỡ αβw là một dạng cõu dẫn phải và αβ là một tiền tố khả tồn.
2.3.2.Phõn tớch LL.
Tử tưởng của phương phỏp phõn tớch LL là khi ta triển khai một ký hiệu khụng kết thỳc, lựa chọn cẩn thận cỏc sản xuất như thế nào đú để trỏnh việc quay lui mất thời gian.Tức là phải cú một cỏch nào đú xỏc định dực ngay lựa chọn đỳng mà khụng
phải thử cỏc lựa chọn khỏc. Thụng tin để xỏc định lựa chọn dựa vào những gỡ đó biết trạng thỏi và kớ hiệu kết thỳc hiện tại.
LL: là một trong cỏc phương phỏp phõn tớch hiệu quả, nú cũng thuộc chiến lược phõn tớch topdown nhưng nú hiệu quả ở chỗ nú là phương phỏp phõn tớch khụng quay lui.
- Bộ phõn tớch tất định: Cỏc thuật toỏn phõn tớch cú đặc điểm chung là xõu vào được quột từ trỏi sang phải và quỏ trỡnh phõn tớch là hoàn toàn xỏc định, do đú ta gọi là bộ phõn tớch tất định. (Phõn tớch topdown và bottom – up cú phải là phõn tớch tất định khụng? – khụng do quỏ trỡnh phõn tớch là khụng xỏc định).