21/1/2010

Làm thế nào để sản sinh ra các xâu ?

Bài 3. Văn phạm sản sinh Văn phạm sản sinh

Văn phạm phi ngữ cảnh có thể dùng để sản sinh ra các xâu thuộc ngôn ngữ như sau: X = Ký hiệu đầu WhileWhile còn ký hiệu không kết thúc Y trong X dodo Áp dụng một trong các sản xuất của,văn phạm chẳng hạn Y -> w

1 2

Ví dụ

Suy dẫn (Derivations)

(cid:132) Mỗi lần thực hiện việc thay thế là một

bước suy dẫn. bước suy dẫn

S -> +A | -A |A A -> B.B | B B -> BC | C C -> 0 | 1 | 2 |. . . .|9

(cid:132) Nếu mỗi dạng câu có nhiều ký hiệu không kết thúc để thay thế có thể sử dụng bất cứ sản xuất nào.

Khi X chỉ chứa ký hiệu kết thúc, nó là xâu được sản sinh bởi văn phạm.

1

3 4

21/1/2010

Cây suy dẫn(Cây phân tích cú pháp)

Suy dẫn trái và suy dẫn phải

Cây suy dẫn có những đặc điểm sau 1) Mỗi nút của cây có nhãn là ký hiệu kết thúc, ký hiệu không kết thúc hoặc ε (xâu rỗng)

2) Nhãn của nút gốc là S (ký hiệu

đầu)

q

y

y

3) Nút trong có nhãn là ký hiệu

(cid:132) Nếu giải thuật phân tích cú pháp chọn ký hiệu không kết thúc cực trái hay cực phải để thay thế, kết quả của nó lad suy dẫn , trái hoặc suy dẫn phải

không kết thúc

4) Nút A có các nút con từ trái qua phải là X1, X2, ... , Xk thì có một sản xuất dạng A -> X1 X2 ... Xk 5)Nút lá có thể có nhãn ε chỉ khi tồn tại sản xuất A -> ε và nút cha của nút lá chỉ có một nút con duy nhất

5 6

Văn phạm nhập nhằng

Khử nhập nhằng

Văn phạm E -> E + E E -> E * E E -> ( E ) E -> ident

Cho phép đưa ra hai suy dẫn khác nhau cho xâu ident + ident * ident (chẳng hạn x + y * z)

E -> E + T E -> T T > T * F T -> T F T -> F F -> ( E ) F -> ident

Văn phạm là nhập nhằng

(Bằng cách thêm các ký hiệu không kết thúc và các sản xuất để đảm bảo thứ tự ưu tiên)

2

7 8

21/1/2010

Đệ quy

Khử đệ quy trái

(cid:132) Một sản xuất là đệ qui nếu X =>* ω1X ω2 (cid:132) Có thể dùng để biểu diễn các quá trình lặp hay cấu trúc

lồng nhau

E -> E + T | T T -> T * F | F F -> ( E ) | ident

Đệ quy trực tiếp X =>ω1X ω2

ệ q y

ý ệ

g

g Khử đệ quy trái bằng cách thêm ký hiệu không kết thúc và sản xuất mới

Đệ quy trái X => b | Xa. X => X a => X a a => X a a a =>b a a a a a ... Đệ quy phải X => b | a X. X => a X => a a X => a a a X =>... a a a a a b Đệ quy giữa X => b | "(" X")". X =>(X) =>((X)) =>(((X))) =>(((... (b)...)))

Đệ quy gián tiếp X =>* ω1X ω2

E -> T E' E' -> + T E' | ε T -> F T' T' -> * F T' | ε F -> ( E ) | ident

3

9 10