1. Trang chủ
  2. » Công Nghệ Thông Tin

Bai giang 5 phan tich cu phap hieu qua

41 914 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 41
Dung lượng 389,5 KB

Nội dung

Các lớp văn phạm  Văn phạm LLk - văn phạm cho phép xây dựng các bộ phân tích làm việc tất định nếu bộ phân tích này được phép nhìn k ký hiệu vào nằm ngay ở bên phải của vị trí vào hiện

Trang 1

Bài giảng 5 – Các phương

pháp phân tích hiệu quả

Nguyễn Phương Thái

Bộ môn Khoa học Máy tính

http://www.coltech.vnu.vn/~thainp/

Trang 2

Phân tích Top-Down, Bottom-up

Ưu điểm:

Nhược điểm:

Trang 3

Tìm đường

Trang 4

Phân tích hiệu quả (tất định)

Hi sinh (nhược điểm):

Ưu điểm:

Trang 5

Đặc điểm phân tích tất định

định

kết thúc để xác định luật duy nhất

Trang 6

Các lớp văn phạm

 Văn phạm LL(k) - văn phạm cho phép xây

dựng các bộ phân tích làm việc tất định nếu

bộ phân tích này được phép nhìn k ký hiệu vào nằm ngay ở bên phải của vị trí vào hiện thời

 Văn phạm LR(k) - văn phạm cho phép xây

dựng các bộ phân tích làm việc tất định nếu

bộ phân tích này được phép nhìn k ký hiệu vào nằm vượt quá vị trí vào hiện thời

Trang 7

Phân tích LL

Trang 8

Chương trình điều khiển

X ký hiệu đỉnh ngăn xếp, a ký hiệu vào hiện tại

 Nếu X = a = $: dừng và tuyên bố thành công (cả xâu vào lẫn ngăn xếp đều rỗng)

 Nếu X = a ≠ $: lấy X khỏi ngăn xếp, dịch con trỏ vào sang ký hiệu vào tiếp theo (đã khai triển đến lá khớp với xâu vào)

 Nếu X là một biến: xét ô M [X, a] Nếu:

 Nếu M[X, a] = {X → UVW} thay X đang nằm trên đỉnh ngăn xếp bằng WVU (U sẽ nằm trên đỉnh) (thực hiện một phép mở rộng cây)

 Nếu M[X, a] = lỗi (vị trí lỗi), gọi hàm khôi phục

lỗi.

Trang 9

Thuật toán

Đặt con trỏ ip chỉ đến ký tự đầu tiên của xâu w$

repeat

Giả sử X là ký hiệu đỉnh của ngăn xếp và a là ký hiệu vào tiếp theo;

if X là một ký hiệu kết thúc hoặc $ then

if X = a then

pop X từ đỉnh ngăn xếp và loại bỏ a khỏi xâu vào else

ERROR( );

else { X không phải là ký hiệu kết thúc }

if M[X, a] = X → Y1Y2 Yk then begin

pop X từ ngăn xếp;

push Yk,Yk-1, Y1 vào ngăn xếp, với Y1 ở đỉnh;

đưa ra sản xuất X → Y1Y2 Yk end

else

ERROR( );

until X = $; { ngăn xếp rỗng }

Trang 10

Tìm đường

Trang 11

Ví dụ

Trang 12

12

Trang 13

Ví dụ

Trang 15

Tính First và Follow

được bảng M[A, a]

Trang 16

ký hiệu bên phải nhất trong một số dạng câu thì ta thêm $ vào FOLLOW(A).

Trang 17

α

Trang 19

Lặp cho đến khi không còn thêm:

 Nếu X là ký hiệu kết thúc thì FIRST(X) = {X};

 Nếu X→ε là một sản xuất thì thêm ε vào

FIRST(X);

 Nếu X→Y1Y2 Yk là một sản xuất:

 Nếu với một i nào đó thì ε có trong mọi FIRST(Y1), FIRST(Y2), FIRST(Yi-1) (nghĩa là Y1Y2 Yi-1 ⇒ * ε ) thì ta thêm mọi ký hiệu kết thúc có trong

FIRST(Yi) vào FIRST(X).

 Nếu i = k (tức là ε có trong mọi FIRST(Yi) với i =

1, 2, , k) thì thêm ε vào FIRST(X).

Trang 21

Tính FOLLOW(A)

Lặp cho đến khi không thể thêm gì vào tập FOLLOW:

 Đặt $ vào FOLLOW(A), với A là ký hiệu bắt đầu (đỉnh cây con), $ là ký hiệu đánh dấu kết thúc xâu vào

(chú ý là A không nhất thiết phải trùng với S do ta

đang tính FOLLOW cho cây con);

 Nếu có một sản xuất dạng B → α A β (với β ≠ ε ), thì

mọi phần tử thuộc FIRST( β ) trừ ε đều được cho vào FOLLOW(A);

 Nếu có một sản xuất dạng B → α A (hoặc một sản xuất

B → α A β với FIRST( β ) chứa ε , nghĩa là β ⇒ * ε ), thì

mọi phần tử của FOLLOW(B) cũng cho vào

FOLLOW(A).

Trang 27

 Mỗi khi bộ phân tích gặp A ở trên đỉnh của

ngăn xếp và a là ký hiệu vào hiện tại thì bộ phân tích sẽ mở rộng A bằng α (bảng M[A, a]

= A→α)

 Rắc rối: khi α=ε hoặc α⇒*ε Mở rộng A bằng

α nếu:

 ký hiệu vào hiện tại thuộc FOLLOW(A), hoặc

 ký hiệu vào hiện tại là $ và $ thuộc FOLLOW(A).

Trang 29

Thuật toán 5.2

1. Đối với mỗi sản xuất A→α, thực hiện bước 2

và bước 3

2. Đối với mỗi ký hiệu kết thúc a thuộc

FIRST(α), thêm A→α vào ô M[A, a]

3. Nếu ε thuộc FIRST(α), thêm A→α vào M[A,

b] đối với mỗi b thuộc FOLLOW(A) Nếu ε

thuộc FIRST(α) và $ là thuộc FOLLOW(A), thêm A→α vào M[A, $]

4. Đặt tất cả các vị trí chưa được định nghĩa

còn lại của bảng là lỗi

Trang 30

Ví dụ

 Luật E → TE’ :

 FIRST(TE') = FIRST(T) = {(, a}

 Cả hai ô M[E, (] và M[E, a] đều được đặt là

E→TE’ (theo mục 2, thuật toán 5.2)

 FIRST(+TE’) = { + }

 Ô M[E', +] được đặt là E'→+TE'

Trang 33

Văn phạm LL(1)

 Khi áp dụng thuật toán 5.2 cho một số văn phạm, có thể có một số vị trí trong bảng

phân tích có trên một giá trị (tức là số sản

xuất nhiều hơn 1) Ví dụ, nếu văn phạm G là

đệ quy trái hoặc nhập nhằng thì ít nhất phải

có một vị trí trong bảng như vậy

Định nghĩa 5.3: Văn phạm LL(1) là các văn

phạm xây dựng được bảng phân tích theo

thuật toán 5.2 có các ô chỉ được định nghĩa nhiều nhất là một lần

 Văn phạm LL(1) không bị nhập nhằng và

không có đệ quy trái

Trang 34

Điều kiện để một VP là LL(1)

Nếu A→α | β là hai sản xuất phân biệt của G thì các điều kiện sau phải thỏa mãn:

1. Không có một ký hiệu kết thúc a nào mà cả α

và β có thể suy dẫn các xâu bắt đầu bằng a

2. Nhiều nhất là chỉ một trong α hoặc β có thể suy dẫn ra xâu rỗng

3. Nếu β⇒* ε thì α không suy dẫn được một

xâu nào bắt đầu bằng một ký hiệu kết thúc b

thuộc FOLLOW(A)

Trang 35

Điều kiện để một VP là LL(1)

biểu thức dưới đây:

FIRST(α ) ⊕ FOLLOW(A) ∩ FIRST (β) ⊕

FOLLOW(A) = ∅

dựa vào định nghĩa 5.3 kiểm tra.

Trang 36

Khôi phục lỗi

Một lỗi sẽ được phát hiện trong quá trình phân tích tất định khi:

không đúng với ký hiệu vào tiếp theo;

với biến A ở trên đỉnh ngăn xếp và ký

điền dấu hiệu báo lỗi (error).

Trang 37

Chiến lược khôi phục lỗi

 Thường theo kiểu trừng phạt: bỏ qua các ký hiệu trên xâu vào cho đến khi xuất hiện một

từ tố thuộc tập từ khoá đã được xác định

trước (gọi là tập từ khoá đồng bộ)

 Tính hiệu quả của phương pháp này phụ

thuộc vào việc chọn tập đồng bộ Các tập này được chọn sao cho bộ phân tích vượt qua

được lỗi nhanh chóng

Trang 38

Chọn tập đồng bộ synch(A)

1 Khởi đầu: đưa FOLLOW(A) vào synch(A) Nếu khi có lỗi chúng ta bỏ qua các từ tố cho đến khi một phần tử của FOLLOW(A) xuất hiện và lấy A khỏi ngăn xếp, lúc này quá trình phân tích có thể tiếp tục.

2 Tăng cường: thêm các từ khoá bắt đầu các câu lệnh vào các tập

đồng bộ của các ký hiệu không kết thúc sinh ra các biểu thức.

3 Thêm các ký hiệu trong FIRST(A) nhằm có thể tiếp tục phân tích

theo A nếu một ký hiệu trong FIRST(A) xuất hiện ở đầu vào.

4 Nếu một ký hiệu không kết thúc có thể sinh ra một xâu rỗng thì sản xuất suy dẫn ra có thể được sử dụng như ngầm định Dùng để giảm

số lượng các ký hiệu không kết thúc phải xem xét trong lúc khắc

phục lỗi.

5 Nếu một ký hiệu kết thúc nằm trên đỉnh ngăn xếp không đúng: loại

bỏ ký hiệu kết thúc này, đưa ra một thông báo và tiếp tục phân tích Phương pháp này tạo nên tập đồng bộ của một từ tố có chứa tất cả các từ tố khác.

Trang 39

Ví dụ:

 synch = {+, *, ), $ }

Trang 40

Ví dụ:

 Xâu vào:

) a * + a

Trang 41

Bài tập

1 Cho một văn phạm với các luật sản xuất như sau:

E → aEbE | bEaE | ε

Văn phạm này có là văn phạm LL(1) không? Tại sao?

2 Cho một văn phạm với các luật sản xuất như sau:

Ngày đăng: 22/12/2016, 12:40

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w