HOẠT ĐỘNG CỦA BỘ PHÂN TÍCH.

Một phần của tài liệu GIÁO TRÌNH MÔN CHƯƠNG TRÌNH DỊCH (Trang 33 - 38)

- Phục hồi lỗi một cách nhanh chóng để xác định lỗi tiếp theo Không làm chậm tiến trình của một chơng trình đúng.

2. HOẠT ĐỘNG CỦA BỘ PHÂN TÍCH.

2.1.Văn phạm phi ngữ cảnh.

2.1.1. Định nghĩa.

* Định nghĩa: Văn phạm PNC (như trờn).

* Dạng BNF (Backus – Naur Form) của văn phạm phi ngữ cảnh

+ Cỏc ký tự viết hoa: biểu diễn ký hiệu khụng kết thỳc, (cú thể thay bằng một xõu đặt trong dấu ngoặc < > hoặc một từ in nghiờng).

+ Cỏc ký tự viết chữ nhỏ và dấu toỏn học: biểu diễn cỏc ký hiệu kết thỳc (cú thể thay bằng một xõu đặt trong cặp dấu nhỏy kộp “ ” hoặc một từ in đậm).

+ ký hiệu -> hoặc = là: ký hiệu chỉ phạm trự cỳ phỏp ở vế trỏi được giải thớch bởi vế phải.

+ ký hiệu | chỉ sự lựa chọn.

Vớ dụ: <Toỏn hạng> = <Tờn> | <Số> | “(” <Biểu thức> “)” hoặc ToỏnHạng -> Tờn | Số | ( BiểuThức

Phõn tớch từ vựng Phõn tớch cỳ phỏp ngữ nghĩaPhõn tớch Chương trỡnh nguồn Bảng ký hiệu từ tố yờu cầu từ tố

2.1.2. Đồ thị chuyển biểu diễn văn phạm phi ngữ cảnh:

- Cỏc vũng trũn với ký hiệu bờn trong biểu thị cho trạng thỏi. Cỏc chữ trờn cỏc cung biểu thị cho ký hiệu vào tiếp theo. Trạng thỏi vẽ bằng một vũng trũn kộp là trạng thỏi kết thỳc.

Nếu trạng thỏi kết thỳc cú dấu * nghĩa là ký hiệu cuối khụng thuộc xõu đoỏn nhận.

2.1.3. Cõy suy dẫn.

2.1.3.1. Suy dẫn.

Cho văn phạm G=(T,N,P,S).

- Suy dẫn trực tiếp là một quan hệ hai ngụi ký hiệu => trờn tập V* nếu αβγ là một xõu thuộc V* và β->δ là một sản xuất trong P, thỡ αβγ => αδγ.

- Suy dẫn k bước, ký hiệu là k

=> hay α =>k βnếu tồn tại dóy α0, α1, . . . , αk sao cho: α = α0 => α1 => . . . => αk = β

- Xõu α suy dẫn xõu nếu k>=0 và ký hiệu là α =>* β

- Xõu α suy dẫn khụng tầm thường xõu β nếu k>0 và ký hiệu là α =>+ β

2.1.3.2. C õ y ph õ n t ớ ch ( c õ y suy dẫn )

* Định nghĩa: Cõy phõn tớch trong một văn phạm phi ngữ cảnh G = (T,N,P,S) là một cõy thỏa món cỏc điều kiện sau:

1. Mọi nỳt cú một nhón, là một ký hiệu trong (T ∪ N ∪ {ε}) 2. Nhón của gốc là S

3. Nếu một nỳt cú nhón X là một nỳt trong thỡ X ∈ N

4. Nếu nỳt n cú nhón X và cỏc nỳt con của nú theo thứ tự trỏi qua phải cú nhón Y1, Y2, . . ., Yk thỡ X->Y1Y2 . . . Yk sẽ là một sản xuất ∈ P

5. Nỳt lỏ cú nhón thuộc T hoặc là ε

* Suy dẫn trỏi nhất (núi gọn là suy dẫn trỏi), nếu ở mỗi bước suy dẫn, biến được thay thế là biến nằm bờn trỏi nhất trong dạng cõu.

* Suy dẫn phải nhất: (núi gọn là suy dẫn phải), nếu ở mỗi bước suy dẫn, biến được thay thế là biến nằm bờn phải nhất trong dạng cõu.

2.1.3.3. Đệ qui

0 1 2*

Start chu cai khac

chu cai

chu cai

* Định nghĩa: Ký hiệu khụng kết thỳc A của văn phạm gọi là đệ qui nếu tồn tại:

+

=>αAβ

A với α, β V+

 Nếu α = ε thỡ A gọi là đệ qui

trỏi.

 Nếu β = ε thỡ A gọi là đệ qui

phải.

 Nếu α,β ∉ ε thỡ A gọi là đệ qui

trong.

* Cú 2 loại dệ quy trỏi :

 Loại ttrực tiếp: cú dạng A → Aα ( A ⇒+ Aα )

 Loại giỏn tiếp: Gõy ra do nhiều bước suy dẫn.

(Ví dụ: S Aa | b; AAc | Sd; S là đệ qui trái vì S Aa Sda)

* Loại bỏ đệ qui trỏi: (loại bỏ suy dẫn A =>+ Aα )

- Giả sử cú luật đệ qui trỏi A->Aα | β chỳng ta thay cỏc luật này bằng cỏc luật: A -> βA’

A’ -> αA’ | ε

- Tổng quỏt hoỏ lờn ta cú:

Nếu cú cỏc luật đệ qui trỏi: A -> Aα1 | Aα2 | . . .| Aαm | β1 | β2 | . . .| βn trong đú khụng βi nào bắt đầu bằng một A . Thay cỏc sản xuất này bởi cỏc sản xuất:

A -> β1A’ | β2A’ | . . . | βnA’ A’ -> α1A’ | α2A’ | . . . | αmA’ | ε

Vớ dụ2: Xột văn phạm biểu thức số học sau: E -> E + T | T ;

T -> T * F | F; F -> ( E ) | id F -> ( E ) | id

Loại bỏ đệ qui trỏi trực tiếp cho cỏc sản xuất của E rồi của T, ta được văn phạm mới khụng cũn sản xuất cú đệ qui trỏi như sau:

E -> TE’; E’-> +TE’ | ε; E’-> +TE’ | ε; T -> FT’;

T’ -> *FT’ | ε; F -> (E) | id

Qui tắc này loại bỏ được đệ qui trỏi trực tiếp nằm trong cỏc sản xuất nhưng khụng loại bỏ được đệ qui trỏi nằm trong cỏc dẫn xuất cú hai hoặc nhiều bước. Qui tắc này cũng khụng loại bỏ được đệ qui trỏi ra khỏi sản xuất A->A.

Với đệ qui trái gián tiếp và nói chung là đệ qui trái, ta sử dụng giải thuật sau:

Ví dụ : Với S Aa | b; AAc | Sd.

Sắp xếp cỏc ký hiệu cha kết thỳc theo thứ tự S,A..

Với i=1, khụng cú đệ qui trỏi trực tiếp nờn khụng cú điều gỡ xảy ra. với i=2 , thay luật sinh AđSd được AđAc | Aad | bd.

Loại bỏ đệ qui trỏi trực tiếp cho A, ta được: SđAa |b; AđbdA'; A'đ cA' | adA' | e

* Phộp thừa số hoỏ trỏi

Thừa số hoỏ trỏi (left factoring) là một phộp biến đổi văn phạm nhằm sinh ra một văn phạm thớch hợp cho việc phõn tớch cỳ phỏp khụng quay lui. í tưởng cơ bản là khi khụng rừ sản xuất nào trong trong hai sản xuất cú cựng vế trỏi là A được dựng để khai triển A thỡ ta cú thể viết lại cỏc sản xuất này nhằm “hoón lại quyết định”, cho đến khi cú đủ thụng tin để đưa ra được quyết định lựa chọn sản xuất nào.

- Nếu cú hai sản xuất A -> αβ1 | αβ2 thỡ ta khụng biết phải khai triển A theo

αβ1 hay αβ2. Khi đú, thay hai sản xuất này bằng: A -> αA’; A’ -> β1 | β2

Input: Văn phạm khụng tuần hoàn hoặc e_sx (khụng cú dạng Aị+A hoặc Ađe) Output: Văn phạm tương đương khụng đệ qui trỏi

Phương phỏp: 1. Sắp xếp cỏc ký hiệu khụng kết thỳc theo thứ tự A1, A2.. .. An 2. For i:=1 to n do Begin for j:=1 to i-1 do Begin

Thay luật sinh dạng Aiđ Aj bởi luật sinh Ajđ d 1g | d 2g |.. .. |d kg Trong đú Aj đd1g | d2g |.. .. |dky là cỏc luật sinh hiện tại

End

Loại bỏ đệ qui trỏi trực tiếp trong số cỏc Ai loại End;

Vớ dụ: S -> iEtS | iEtSeS | a; E -> b

Khi được thừa số hoỏ trỏi, văn phạm này trở thành: S -> iEtSS’ | a; S’ -> eS | ε; E -> b

vỡ thế khi cần khai triển S với ký hiệu xõu vào hiện tại là i, chỳng ta cú thể lựa chọn iEtSS’ mà khụng phải băn khoăn giữa iEtS và iEtSeS của văn phạm cũ.

Giải thuật tạo thừa số hoá trái (yếu tố trái) cho một văn phạm: Input: Văn phạm G

Output: Văn phạm tương đương với nhõn tố trỏi. Ph

ơng phỏp:

Với mỗi ký hiệu chưa kết thỳc A, cú cỏc ký hiệu dẫn đầu cỏc vế phải giống nhau, ta tỡm một chuỗi a là chuỗi cú độ dài lớn nhất chung cho tất cả cỏc vế phải (a là nhõn tố trỏi)

Giả sử A → ab1| ab2|.. .. | abn | g

Trong đú g khụng cú chuỗi dẫn đầu chung với cỏc vế phải khỏc. Biến đổi luật sinh thành

A → a A' | g

A' → b 1| b 2 | .. .. | b n

2.1.3.4. Nhập nhằng

Một văn phạm G được gọi là văn phạm nhập nhằng nếu cú một xõu α là kết quả của hai cõy suy dẫn khỏc nhau trong G. Ngụn ngữ do văn phạm này sinh ra gọi là ngụn ngữ nhập nhằng.

Vớ dụ:

Xột văn phạm G cho bởi cỏc sản xuất sau: S -> S + S | S * S | ( S ) | a Với xõu vào là w = “a+a*a” ta cú:

Văn phạm này là nhập nhằng vỡ cú hai cõy đối với cõu vào w như sau:

SS * S S * S S + S a a a S S + S S * a a a S

Chỳng ta cú vớ dụ đối suy dẫn trỏi (đối với cõy đầu tiờn) là:

S => S * S => S + S => S + S * S => a + S * S => a + a * S => a + a * asuy dẫn phải (đối với cõy đầu tiờn ) là: suy dẫn phải (đối với cõy đầu tiờn ) là:

S => S * S => S * a => S + S * a => S + a * a => a + a * a.

2.2. cỏc phương phỏp phõn tớch.

Một phần của tài liệu GIÁO TRÌNH MÔN CHƯƠNG TRÌNH DỊCH (Trang 33 - 38)

Tải bản đầy đủ (DOC)

(158 trang)
w