• Nếu A → β là luật sinh trong văn phạm G và α, γ là 2 chuỗi bất kỳ, thì khi áp dụng luật sinh A → β vào chuỗi αααα γγγγ ta sẽ thu ñược chuỗi αβγαβγαβγαβγ :

α γ ⇒⇒⇒⇒G αββββγ

• Văn phạm phi ngữ cảnh (CFG)

• Giả sử: α1 ⇒⇒⇒⇒G α2, α2 ⇒⇒⇒⇒G α3, ..., αm-1 ⇒⇒⇒⇒G αm, ta có:

• Giản lược văn phạm phi ngữ cảnh

α1 ⇒⇒⇒⇒ G αm

• Chuẩn hóa văn phạm phi ngữ cảnh

• Ta có: α ⇒⇒⇒⇒ G α với mọi chuỗi α • Thông thường, ta sẽ dùng ⇒⇒⇒⇒ và ⇒⇒⇒⇒ thay cho ⇒⇒⇒⇒G và ⇒⇒⇒⇒ G

• Các tính chất của văn phạm phi ngữ cảnh

cho CFG G(V, T, P, S)

 ∈∈∈∈

⇒⇒⇒⇒ G

(chuỗi w gồm toàn ký hiệu kết thúc và ñược dẫn ra từ S)

3

1

cây dẫn xuất (hay cây phân tích cú pháp) của một văn

là hệ thống gồm 4 thành phần • V : tập hữu hạn các biến (ký tự chưa kết thúc) • T : tập hữu hạn các ký tự kết thúc (V ∩ T = Ø) • P : tập hữu hạn các luật sinh dạng A → α α α α α∈ α∈ α∈ α∈ (V∪T • S : ký hiệu bắt ñầu của văn phạm

Q

y

ư

c :

• V: chữ in hoa (A, B, C, ..); T: chữ in thường (a, b, c, .., w, x, y..) • α, β, γ, .. biểu diễn chuỗi ký hiệu kết thúc và biến

í

(cid:4) u

V

phạm G(V, T, P, S) có ñặc ñiểm (1) Mỗi nút có một nhãn, là một ký hiệu ∈∈∈∈ (V ∪ T ∪ {ε} ) (2) Nút gốc có nhãn là S (ký hiệu bắt ñầu) (3) Nếu nút trung gian có nhãn A thì A ∈∈∈∈ V (4) Nếu nút n có nhãn A và các ñỉnh n1, n2, ..., nk là con của n theo thứ tự từ trái sang phải có nhãn lần lượt là X1, X2, ..., Xk thì A → X1X2...Xk là một luật sinh trong P (5) Nếu nút n có nhãn là ε thì n phải là nút lá và là nút con duy nhất của nút cha của nó

hay

S → AB A → aAa B → bBb

4

2

S → AB A → aA A → a B → bB B → b

d (cid:9) : G=({S, A, B}, {a, b}, P, S) với P gồm các luật sinh:

Printed with FinePrint - purchase at www.fineprint.com

xét văn phạm G({S, A}, {a, b}, P, S}, với P gồm:

một văn phạm phi ngữ cảnh G ñược gọi là văn phạm

S → aASa A → SbASSba

mơ hồ (ambiguity) nếu nó có nhiều hơn một cây dẫn xuất cho cùng một chuỗi w.

Một dẫn xuất của G:

S ⇒⇒⇒⇒ aAS ⇒ aSbAS ⇒ aabAS ⇒ aabbaS ⇒ aabbaa

xét văn phạm G với luật sinh:

S

1

E →→→→ E + E     E * E     (E)     a

E

Với chuỗi

, ta có thể vẽ ñến 2 cây dẫn xuất khác nhau

E

S

a

A

3

2

4

E

E

E

E

A

a

S

b

6

5

8

7

+

E

E

E

E

a

a

a a +

b

11

10

9

ðiều này có nghĩa là biểu thức a + a * a có thể hiểu theo 2 cách khác

nếu G(V, T, P, S) là một CFG thì ⇒⇒⇒⇒ αααα nếu và chỉ

5

7

hoặc

nhau:

nếu có cây dẫn xuất trong văn phạm sinh ra αααα.

nếu tại mỗi bước dẫn xuất, luật sinh

ñược áp dụng vào biến bên trái nhất (phải nhất)

• Hoặc quy ñịnh rằng các phép cộng và nhân luôn ñược thực hiện theo thứ tự từ trái sang phải (trừ khi gặp ngoặc ñơn)

xét văn phạm G với luật sinh:

→→→→ →→→→  →→→→ 

E →→→→ E + T  E * T  T T →→→→ (E)  a

• Các dẫn xuất khác nhau cho từ

:

• Hoặc quy ñịnh rằng khi không có dấu ngoặc ñơn ngăn cách thì phép nhân luôn ñược thực hiện ưu tiên hơn phép cộng

⇒⇒⇒⇒ ⇒⇒⇒⇒

⇒⇒⇒⇒ ⇒⇒⇒⇒

⇒⇒⇒⇒ ⇒⇒⇒⇒

⇒⇒⇒⇒

⇒⇒⇒⇒

E →→→→ E + T  T T →→→→ T * F  F F →→→→ (E)  a

⇒⇒⇒⇒ ⇒⇒⇒⇒ ⇒⇒⇒⇒ ⇒⇒⇒⇒ ⇒⇒⇒⇒ ⇒⇒⇒⇒ ⇒⇒⇒⇒ ⇒⇒⇒⇒

⇒⇒⇒⇒ ⇒⇒⇒⇒ ⇒⇒⇒⇒ ⇒⇒⇒⇒

⇒⇒⇒⇒ ⇒⇒⇒⇒

⇒⇒⇒⇒

⇒⇒⇒⇒

• Dẫn xuất (a) là dẫn xuất trái nhất, (b) là dẫn xuất phải nhất • Các dẫn xuất tuy khác nhau, nhưng có cùng một cây dẫn xuất

6

8

a a a a

Printed with FinePrint - purchase at www.fineprint.com

l

i

i

i

i

t

t

(

)

k

k

ý

k

r

c

c

c

Cho CFG G(V, T, P, S) với L(G) ≠ Ø, có một CFG G'(V', T', P', S) tương ñương sao cho mỗi ∈∈∈∈ tồn tại ∈∈∈∈ ñể ⇒⇒⇒⇒

● Các ký hiệu không tham gia vào quá trình dẫn xuất ra chuỗi ký hiệu kết thúc ● Luật sinh dạng A →→→→ B (làm kéo dài chuỗi dẫn xuất)

3 7 , , ) b á b h ô d h h ú h 9 o u u & n g n ac n

i

l

i

l

t

í

(cid:16)

c

v

y

v

c

ư

ư

m

m

,

Begin

⇒⇒⇒⇒ g

'

l

(

)

V

O

l

i

i

t

k

k

(cid:16)

:

c

y

s

s

c

v

ư

m

'

i

(

)

{

*

}

V

O

N

;

:

w

m

A→→→→ w

w∈∈∈∈ T

l

(

V

V

N

O

w

'do

A    '≠≠≠≠

) While begin

'

'

l

(

)

(cid:12) (cid:17) (cid:19) ă h b (cid:15) h ô h (cid:2) h h o n (cid:10) n p n (cid:10) n n g u n n g (cid:5) (cid:26) 1 d h ô ñ à ñ h (cid:2) h ô (cid:28) ă (cid:2) ă h n n a n g n g n n g n n g a n (cid:5) =∅∅∅∅ ; 2 e v = h p (cid:10) 3 d e

V

V

N

O

;

:

w

'

'

l

l

(

)

)

*

}

V

V

V

O

N

O

:

w

'∪∪∪∪ {

A

A→→→→ αααα v

i αααα ∈∈∈∈ (

end;

'

'

(

)

4 d e = 5 d d e = T∪∪∪∪ O

V

V

N

;

:

w

9

11

6 e =

• Mỗi biến và mỗi ký hiệu kết thúc của văn phạm ñều xuất hiện trong dẫn xuất của một số chuỗi trong ngôn ngữ • Không có luật sinh A →→→→ B (với A, B ñều là biến) ● Nếu ngôn ngữ không chấp nhận chuỗi rỗng ε thì không cần luật sinh A →→→→ ε .

End;

i

l

i

i

t

t

)

(

k

ý

k

[

r

c

c

c

ư

một ký hiệu X ñược gọi là có ích nếu có một dẫn xuất

⇒⇒⇒⇒ αααα β β β β ⇒⇒⇒⇒

ñể

∪∪∪∪

∪∪∪∪

Cho CFG G(V, T, P, S), ta có thể tìm ñược CFG G'(V', T', P', S) tương ñương sao cho mỗi ∈∈∈∈

tồn tại αααα ββββ ∈∈∈∈

với α, β là các chuỗi bất kỳ và w ∈∈∈∈ T*.

i

i

í

k

ý

\ ] 3 , ) h b ñ 9 h ô d ñ b á b u o u n a n n g & Z

c

c

c

c

m

⇒⇒⇒⇒ αααα ββββ

⇒⇒⇒⇒ c

h h " ó h ó 2 ñ (cid:31) ñ o u

• X phải dẫn ra chuỗi ký hiệu kết thúc • X phải nằm trong dẫn xuất từ S

• ðặt V' = {S} ; T' = Ø • Nếu A ∈ V' và A → αααα 1    αααα 2............αααα nlà các luật sinh trong P thì

➢ Thêm các biến của αααα 1 αααα 2 ..., α..., α..., α..., α nvào

➢ Thêm các ký hiệu kết thúc của αααα 1 αααα 2 ..., α..., α..., α..., α nvào

• Lặp lại cho ñến khi không còn biến hoặc ký hiệu kết thúc nào ñược thêm vào nữa

12

10

Printed with FinePrint - purchase at www.fineprint.com

loại bỏ luật sinh ε trong văn phạm sau: S → AB A → aA     ε B → bB     ε

B

c

ư

xét văn phạm

i. A → ε ⇒⇒⇒⇒ A ∈∈∈∈ Nullable ii. B → ε ⇒⇒⇒⇒ B ∈∈∈∈ Nullable iii.S → AB ⇒⇒⇒⇒ S ∈∈∈∈ Nullable

(cid:4) 1: xác ñịnh tập biến rỗng Nullable

B

S → A A → aBb | ε B → A | cB | cC C → AC | BCD D → ab

c

ư

• Áp d(cid:17)ng b(cid:18) ñ(cid:20) 1: V' = {S, A, B, D}

: xây dựng tập luật sinh P' S → AB     Aε     εB A → aA     aε B → bB     bε

2 (cid:4)

C

ý: văn phạm G' không chấp nhận chuỗi rỗng ε như văn phạm G.

• Áp d(cid:17)ng b(cid:18) ñ(cid:20) 2: V' = {S, A, B} S → A A → aBb | ε B → A | cB

13

15

ðể G' tương ñương G, ta cần thêm luật sinh S → ε vào G'.

S → A A → aBb | ε B → A | cB D → ab

h ú

l

i

l

i

t

(

)

s

l

i

l

i

t

(

)

s

A → B

A → ε

Mỗi CFL không chứa ε ñược sinh ra bởi CFG không có ký hiệu vô ích, không có luật sinh ε hoặc luật sinh ñơn vị.

Cho CFG G(V, T, P, S) và L là ngôn ngữ sinh ra bởi G. Khi ñó L – {ε} là ngôn ngữ sinh ra bởi CFG G'(V, T, P', S) không có ký hiệu vô ích và không có luật sinh ε.

ñặt L=L(G) là CFL không chứa ε và ñược sinh ra bởi văn

) b (cid:0) h ) o & u n b (cid:0) h o & u n

B

c

ư

phạm G(V, T, P, S). Theo ñịnh lý 3, ta có thể loại bỏ tất cả luật sinh ε trong G.

ðể loại bỏ luật sinh ñơn vị, ta xây dựng tập P' mới theo giải thuật:

(cid:4) 1: xác ñịnh tập biến rỗng Nullable

i. A → ε ⇒⇒⇒⇒ A ∈∈∈∈ Nullable ii.B → X1X2...Xn, ∀∀∀∀Xi ∈ Nullable⇒⇒⇒⇒ B ∈∈∈∈ Nullable

B

c

ư

F

r (mỗi biến A ∈∈∈∈ V)

i

B

: xây dựng tập luật sinh P'

Với mỗi luật sinh A → X1X2...Xn trong P, ta xây dựng luật sinh

Tính ∆A = { B  B ∈∈∈∈ V và A ⇒⇒⇒⇒ *B } ;

d o o 2 (cid:4) e g n

A → α1α2...αn với ñiều kiện:

r (mỗi biến B ∈∈∈∈ ∆A)

r (mỗi luật sinh B → α thuộc P)

I

16

14

f (B → α không là luật sinh ñơn vị) t Thêm luật sinh A → α vào P'

E

F d o o F d o o h e n

i. Nếu Xi ∉ Nullable thì αi = Xi ii. Nếu Xi ∈ Nullable thì αi = Xi     ε iii. Không phải tất cả αi ñều bằng ε

n d ;

Printed with FinePrint - purchase at www.fineprint.com

tìm văn phạm có dạng CNF tương ñương văn phạm sau:

S → A  ABA A → aA  a  B B → bB  b

loại bỏ luật sinh ñơn vị trong văn phạm E →→→→ E + T  T T →→→→ T * F  F F →→→→ (E)  a

B

c

ư

Ta có: ∆E = {E, T, F} ⇒⇒⇒⇒ thêm vào P' các luật sinh

E →→→→ E + T T * F  (E)  a

S → aA  a     bB  b  ABA A → aA  a  bB  b B → bB  b

(cid:4) 1: ∆s = {S, A, B} , ∆A = {A, B} , ∆B = {B}

B

c

ư

Tương tự:

phải > 1:

∆T = {T, F} ⇒⇒⇒⇒ thêm vào P' : T →→→→ T * F     (E)  a ∆F = {F} ⇒⇒⇒⇒ thêm vào P' : F →→→→ (E)  a

19

17

S → CaA  a     CbB  b  ABA A → CaA  a  CbB  b B → CbB  b Ca → a Cb → b

(cid:4) 2: thay a bằng Ca và b bằng Cb trong các luật sinh có ñộ dài vế

B

c

ư

một ngôn ngữ phi ngữ cảnh bất kỳ không chứa ε ñều

→ CaA  a     CbB  b  A 1

ñược sinh ra bằng một văn phạm nào ñó mà các luật sinh có dạng A →→→→ BC hoặc A →→→→ a, với A, B, C là biến và a là ký hiệu kết thúc.

giả sử CFL L=L(G) với CFG G(V, T, P, S)

(cid:4) 3: thay thế các luật sinh có ñộ dài vế phải > 2:

B

c

ư

• Áp dụng ñịnh lý 4.4 ñể loại bỏ luật sinh ñơn vị và ε

(cid:4) 1: thay thế tất cả các luật sinh có ñộ dài vế phải là 1

B

c

ư

➢ có chứa ký hiệu kết thúc

A → CaA  a  CbB  b B → CbB  b Ca → a Cb → b 1 →

A → X1X2...Xi...Xn

A → X1X2...Ca...Xn Ca → a

a

(cid:4) 2: thay thế tất cả luật sinh có ñộ dài vế phải lớn hơn 1 và

B

c

ư

➢ hiệu chưa kết thúc

A → B1B2...Bm (m>2)

18

20

A → B1 D1 D1 → B2 D2 ... Dm-2 → Bm-1 Bm

(cid:4) 3: thay thế các luật sinh mà vế phải có nhiều hơn 2 ký

Printed with FinePrint - purchase at www.fineprint.com

l

i

i

i

j

t

t

t

t

t

t

t

ì

(

)

(

)

A

r

y

c

c

s

c

y

s

c

(cid:1)

i→ A

i γ t

→ A

Begin (1) for k := 1 to m do begin (2) (3)

for j := 1 to k-1 do for Mỗi luật sinh dạng A

α do j

k

begin

(4)

for Tất cả luật sinh A

→ β do

Cho G(V, T, P, S) là một CFG, ñặt A → α1Bα2 là luật sinh trong P và B → β1β2 βr là các B - luật sinh; văn phạm G1(V, T, P1, S) thu ñược từ G bằng cách loại bỏ luật sinh A → α1Bα2 và thêm vào luật sinh A → α1β1α2α1β2α2............α1βrα2 tương ñương G

j

, , , h h á (cid:0) h h h h h > a u n p a a o o

i

i

l

t

(

)

(5) Thêm luật sinh A

r

v

y

m

α

(6) Loại bỏ luật sinh A

→ βα; k → A k

j

end;

(7)

for Mỗi luật sinh dạng A

α do → A k k

begin

; → αB k k

(9) Loại bỏ luật sinh A

→ α và B (8) Thêm các luật sinh B k α → A k k

ðặt G(V, T, P, S) là CFG; A → Aα1Aα2............Aαr là tập các A – luật sinh có A là ký hiệu trái nhất của vế phải (luật sinh ñệ quy trái). ðặt A → β1β2 βs là các A - luật sinh còn lại; G1(V ∪ {B}, T, P1, S) là CFG ñược tạo thành bằng cách thêm biến mới B vào V và thay các A - luật sinh bằng các luật sinh dạng:

(10)

end; for Mỗi luật sinh A

(1 ≤ i ≤ s)

(11) Thêm luật sinh A

do → β trong ñó β không bắt ñầu bằng A k k → βB k

k

A → βi A → βiB

B → αi B → αiB (1 ≤ i ≤ r)

21

23

end;

end;

Thì ta có G1 tương ñương G, hay L(G) = L(G1)

mỗi CFL bất kỳ không chứa ε ñược sinh ra bởi một CFG

tìm văn phạm có dạng GNF cho văn phạm G sau:

) d ù b ă h ñ 9 á o n g & n p & q u

i

i

c

c

mà mỗi luật sinh có dạng A → aα với A là biến, a là ký hiệu kết thúc và α là một c

A1 → A2A1 A2A3 A2 → A3A1 a A3 → A2A2 b

ðặt G là CFG sinh ra CFL không chứa ε

(cid:8) (cid:17) h á b u n (có thể rỗng)

B

c

ư

B

c

ư

B

c

ư

B

c

ư

B

c

ư

là ký hiệu bắt ñầu. ðặt V = {A1, A2, ..., Am}

B

c

ư

A

A

A

A

(cid:4) (cid:4) (cid:4) (cid:4) (cid:4) 1: xây dựng G' có dạng CNF tương ñương G 2: ñổi tên các biến trong G' thành A1, A2, ..., Am (m ≥1 ) với A1 1: G thỏa CNF 2: ta có V = {A1, A2, A3} 3: ta cần sửa ñổi luật sinh A3 → A2A2 (cid:4)

i

i

t

• Áp dụng bổ ñề 3: A3 → A3A1A2 aA2 2  a

t)

1 3 (cid:2) h (cid:11) 3 →→→→ A 2  b g u

)

B

c

ư

)

B

c

ư

22

24

• Áp dụng bổ ñề 4, ta thu ñược tập luật sinh: A1 → A2A1 A2A3 A2 → A3A1 a A3 → aA2  b     aA2B  bB B → A1A2 A1A2B

3: thay thế luật sinh sao cho nếu Ai → Ajγ thì j > i • Nếu j i), Ai → aγ hoặc Bk → γ với γ ∈ (V ∪ {B1,B2, ...,Bi-1})* (cid:26) (cid:14) á b ñ 3 d (cid:4) (cid:9) p n g (cid:26) (cid:14) b ñ 3 (cid:4) 4: thay thế các Ai – luật sinh về ñúng dạng ( 5: thay thế các Bk – luật sinh về ñúng dạng (

Printed with FinePrint - purchase at www.fineprint.com

B

c

ư

CFL ñóng với phép hợp, phép kết nối và phép bao ñóng

Kleen.

B → A1A2 A1A2B

CFL không ñóng với phép giao

CFL không ñóng với phép lấy phần bù

A3→ aA2  b     aA2B  bB A2→ aA2A1  bA1     aA2BA1  bBA1  a A1→ aA2A1A1  bA1A1     aA2BA1A1  bBA1A1  aA1 aA2A1A3  bA1A3     aA2BA1A3  bBA1A3  aA3

(cid:4) 4: A3 ñã có dạng chuẩn. Thay thế A3 vào A2 : (cid:0) (cid:0) (cid:0) (cid:0) (cid:0) (cid:0)

B

c

ư

(cid:4) 5: thay thế các Bk – luật sinh

B → aA2A1A1A2  bA1A1A2     aA2BA1A1A2  bBA1A1A2  aA1A2 aA2A1A3A2  bA1A3A2     aA2BA1A3A2  bBA1A3A2  aA3A2  aA2A1A1A2B bA1A1A2B     aA2BA1A1A2B  bBA1A1A2B  aA1A2B

aA2A1A3A2B  bA1A3A2B     aA2BA1A3A2B  bBA1A3A2B  aA3A2B

25

27

cho L là một CFL bất kỳ, tồn tại một số n chỉ phụ thuộc

vào L sao cho nếu z ∈ L và |z| ≥ n thì ta có thể viết z=uvwxy sao cho: |vx| ≥ 1, |vwx| ≤ n và ∀i ≥ 0 ta có uviwxiy ∈ L

chứng minh một ngôn ngữ không là CFL

chứng minh L = {aibici | i ≥ 1} không là CFL

• Giả sử L là CFL, khi ñó tồn tại số n theo bổ ñề bơm • Xét chuỗi z = anbncn, |z| ≥ n, ta có thể viết z=uvwxy thỏa bổ ñề • Ta có: vx ∈ anbncn, |vx| ≤ |vwx| ≤ n nên vx không thể chứa cả ký hiệu a và c (vì giữa a và c có n ký hiệu b) • Do |vx| ≥ 1 và trong uvwxy chứa số ký hiệu a, b, c bằng nhau:  Nếu vx có chứa ký hiệu a (và không chứa ký hiệu c) thì chuỗi uv0wx0y ∉ L vì có số ký hiệu c lớn hơn số ký hiệu a  Nếu vx không chứa ký hiệu a thì chuỗi uv0wx0y ∉ L vì có số ký hiệu b (hoặc c) nhỏ hơn số ký hiệu a

26

(cid:1) (cid:1) (cid:1) (cid:1) (cid:1) (cid:1)

Printed with FinePrint - purchase at www.fineprint.com