Phân tích topdown

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 37 - 39)

- Phương pháp phân tích cơ bản (phương pháp phân tích quay lui: topdown, bottom – up) Phương pháp phân tích hiệu quả (phương pháp phân tích tất định: LL, LR).

2.1Phân tích topdown

2. CÁC PHƢƠNG PHÁP PHÂN TÍCH

2.1Phân tích topdown

* Thuật toán phân tích Top-down

Input: Văn phạm PNC G = ( , , P, S) không đệ quy trái, xâu w = a1, a2, … an

Output: Cây phân tích từ trên xuống của xâu w (w L(G)), báo lỗi (w L(G)). Method:

Dùng một con trỏ chỉ đến xâu vào w. Ký hiệu trên xâu vào do con trỏ chỉ đến gọi là ký hiệu vào hiện tại.

1) Khởi tạo cây với gốc là S, con trỏ trỏ đến kí hiệu đầu tiên của xâu w là a1. 2) Kiểm tra nút đang xét:

2.1. Nếu nút đang xét là biến A thì chọn một sản xuất có vế trái là A trong P (giả sử sản xuất A X1...Xk) để triển khai. Lấy nút X1 làm nút đang xét.

(các Xi { })

2.2. Nếu nút đang xét là kí hiệu kết thúc a thì đối sánh a với ký hiệu vào hiện tại a1

+ a = a1: lấy nút ngay bên phải a làm nút đang xét, con trỏ dịch sang bên phải một ký hiệu trên xâu w.

+ a khác a1: quay lại nút trước đó và lặp lại b2 với thử lựa chọn sản xuất khác.

2.3. Nếu nút đang xét là thì chuyển sang nút ngay bên phải nó làm nút đang xét

Tiếp tục lặp lại bước 2. Thủ tục trên lặp lại sau hữu hạn bước và có 2 khả năng xảy ra:

+ Nếu đối sánh hết xâu vào và cây không còn nút nào chưa xét nữa thì được một cây phân tích.

+ Nếu đã quay lui hết các trường hợp mà không sinh được cây phân tích thì kết luận w L(G)

* Điều kiện để một văn phạm phi ngữ cảnh phân tích được bởi thuật toán Top-down là văn phạm không có đệ qui trái.

* Độ phức tạp thuật toán là hàm số mũ n với n là độ dài xâu vào.

Ví dụ: Cho văn phạm G = {S aSbS | aS | c} Phân tích xâu “aacbc” bằng

S a S b S

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 37 - 39)