You are on page 1of 11

CHƯƠNG TRÌNH DỊCH

Lý thuyết + bài tập + trắc nghiệm khoảng 400 bài về các nội dung sau:
- Văn phạm nhập nhằng
- Phương pháp ưu tiên toán tử
- Phương pháp bottom-up parser, top-up parser
- Phép biến đổi LL(1)
- Tìm First, Follow của văn phạm
- Tìm goto, closure của LR, SLR
- Phương pháp tiên đoán M
- Các vấn đề khác nếu được đề xuất
HÀM FIRST VÀ FOLLOW

BIẾN ĐỔI VĂN PHẠM THÀNH DẠNG LL(1)

1. Văn phạm LL(1):


Định nghĩa:
Văn phạm PNC G = ( ∑, ∆ , S, p) được gọi là LL (1) nếu nó thỏa mãn 2 điều
kiện sau :
(1) Mọi SX có dạng A → β1 | β2 | β3 |... | βn thì phải có first(βi) ∩ first(βj) = ∅ ( i #
j)
(2) A ∈ ∆ mà A => +ε thì phải có :
first(A) ∩ follow(A) = ∅
2. Các phép biến đổi:
a. Dạng trực tiếp:
- Dạng 1:
Với đệ quy trái trực tiếp, luật sinh có dạng:
A → Aα1 | Aα2 ...| Aαm | β1 | β2 | ... | βn
Sẽ thay thế bởi:

- Dạng 2:
Với dạng đệ quy trái có tồn tại ký tự trống, luật sinh có dạng:
A -> Aα1 | Aα2 ... |Aαn | ε
Sẽ thay thế bởi:
A -> α1A | α2A |... | αnA | ε

- Dạng 3:
Nếu xuất hiện dạng :
A -> αβ | αγ
Sẽ thay thế bởi:
A -> αA’
A’ -> β | γ
b. Dạng gián tiếp:
3. Bảng phân tích LL :

XÂY DỰNG PHÂN TÍCH CÚ PHÁP


( TÌM GOTO VÀ CLOSURE)

1. Các bước xây dựng văn phạm tăng cường:


2. Xây dựng bảng phân tích cú pháp LR chính tắc
a. Phép bao đóng (closure) :

b. Phép chuyển (goto)

3. Xây dựng bảng phân tích cú pháp SLR


a. Phép bao đóng:
b. Phép chuyển ( goto) :

LÝ THUYẾT

1. Văn phạm nhập nhằng và đơn nghĩa:


=> Cách xác định một văn phạm có phải nhập nhằng hay không : Từ
xâu x vào, sử dụng suy dẫn trái và suy dẫn phải để sinh ra xâu x. Nếu sinh ra
theo được cả 2 cách nghĩa là văn phạm nhập nhằng và ngược lại

2. Xâu và dạng câu :

3. Văn phạm đệ quy:

4. Bảng tóm tắt các thuật toán


Khai báo Thành công
Bottom Stack $ Stack $S
Buffer x$ Buffer $
Top Stack S$ Stack $
Buffer x$ Buffer $
Ưu tiên Stack $ Stack $S
Buffer x$ Buffer x$
Thứ tự yếu Stack $ S_R[x,y] = R*
Buffer x$
Tiên đoán M Stack S$ Stack $
Buffer x$ Buffer $
LL Stack $S Stack $
Buffer x$ Buffer $

5. Điều kiện văn phạm phi ngữ cảnh

6. Ưu tiên toán tử:

7. Thứ tự yếu :
8. Bảng SLR
Các trường hợp thuật toán:
- Nếu Action[Si,ai] = Shift j (Sj):
+ Dịch chuyển ai từ Buff ->Stack. Đẩy j vào
- Nếu Action[Si,ai] = Reduce A->α ¿RJ)
+ Lấy 2*r phần tử ra khỏi Stack. Với r=|α ∨¿
+ Đẩy A vào stack
+ Đẩy j vào stack với j = goto(Si-r,ai)
- Nếu Action[Si,ai] = accept
+ Kết luận đúng
- Nếu Action[Si,ai] = rỗng
+ Kết luận sai

Cách xác định giá trị trong bảng:

Bảng LR y như vậy luôn. Chỉ thêm ký tự và dấu phẩy


thôi. Hiểu phần trên và lấy luôn áp dụng cũng đc

9. Biểu diễn khác của first và Follow :

You might also like