Khôi phục lỗi trong phân tích LR

Một phần của tài liệu ngôn ngữ lập trình và chương trình dịch (Trang 66 - 68)

- Stack lưu một chuỗi s0X1s1X 2s2 X msm trong đó sm nằm trên đỉnh Stack

3.2Khôi phục lỗi trong phân tích LR

1) Mục LR( của văn phạm G là một cặp dạng [A,a], trong đó A là luật sinh, a là một ký hiệu kết thúc hoặc $.

3.2Khôi phục lỗi trong phân tích LR

Một bộ phân tích LR sẽ phát hiện ra lỗi khi nó gặp một mục báo lỗi trong bảng action (chú ý sẽ không bao giờ bộ phân tích gặp thông báo lỗi trong bảng goto). Chúng ta có thể thực hiện chiến lược khắc phục lỗi cố gắng cô lập đoạn câu chứa lỗi cú pháp: quét dọc xuống ngăn xếp cho đến khi tìm được một trạng thái s có một hành động goto trên một ký hiệu không kết thúc A ngay sau nó. Sau đó bỏ đi không hoặc nhiều ký hiệu đầu vào cho đến khi gặp một ký hiệu kết thúc a thuộc Follow(A), lúc này bộ phân tích sẽ đưa trạng thái goto(s,A) vào ngăn xếp và tiếp tục quá trình phân tích.

Đọc thêm

Phƣơng pháp phân tích bảng CYK (Cocke – Younger – Kasami)

- Giải thuật làm việc với tất cả các VP PNC. Thời gian phân tích là: n3 (n là độ dài xâu vào cần phân tích), nếu văn phạm không nhập nhằng thì thờI gian phân tích là: n2.

- Điều kiện của thuật toán là văn phạm PNC ở dạng chuẩn chômsky (CNF) và không có sản xuất (sản xuất A ) và các kí hiệu vô ích.

Giải thuật CYK:

- Tạo một hình tam giác (mỗi chiều có độ dài là n , n là độ dài của xâu). Thực hiện giải thuật:

Begin

1) For i:=1 to n do

ij = { A | A a là một sản xuất và a là kí hiệu thứ i trong w}; 2) For j:=2 to n do For i:=1 to (n – j +1) do Begin ij = ; For k:=1 to (j -1) do ij = ij { A | A BC là một sản xuất; B ik C i+k, j -k }; end; end;

Ví dụ: Xét văn phạm chuẩn chômsky

S AB|BC; A BA|a; B CC|b; C AB|a; (1) (2) (3) (4) (5) (6) (7) (8) Xâu vào w= baaba;

i j

b a a b a

B A,C A,C B A,C

S,A B S,C S,A

B B

S,A,C S,A,C

B A,C A,C B A,C S,A B S,C S,A

Một phần của tài liệu ngôn ngữ lập trình và chương trình dịch (Trang 66 - 68)