và nhiều trình biên dịch đã được viết bằng cách sử dụng các bộ PTCP LL. Nhưng văn phạm LL là không đủ tổng quát để giải quyết các[r]
(1)Trang
Lý thuyết Ơtơmát & NNHT - Khoa Cơng NghệThơng Tin
Chương Ơtơmát đẩy xuống Có hay khơng lớp ơtơmát tương ứng với lớp NNPNC? Nhưđã biết, ôtômát hữu hạn không thểnhận biết tất cả
NNPNC, chẳng hạn L= {anbn: n ≥ 0}, có một bộ nhớhữu hạn Vì vậy muốn có một máy màđếm khơng giới hạn
Từví dụ ngơn ngữ{wwR}, cần thêm khả năng lưu so trùng một dãy kí hiệu thứtự ngược lại. Điều đềnghịchúng ta thử một stack như một cơ chế
lưu trữ Đó lớp ơtơmát đẩy xuống(PushDown Automata - PDA)
Trang
Chương Ơtơmát đẩy xuống 7.1 PDA khơng đơn định
7.2 NPDA NNPNC
(2)Trang
Lý thuyết Ơtơmát & NNHT - Khoa Cơng NghệThơng Tin
Ơtơmát đẩy xuống khơng đơn định
Mỗi di chuyển đơn vị điều khiển đọc kí hiệu nhập,
trong thời điểm thay đổi nội dung stack
Mỗi di chuyển xác định kí hiệu nhập tại, kí hiệu
hiện đỉnh stack Kết quảlà trạng thái
đơn vịđiều khiểnvà thay đổi đỉnh stack
Chúng ta sẽchỉnghiên cứu PDA thuộc loại accepter
Control unit
Stack Input file
Trang
Định nghĩa ôtômát đẩy xuống Định nghĩa 7.1
Một accepter đẩy xuống không đơn định (npda) định nghĩa bộbảy M= (Q, Σ, Γ, δ, q0, z, F),
Qlà tập hữu hạn trạng thái nội đơn vị điều khiển, Σlà bảng chữcái ngõ nhập (input alphabet),
Γlà bảng chữcái stack (stack alphabet),
q0∈Qlà trạng thái khởi đầu đơn vị điều khiển, z ∈ Γlà kí hiệu khởi đầu stack (stack start symbol), F⊆Qlà tập trạng thái kết thúc
Hàm chuyển trạng thái δlà ánh xạ
(3)Trang
Lý thuyết Ơtơmát & NNHT - Khoa Cơng NghệThơng Tin
Ví dụ
δ(q, a, b) = {(p, cd)}
Ví dụ
Xét npda với Q= {q0,q1,q2,qf}, Σ= {a, b},
Γ= {0, 1, z}, F= {qf},
Stack
a
b c d
Input file
Control unit
qp
Trang
Nhận xét
δ(q0, a, z) = {(q1,1z), (qf, λ)}, δ(q0, λ, z) = {(qf, λ)}, δ(q1, a, 1) = {(q1, 11)}, δ(q1, b, 1) = {(q2, λ)}, δ(q2, b, 1) = {(q2, λ)}, δ(q2, λ, z) = {(qf, λ)} δ(q0, b, 0) không định nghĩa tương đương với cấu hình
chết mà ta học
δ(q1, a, 1) = {(q1, 11)}thêm kí hiệu vào stack a
đọc
δ(q2, b, 1) = {(q2, λ)}xóa kí hiệu khỏi stack b
đọc
(4)Trang
Lý thuyết Ơtơmát & NNHT - Khoa Công NghệThông Tin
Một số khái niệm Hình trạng tức thời
Là bộba (q, w, u), trong đóqlà trạng thái đơn vị điều
khiển, wlà phần chưa đọc chuỗi nhập, cịn ulà nội dung stack (với kí hiệu trái kí hiệu đỉnh stack) Di chuyển,
Một di chuyển từmột hình trạng tức thời đến hình
trạng tức thời khác kí hiệu
(q1,aw,bx) (q2, w, yx)là có khả ⇔(q2, y) ∈ δ(q1, a, b)
, ,
Dấu *chỉra có≥0 bước di chuyển thực cịn dấu +
chỉra ≥1 bước di chuyển ChữMchỉra di chuyển ôtômát
_ |
_ | _
|
* _ | |_+
M
_ |
Trang
Ngôn ngữ chấp nhận npda Định nghĩa 7.2
Cho M = (Q, Σ, Γ, δ, q0, z, F) npda Ngôn ngữ
chấp nhận bởiM là tập
L(M)= {w ∈ Σ*: (q0, w, z) (qf, λ, u), qf∈F, u ∈ Γ*}.
Ví dụ
Xây dựng npda cho ngơn ngữ
L= {w∈{a, b}*: na(w) = nb(w)}
(5)Trang
Lý thuyết Ơtơmát & NNHT - Khoa Cơng NghệThơng Tin
Ví dụ
Xây dựng npda cho ngôn ngữnày sau M= ({q0, qf}, {a, b}, {0, 1, z}, δ, q0, z, {qf})
δ(q0, λ, z) = {(qf, z)},
δ(q0, a, z) = {(q0, 0z)}, δ(q0, b, z) = {(q0, 1z)},
δ(q0, a, 0) = {(q0, 00)}, δ(q0, b, 0) = {(q0, λ)},
δ(q0, a, 1) = {(q0, λ)}, δ(q0, b, 1) = {(q0, 11)},
Trong qúa trình xửlý chuỗi baab, npda thực di chuyển
sau
(q0, baab, z) (q0, aab, 1z) (q0, ab, z) (q0, b, 0z) (q0, λ, z)
(qf, λ, z)
_
| |_ |_ |_
_ |
Trang 10
Ví dụ (tt)
Xây dựng npda cho ngôn ngữ
L = {wwR:w∈{a, b}+}
M= ({q0, q1, qf}, {a, b}, {a, b, z}, δ, q0, z, {qf})
δ(q0, a, z) = {(q0, az)},
δ(q0, b, z) = {(q0, bz)},
δ(q0, a, a) = {(q0, aa)},
δ(q0, b, a) = {(q0, ba)},
δ(q0, a, b) = {(q0, ab)},
δ(q0, b, b) = {(q0, bb)}
δ(q0, λ, a) = {(q1, a)}, δ(q0, λ, b) = {(q1, b)},
δ(q1, a, a) = {(q1, λ)},
δ(q1, b, b) = {(q1, λ)},
(6)Trang 11
Lý thuyết Ơtơmát & NNHT - Khoa Cơng NghệThơng Tin
Ví dụ (tt)
Dãy chuyển hình trạng đểchấp nhận chuỗi abbalà
(q0, abba, z) (q0, bba, az) (q0, ba, baz) (q1, ba, baz) (q1, a, az) (q1, λ, z) (qf, λ, z)
Npda cải tiến
δ(q0, a, z) = {(q0, aa)}, δ(q1, a, a) = {(q1, λ)},
δ(q0, b, z) = {(q0, bz)}, δ(q1, b, b) = {(q1, λ)},
δ(q0, a, a) = {(q0, aa), (q1, λ)}, δ(q1, λ, z) = {(qf, z)}
δ(q0, b, a) = {(q0, ba)},
δ(q0, a, b) = {(q0, ab)},
δ(q0, b, b) = {(q0, bb), (q1, λ)}
_
| |_ |_
_
| |_ |_
Trang 12
Bài tập
Dãy chuyển hình trạng đểchấp nhận chuỗi abbalà
(q0, abba, z) (q0, bba, az) (q0, ba, baz) (q1, a, az) (q1, λ, z) (qf, λ, z)
Xây dựng npda cho ngôn ngữsau
L1= {anbmcn+m: n, m≥0} L2= {anbn+mcm: n, m≥1} L3= {anbm: 2n≤m≤3n} L4= {w: na(w) = nb(w) + 2} L5= {w: na(w) = 2nb(w)}
L6= {w: 2nb(w) ≤na(w) ≤3nb(w)} _
| |_ |_
_
(7)Trang 13
Lý thuyết Ơtơmát & NNHT - Khoa Cơng NghệThơng Tin
Ơtơmát đẩy xuống cho NNPNC
Chúng ta xây dựng npda mà có thểthực (mơ
phỏng) DXTNcủa chuỗi bất kỳtrong ngôn ngữ
Giảthiết ngơn ngữ sinh văn phạm có dạng
chuẩn Greibach
Pda xây dựng sẽbiểu diễn sựdẫn xuất cách sau Giữcác biến phần bên phải dạng câutrên stack
nó, cịn phần bên trái, chuỗi chứa kí hiệu kết thúc, giống với phần chuỗi đọc ởngõ nhập
Chúng ta bắt đầu việc đặt kí hiệu khởi đầu lên stack Đểmơ việc áp dụng luật sinh A→ax, phải có
biến A đỉnh stackvàkí hiệu kết thúc alà kí hiệu nhập
Biến đỉnh stackđược loại bỏvà thay thếbằng chuỗi biến x
Trang 14
Ví dụ
Xây dựng npda cho ngơn ngữ sinh văn phạm sau
S →aSbb | a.
Đầu tiên ta biến đổi văn phạm sang dạng chuẩn Greibach,
thành văn phạm là:
S →aSA | a, A →bB, B →b.
Ơtơmát tương ứng sẽcó ba trạng thái {q0, q1, qf}, với trạng thái
khởi đầu làq0và trạng thái kết thúc làqf
Đầu tiên, ởtrạng thái khởi đầu biến S đặt stack
(8)Trang 15
Lý thuyết Ơtơmát & NNHT - Khoa Cơng NghệThơng Tin
Ví dụ (tt)
Các luật sinh S→aSA | a mô thành
δ(q1, a, S) = {(q1, SA), (q1, λ)}
Bằng kiểu tương tự, luật sinh khác mô
δ(q1, b, A) = {(q1, B)}, δ(q1, b, B) = {(q1, λ)}
Sựxuất kí hiệu khởi đầu stack đỉnh stack báo hiệu
hoàn tất dẫn xuất PDA đặt vào trạng thái kết thúc chuyển trạng thái
δ(q1, λ, z) = {(qf, λ)}
Trang 16
Ví dụ (tt)
Stack
a
z
Input file
Control unit
q0 q1 a b b a
Input file
a b b
•S ⇒ a•SA ⇒ aa•A ⇒ aab•B ⇒ aabb•
S S A
# #
B qf
(9)Trang 17
Lý thuyết Ơtơmát & NNHT - Khoa Công NghệThông Tin
Định lý
Định lý 7.1
Đối với NNPNC bất kỳkhông chứa λ, tồn npda M
sao cho
L = L(M).
Thủtục:GGreibach-to-npda
Input:G= (V, T, S, P) có dạng chuẩn Greibach
Output:npda M= (Q, Σ, Γ, δ, q0, z, F) cho L(M) = L(G)
B1 M= ({q0, q1, qf}, T, V∪{z}, δ, q0, z, {qf}), z∉V B2 δ(q0, λ, z) = {(q1, Sz)}
B3 δ(q1, a, A) ∋{(q1, u)} ⇔Pcó luật sinh A→au
B4 δ(q1, λ, z) = {(qf, z)}
Trang 18
Ví dụ
S→aA,
A→aABC | bB | a,
B→b,
C→c
δ(q0, λ, z) = {(q1, Sz)}, δ(q1, a, S) = {(q1, A)},
δ(q1, a, A) = {(q1, ABC), (q1, λ)}, δ(q1, b, A) = {(q1, B)},
δ(q1, b, B) = {(q1, λ)}, δ(q1, c, C) = {(q1, λ)}, δ(q1, λ, z) = {(qf, z)} w = aaabc
•S
⇒a•A
⇒aa•ABC
⇒aaa•BC
⇒aaab•C
⇒aaabc•
(q0, aaabc, z) (q1, aaabc, Sz) (q1, aabc, Az) (q1, abc, ABCz) (q1, bc, BCz) (q1, c, Cz) (q1, λ, z) (qf, λ, z)
(10)Trang 19
Lý thuyết Ơtơmát & NNHT - Khoa Công NghệThông Tin
Thủ tục G-to-npda cải tiến Thủtục:G-to-npda
Input:G= (V, T, S, P) có dạng tùy ý
Output:npda M= (Q, Σ, Γ, δ, q0, z, F) cho L(M) = L(G)
B1 M= ({q0, q1, qf}, T, V ∪T∪{z}, δ, q0, z, {qf}), z∉V B2 δ(q0, λ, z) = {(q1, Sz)}
B3 δ(q1, a, A) ∋{(q1, u)} ⇔Pcó luật sinh A→au, a ∈T
B4 δ(q1, λ, A) ∋{(q1, u)} ⇔Pcó luật sinh A→u vàukhơng có kí hiệu kết thúc đầu
B5 δ(q1, a, a) = (q1, λ) với a∈Tvàa xuất vế phải luật sinh mà khơng phải ởvịtrí khởi đầu B6 δ(q1, λ, z) = {(qf, z)}
Trang 20
Ví dụ
S →aA | bBbS | AB, A →aB | bBaA, B →aBbB | SB | λ δ(q0, λ, z) = {(q1, Sz)},
δ(q1, a, S) = {(q1, A)},
δ(q1, b, S) = {(q1, BbS)},
δ(q1, λ, S) = {(q1, AB)},
δ(q1, a, A) = {(q1, B)},
δ(q1, b, A) = {(q1, BaA)},
δ(q1, a, B) = {(q1, BbB)},
δ(q1, λ, B) = {(q1, SB), (q1, λ)},
δ(q1, a, a) = {(q1, λ)},
δ(q1, b, b) = {(q1, λ)},
δ(q1, λ, z) = {(qf, z)}
w = baabaa
•S
⇒b•BbS
⇒b•SBbS
⇒ba•ABbS
⇒
baa•BBbS
⇒baa•BbS
⇒baab•S
⇒baaba•A
⇒baabaa•B
⇒baabaa•
(q0, baabaa, z) (q1, baabaa, Sz)
(q1, aabaa, BbSz) (q1, aabaa, SBbSz)
(q1, abaa, ABbSz) (q1, baa, BBbSz) (q1, baa, BbSz) (q1, baa, bSz) (q1, aa, Sz) (q1, a, Az) (q1, λ, Bz) (q1, λ, z) (qf, λ, z)
(11)Trang 21
Lý thuyết Ơtơmát & NNHT - Khoa Công NghệThông Tin
VPPNC cho ôtômát đẩy xuống
Quá trình ngược với trình Định lý 7.1, tức xây
dựng văn phạm mô sựdi chuyển pda
Phần biến dạng câu phản ánh nội dung stack, phần chuỗi
nhập xửlý phần chuỗi kí hiệu kết thúc làm tiếp đầu ngữcủa dạng câu
Bổ đề
∀npda ∃npda tương đương thõa điều kiện
(1) Chỉcó trạng thái kết thúc npda ởtrong trạng thái ⇔stack trống
(2) Mọi chuyển trạng thái có dạng δ(qi, a, A) = {c1, c2, ,
cn},
ci= (qj, λ), (7.5)
ci= (qj, BC) (7.6) hoTứặc là, mc tăng hoột di chuyặc giảm nển ội
dung stack kí hiệu
Trang 22
VPPNC cho ôtômát đẩy xuống (tt)
Chúng ta muốn dạng câu chỉra nội dung stack
Cấu hình npda cịn liên quan đến trạng thái nội
ơtơmát nên nóphải ghi nhớtrong dạng câu
Lấy (qiAqj)làm biến cho văn phạm, với diễn dịch
(qiAqj) w chỉnếu npda “xóa” A khỏi stack từ trạng thái qiđến qj đọc ngõ nhập chuỗi w.
“Xóa”ở có nghĩa làAvà kết quảsau nóbiến khỏi
stack, kí hiệu bên A sẽtrởthành đỉnh stack Ví dụ
δ(qi, a, A) = (qj, λ) (qiAqj) →a
δ(qi, a, A) = (qj, BC) (qiAqk) →a(qjBql)(qlCqk)
(12)Trang 23
Lý thuyết Ơtơmát & NNHT - Khoa Công NghệThông Tin
VPPNC cho ôtômát đẩy xuống (tt)
trong đóqkvàqllấy giá trịcó thểtrong Q.
Khi vét cạn có thểcó vài qkkhơng thể đạt tới từqi
trong xóa Acũng có thểcó vài qlkhơng thể đạt tới từqjtrong xóa B
Trong trường hợp biến (qiAqk)và(qjbql)sẽlàvô dụng Những biến loại bỏbằng giải thuật loại bỏcác biến
vô dụng học
Biến (q0zqf)sẽlà biến khởi đầu, đóqflà trạng thái kết
thúc đơn npda
Trang 24
Ví dụ
Xây dựng VPPNC cho npda sau (q0khởi đầu, q2kết thúc)
δ(q0, a, z) = {(q0, Az)},
δ(q0, a, A) = {(q0, A)},
δ(q0, b, A) = {(q1, λ)},
δ(q1, λ, z) = {(q2, λ)}
Biến đổi thành npda tương đương thõa điều kiện
δ(q0, a, z) = {(q0, Az)}, (1)
δ(q0, a, A) = {(q3, λ)}, (2)
δ(q3, λ, z) = {(q0, Az)}, (3)
δ(q0, b, A) = {(q1, λ)}, (4)
δ(q1, λ, z) = {(q2, λ)} (5)
(13)Trang 25
Lý thuyết Ơtơmát & NNHT - Khoa Cơng NghệThơng Tin
Ví dụ (tt)
Ba chuyển trạng thái (2), (4), (5) có dạng (7.5) nên có luật
sinh tương ứng với
δ(q0, a, A) = {(q3, λ)}, (2) (q0Aq3) →a (6)
δ(q0, b, A) = {(q1, λ)}, (4) (q0Aq1) →b (7)
δ(q1, λ, z) = {(q2, λ)} (5) (q1zq2) → λ (8)
Trang 26
Ví dụ (tt)
δ(q0, a, z) = {(q0, Az)} mô thành
(q0zq0) → a(q0Aq0)(q0zq0) | a(q0Aq1)(q1zq0) | a(q0Aq2)(q2zq0) |
a(q0Aq3)(q3zq0),
(q0zq1) → a(q0Aq0)(q0zq1) | a(q0Aq1)(q1zq1) | a(q0Aq2)(q2zq1) |
a(q0Aq3)(q3zq1),
(q0zq2) → a(q0Aq0)(q0zq2) | a(q0Aq1)(q1zq2) | a(q0Aq2)(q2zq2) |
a(q0Aq3)(q3zq2),
(q0zq3) → a(q0Aq0)(q0zq3) | a(q0Aq1)(q1zq3) | a(q0Aq2)(q2zq3) |
(14)Trang 27
Lý thuyết Ơtơmát & NNHT - Khoa Cơng NghệThơng Tin
Ví dụ (tt)
Chuyển trạng thái δ(q3, λ, z) = {(q0, Az)} có thểđượcmơ
bằng tập luật sinh sau
(q3zq0) → (q0Aq0)(q0zq0) | (q0Aq1)(q1zq0) | (q0Aq2)(q2zq0) |
(q0Aq3)(q3zq0),
(q3zq1) → (q0Aq0)(q0zq1) | (q0Aq1)(q1zq1) | (q0Aq2)(q2zq1) |
(q0Aq3)(q3zq1),
(q3zq2) → (q0Aq0)(q0zq2) | (q0Aq1)(q1zq2) | (q0Aq2)(q2zq2) |
(q0Aq3)(q3zq2),
(q3zq3) → (q0Aq0)(q0zq3) | (q0Aq1)(q1zq3) | (q0Aq2)(q2zq3) |
(q0Aq3)(q3zq3),
Trang 28
Ví dụ (tt)
Biến khởi đầu văn phạm là(q0zq2) Loại bỏbiến vô dụng
(q0zq0) → a(q0Aq0)(q0zq0) | a(q0Aq1)(q1zq0) | a(q0Aq2)(q2zq0) | a(q0Aq3)(q3zq0),
(q0zq1) → a(q0Aq0)(q0zq1) | a(q0Aq1)(q1zq1) | a(q0Aq2)(q2zq1) | a(q0Aq3)(q3zq1),
(q0zq2) → a(q0Aq0)(q0zq2) | a(q0Aq1)(q1zq2)| a(q0Aq2)(q2zq2) |
a(q0Aq3)(q3zq2),
(q0zq3) → a(q0Aq0)(q0zq3) | a(q0Aq1)(q1zq3) | a(q0Aq2)(q2zq3) | a(q0Aq3)(q3zq3),
(15)Trang 29
Lý thuyết Ơtơmát & NNHT - Khoa Cơng NghệThơng Tin
Ví dụ (tt)
(q3zq0) → (q0Aq0)(q0zq0) | (q0Aq1)(q1zq0) | (q0Aq2)(q2zq0) |
(q0Aq3)(q3zq0),
(q3zq1) → (q0Aq0)(q0zq1) | (q0Aq1)(q1zq1) | (q0Aq2)(q2zq1) |
(q0Aq3)(q3zq1),
(q3zq2) → (q0Aq0)(q0zq2) | (q0Aq1)(q1zq2)| (q0Aq2)(q2zq2) |
(q0Aq3)(q3zq2),
(q3zq3) → (q0Aq0)(q0zq3) | (q0Aq1)(q1zq3) | (q0Aq2)(q2zq3) |
(q0Aq3)(q3zq3),
(q0Aq3)→a (6) (q0Aq1)→b (7) (q1zq2) → λ (8)
Trang 30
Ví dụ (tt)
(q0, aab, z) (q0, ab, Az) (q0zq2) ⇒ a(q0Aq3)(q3zq2) (q3, b, z) ⇒ aa(q3zq2)
(q0, b, Az) ⇒ aa(q0Aq1)(q1zq2) (q1, λ, z) ⇒ aab(q1zq2) (q2, λ, λ) ⇒ aab
Phân tích chuỗiaab
_ |
_ |
_ |
_ |
_ |
Npda
δ(q0, a, z) = {(q0, Az)},
δ(q0, a, A)= {(q3, λ)},
δ(q3, λ, z) = {(q0, Az)},
δ(q0, b, A)= {(q1, λ)},
δ(q1, λ, z) = {(q2, λ)} Văn phạm kết
(q0zq2) →a(q0Aq1)(q1zq2) | a(q0Aq3)(q3zq2), (q3zq2) →(q0Aq1)(q1zq2) | (q0Aq3)(q3zq2), (q0Aq3)→a,
(16)Trang 31
Lý thuyết Ơtơmát & NNHT - Khoa Cơng NghệThơng Tin
Ví dụ (tt)
Định lý 7.2
Nếu L= L(M) npda Mnào đó, thìLlà NNPNC.
S →aBC| aAX,
X→BC| AX,
A→a,
B→b,
C→λ,
S →ab| aaX,
X →b| aX, L = {anb: n≥1}
Rút gọn văn phạm
(q0zq2) →a(q0Aq1)(q1zq2) | a(q0Aq3)(q3zq2), (q3zq2) →(q0Aq1)(q1zq2) | (q0Aq3)(q3zq2), (q0Aq3)→a,
(q0Aq1)→b, (q1zq2) →λ,
Trang 32
PDA đơn định NNPNC đơn định
Định nghĩa 7.3
Một ôtômát đẩy xuống M= (Q, Σ, Γ, δ, q0, z, F) gọi
đơn địnhnếu ôtômát định nghĩa Định nghĩa 7.1, phải chịu sựgiới hạn rằng, đối ∀trạng thái q∈Q, kí hiệu a∈Σ∪{λ}, vàb∈ Γ,
(1)δ(q, a, b) chứa tối đa phần tử,
(2) Nếu δ(q, λ, b) ≠ ∅, thìδ(q, c, b) phải = ∅ ∀c ∈Σ Định nghĩa 7.4
Một ngôn ngữL gọi NNPNC đơn địnhnếu chỉnếu
(17)Trang 33
Lý thuyết Ơtơmát & NNHT - Khoa Cơng NghệThơng Tin
Ví dụ
Ngơn ngữL= {anbn: n≥0}là PNCĐĐ Vì chấp nhận
bởi dpda sau
M= ({q0f, q1, q2}, {a, b}, {z, a}, δ, q0f, z, {q0f}) với
δ(q0f, a, z) = {(q1, az)},
δ(q1, a, a) = {(q1, aa)},
δ(q1, b, a) = {(q2, λ)},
δ(q2, b, a) = {(q2, λ)},
δ(q2, λ, z) = {(q0f, λ)}
Trang 34
Ví dụ (tt)
Cách 2(với #là kí hiệu kết thúc chuỗi – eof)
M= ({q0, q1, qf}, {a, b}, {z, 1}, δ, q0, z, {qf}) với
δ(q0, #, z) = {(qf, λ)},
δ(q0, a, z) = {(q0, 1z)},
δ(q0, a, 1) = {(q0, 11)},
δ(q0, b, 1) = {(q1, λ)},
δ(q1, b, 1) = {(q1, λ)},
(18)Trang 35
Lý thuyết Ơtơmát & NNHT - Khoa Công NghệThông Tin
Bài tập Xây dựng dpda cho ngôn ngữsau
L1= {anbmcn+m: n, m≥0} L2= {anbn+mcm: n, m≥1} L3= {anbm: 2n≤m≤3n} L4= {w: na(w) = nb(w) + 2} L5= {w: na(w) = 2nb(w)}
L6= {w: 2nb(w) ≤na(w) ≤3nb(w)}
Trang 36
Dpda Npda
Dpda lớp thực sựcủa npda
L1= {anbn: n≥0}vàL2= {anb2n: n≥0} NNPNC vàL=
L1∪L2cũng NNPNC
Lsẽ chứng minh NNPNC đơn định
Chứng minh
Trước hết sửdụng kết Chương
ngôn ngữL0= {anbncn: n≥0}là không phi ngữcảnh.
GiảsửLlà NNPNC đơn định, gọi M= (Q, Σ, Γ, δ, q0, z, F)là
(19)Trang 37
Lý thuyết Ơtơmát & NNHT - Khoa Công NghệThông Tin
Dpda Npda (tt)
Xét
M’= (Q’, Σ, Γ, δ ∪ δ’, q0, z, F’)
Q’= Q∪{q0’, q1’, , qn’}, F’= F∪{qi’: qi∈F},
δ’(qf, λ, s)= {(qf’, s)} ∀qf∈F, s∈ Γ,
δ’(qi’, c, s)= {(qj’, u)} ∀ δ(qi, b, s) ={(qj, u)},
anbn
cn
bn
λ λ
Đơn vịđiều khiển M
Phần thêm vào
Trang 38
Dpda Npda (tt)
ĐểMchấp nhận anbnchúng ta phải có
(q0, anbn, z) * (q
i, λ, u), với qi∈F Bởi Mlà đơn định, phải
(q0, anb2n, z) * (q
i, bn, u), đểnó chấp nhận anb2nphải có
(qi, bn, u) * (q
j, λ, u1),
với qjnào đó∈F Nhưng theo cách xây dựng ta có (qi’, cn, u) * (qj’, λ, u1),
như M’sẽchấp nhận anbncn.
Khơng có chuỗi khác chuỗi L’là
chấp nhận M’
Suy {anbncn}là PNC (><) Vậy L PNC không đơn định
M _ |
M _ |
M _ |
(20)Trang 39
Lý thuyết Ơtơmát & NNHT - Khoa Công NghệThông Tin
Văn phạm cho NNPNC đơn định
NNPNCĐĐ cho phép PTCP cách hiệu quả, cách xem
dpda thiết bịphân tích
Tính đơn địnhsuy việc xửlý chuỗi nhập thời gian
tuyến tínhvới chiều dài chuỗi nhập
Những loại văn phạm thích hợp cho việc mơ tảcác
NNPNCĐĐ cho phép PTCP thời gian tuyến tính
Giảsửchúng ta phân tích từtrên xuống, thửtìm
DXTN câu cụthể
Chuỗi nhập w a1 a2 a3 a4 an Dạng câu a1 a2 a3 A
Phần Phần chưa so trùng so trùng
Trang 40
Văn phạm cho NNPNC đơn định (tt)
Quét chuỗi nhập w từ trái sang phải, phát triển dạng
câu mà chuỗi kí hiệu kết thúc tiếp đầu ngữcủa so trùng với tiếp đầu ngữcủa chuỗi w cho đến kí hiệu quét
Để tiếp tục so trùng kí hiệu kế tiếp, muốn biết
chính xác luật sinh áp dụng bước để tránh backtracking cho phép PTCP hiệu
Có hay khơng loại văn phạm cho phép làm điều này?
Với VPPNC tổng quát, điều không thể, dạng
của văn phạm hạn chế hơn, thực mục đích
Văn phạm-s ví dụ khả biểu diễn ngơn ngữ
(21)Trang 41
Lý thuyết Ôtômát & NNHT - Khoa Công NghệThông Tin
Văn phạm LL(k) Định nghĩa 7.5
Cho G= (V, T, S, P) VPPNC Nếu cặp dẫn
xuất trái
S w1Ax1⇒w1y1x1 w1w2, S w1Ax2⇒w1y2x2 w1w3,
với w1, w2, w3∈T*, sựbằng kkí hiệu trái w2 vàw3(nếu có) ⇒y1= y2, thìG gọi VPLL(k)
Điều có nghĩa nhìn trước kkí hiệu ngõ nhập
có tối đa luật sinh đắn Ví dụ
Văn phạm bên thuộc loại LL(1)
*
⇒ ⇒*
*
⇒ ⇒*
S →aX| bS, (1, 2)
X →b| aS, (3, 4)
Trang 42
Văn phạm LL(k)
Bảng PTCP
Ví dụ
Các văn phạm sau thuộc họLL(k) khơng? Nếu cók= ? S →aSbS| bSaS| λ, (1, 2, 3)
S →aX| bS, (1, 2)
X →b| aS, (3, 4)
4
X
2
S
#
b a
S →aS| AB, (1, 2)
A →bA| b, (3, 4)
(22)Trang 43
Lý thuyết Ơtơmát & NNHT - Khoa Cơng NghệThơng Tin
Văn phạm LL(k)
Văn phạm LL(k) cho phép PTCP đơn định nhìn trước kkí
hiệu
Văn phạm LLlà chủ đềquan trọng việc nghiên cứu
các trình biên dịch
Một sốNNLT định nghĩa văn phạm LL,
và nhiều trình biên dịch viết cách sửdụng PTCP LL
Nhưng văn phạm LLlà không đủtổng quát đểgiải
NNPNCĐĐ Vì vậy, có mối quan tâm đến loại văn phạm khác, văn phạm đơn định tổng quát
Đó văn phạm LR, mà cho phép PTCP hiệu quả, xây
dựng dẫn xuất từ lên
Trang 44
Bài tập
Xây dựng văn phạm LL(k) cho ngôn ngữ sau
L1= {anbn: n ≥0}
L2= {w ∈{a, b}*: na(w) = nb(w)}
L3= {w ∈{a, b}*: na(w) = nb(w), na(v) ≥nb(v) với vlà tiếp