1. Trang chủ
  2. » Ngoại Ngữ

slide chương 3 trình phiên dịch phân tích cú pháp

60 33 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 60
Dung lượng 18,82 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

- Các kí hiệu chƣa kết thúc nonterminals: Là các biến kí hiệu tập các xâu kí tự - Các luật sinh productions: Xác định cách thức hình thành các xâu từ các kí hiệu kết thúc và chƣa kết t

Trang 1

CHƯƠNG III Phân tích cú pháp

Mục tiêu:

pháp

grammar),cách phân tích cú pháp từ dưới

lên- từ trên xuống (top-down and bottom-up parsing)

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Trang 2

Vai trò của bộ phân tích cú pháp

token

Token

Parser

Symbol table

Parse tree

Rest of front end

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Trang 3

(PTCP) chia làm hai loại: Phân tích từ trên xuống (top- down parsing) và phân tích từ dưới lên (bottom- up parsing)

lỗi trong giai đoạn PTCP do đó bộ phân

tích cú pháp phải phát hiện và thông báo lỗi chính xác cho người lập trình đồng thơi không làm chậm những chương trình được viết đúng

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Trang 4

- Các kí hiệu chƣa kết thúc (nonterminals): Là

các biến kí hiệu tập các xâu kí tự

- Các luật sinh (productions): Xác định cách

thức hình thành các xâu từ các kí hiệu kết thúc

và chƣa kết thúc

- Một kí tự bắt đầu (start symbol)

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Trang 5

Ví dụ 3.1: Văn phạm sau định nghĩa các

biểu thức số học đơn giản

Trong đó E, A là các kí tự chƣa kết thúc (E còn là kí tự bắt đầu), các kí tự còn lại là

các kí tự kết thúc

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Trang 6

xuất hoặc suy ra)

dẫn xuất 1 bước

L(G) là ngôn ngữ được sinh bởi G Mọi xâu trong L(G) chỉ chứa các kí hiệu kết thúc

của G

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Trang 7

w, w đƣợc gọi là một câu (sentence) của văn phạm G

ngữ cảnh đƣợc gọi là ngôn ngữ phi ngữ cảnh (context- free language)

sinh ra cùng một ngôn ngữ

thúc) thí ta nói là một dạng câu (sentence form) của G Một câu là một dạng câu không

Trang 8

(leftmost) nếu tại mỗi bước kí hiệu chưa kết thúc ngoài cùng bên trái được thay

gọi là dạng câu trái

(rightmost) hay còn gọi là dẫn xuất chính

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Trang 9

dạng biểu diễn hình học của dẫn xuất Ví

dụ parse tree cho biểu thức –(id+id) là:

E

E (

-) E

Trang 10

Một văn phạm sinh ra nhiều hơn một

parse tree cho một câu đƣợc gọi là văn

phạm mơ hồ Nói cách khác một văn

phạm mơ hồ sẽ sinh ra nhiều hơn một dẫn xuất trái nhất hoặc dẫn xuất phải nhất cho cùng một câu

Trang 11

lệnh "if E1 then if E2 then S1 else S2" sẽ

có hai parse tree:

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Trang 12

"Khớp mỗi else với một then chưa khớp gần

nhất trước đó" Với qui tắc này, ta viết lại

văn phạm trên như sau :

unmatched_stmt

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Trang 13

gọi là đệ qui trái (left recursion) nếu tồn tại một dẫn xuất có dạng A + A (A là 1

kí hiệu chƣa kết thúc, là một xâu)

không thể xử lí văn phạm đệ qui trái, do

đó cần phải biến đổi văn phạm để loại bỏ các đệ qui trái

Loại trực tiếp: Có dạng A + A

Loại gián tiếp: Gây ra do dẫn xuất của hai

Trang 15

Thay luật sinh dạng Ai Aj bởi luật sinh

Trang 16

phép biến đổi văn phạm rất có ích để có đƣợc một văn phạm thuận tiện cho việc phân tích dự đoán

nào trong hai luật sinh khả triển có thể

dùng để khai triển một ký hiệu chƣa kết thúc A, chúng ta có thể viết lại các A- luật sinh nhằm "hoãn" lại việc quyết định cho đến khi thấy đủ yếu tố cho một lựa chọn đúng

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Trang 17

Ví dụ 3.3: Ta có hai luật sinh

tố chung dài nhất của các luật sinh,

không bắt đầu bởi )

Luật sinh trên đƣợc biến đổi thành:

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Trang 18

Phân tích cú pháp từ trên xuống

được xem như một cố gắng tìm kiếm một dẫn xuất trái nhất cho chuỗi nhập Nó

cũng có thể xem như một cố gắng xây

dựng cây phân tích cú pháp bắt đầu từ

nút gốc và phát sinh dần xuống lá

dưới lên nhưng bị giới hạn về mặt hiệu

quả

như: PTCP đệ qui lùi, PTCP đoán trước,

PTCP đoán trước đệ qui Ta sẽ xét trường

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Trang 19

(nonrecursive predictive parsing) hoạt

động theo mô hình sau:

$ Z Y

X Predictive parsing program

Parsing table

M

OUTPUT INPUT

STACK

$ b

+ a

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Trang 20

INPUT là bộ đệm chứa chuỗi cần phân

tích, kết thúc bởi ký hiệu $

STACK chứa một chuỗi các ký hiệu văn

phạm với ký hiệu $ nằm ở đáy STACK

Khởi đầu STACK chứa kí hiệu bắt đầu S

trên đỉnh

Parsing table M là một mảng hai chiều

dạng M[A,a], trong đó A là ký hiệu chƣa kết thúc, a là ký hiệu kết thúc hoặc $

Predictive parsing program

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Trang 21

Predictive parsing program hoạt động

như sau: Chương trình xét ký hiệu X trên

đỉnh Stack và ký hiệu nhập hiện hành a

1 Nếu X = a = $ thì quá trình PTCP kết thúc thành công

2 Nếu X = a $, đẩy X ra khỏi Stack và đọc ký hiệu nhập tiếp theo.

3 Nếu X là ký hiệu chưa kết thúc thì chương trình

truy xuất đến phần tử M[X,a] trong Parsing table

M:

- Nếu M[X,a] là một luật sinh có dạng X UYV thì đẩy X ra khỏi đỉnh Stack và đẩy V, Y, U vào Stack (với U trên đỉnh Stack), đồng thời bộ xuất ra

- Nếu M[X,a] = error, gọi chương trình phục hồi lỗi.

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Trang 25

định các tập hợp cho phép xây dựng bảng

phân tích M và phục hồi lỗi

ký hiệu kết thúc mà nó bắt đầu một chuỗi

FIRST( )

FOLLOW(A) là tập các kí hiệu kết thúc mà nó xuất hiện ngay bên phải A trong một dạng

câu Nếu S * A thì $ thuộc FOLLOW(A)

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Trang 26

1 Đặt $ vào FOLLOW(S) (S là kí hiệu bắt

đầu)

FIRST( ) ngoại trừ đều thuộc

Trang 28

M[A,b] với mỗi ký hiệu kết thúc b FOLLOW(A) Nếu FIRST( ) và $ FOLLOW(A) thì đưa luật

4 Ô còn trống trong bảng tương ứng với lỗi

(error).

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Trang 29

Phân tích cú pháp từ dưới lên

dưới lên tổng quát gọi là phân tích cú

pháp Shift –Reduce

thuật Shift - Reduce là phân tích cú pháp

LR (LR parsing) sẽ được thảo luận

dựng một parse tree cho một xâu nhập

vào từ nút lá lên nút gốc Nói cách khác ta

"reducing" từng bước xâu nhập vào đến

khi thu được kí hiệu bắt đầu của văn

phạm

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Trang 30

Đảo ngƣợc lại quá trình trên ta thu đƣợc dẫn

xuất phải nhất:

S rmCuuDuongThanCong.com aABe rm aAde rm aAbcde https://fb.com/tailieudientucnttrm abbcde

Trang 31

Đôi khi ta còn gọi là một handle, xâu

bên phải chỉ chứa các kí hiệu kết thúc

mỗi right-sentential form có duy nhất một handle của nó

Ví dụ 3.7: Trong dẫn xuất S rm aABe rm

đƣợc gạch chân

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Trang 32

E+E*id3 trong trường hợp đầu id3 là

Trang 33

shift shift

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Trang 34

- R(Rightmost derivation): Xây dựng chuỗi

dẫn xuất phải nhất đảo ngƣợc

- k:Số lƣợng ký hiệu lookahead tại mỗi thời

điểm, dùng để đƣa ra quyết định phân tích Khi không đề cập đến k, chúng ta hiểu

ngầm là k = 1

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Trang 35

- Có thể nhận biết hầu như tất cả các ngôn ngữ lập trình được tạo ra bởi văn phạm phi ngữ cảnh

- Phương pháp phân tích cú pháp LR là phương

pháp tổng quát của phương pháp shift-reduce không quay lui

- Lớp văn phạm có thể dùng phương pháp LR là một lớp rộng lớn hơn lớp văn phạm có thể sử

Trang 36

LR parsing program

OUTPUT INPUT

STACK

so

ai

Trang 37

tắt thông tin chứa trong STACK bên dưới nó

2 reduce: Thu gọn bằng luật sinh A

3 accept: Chấp nhậnCuuDuongThanCong.com https://fb.com/tailieudientucntt

Trang 40

shift shift

Trang 41

nhất nếu tính theo số lượng văn phạm có thể xây dựng thành công, nhưng đây lại là phương pháp dễ cài đặt nhất

Trang 42

phạm G là một luật sinh của G với một dấu chấm tại vị trí nào đó trong vế phải

Ví dụ 3.10: Luật sinh A XYZ có 4 mục nhƣ sau:

Trang 43

Grammar): G là một văn phạm với ký hiệu

bắt đầu S, thêm một ký hiệu bắt đầu mới S'

G' gọi là văn phạm tăng cường

một tập các mục của văn phạm G thì bao

đóng closure(I) là tập các mục được xây

dựng từ I như sau:

1 Tất cả các mục của I được thêm vào closure(I).

sinh thì thêm B vào closure(I) nếu nó chưa có trong đó Lặp lại bước này cho đến khi không thể thêm vào closure(I) được nữa

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Trang 45

tiếp tục quá trình này cho đến khi xét hết tập I.

3 goto(I, X) = closure(I')

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Trang 47

LR(0) (kí hiệu là C) của văn phạm G'

procedure Item (G')

begin

C := {closure({ S' S}) };

repeat

For Với mỗi tập các mục I C và mỗi ký

goto(I, X) C thì thêm goto(I, X) vào C;

until Không còn tập hợp mục nào có thể thêm

vào C;

end;

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Trang 48

goto (I2,

*) I7:

goto (I4, E) I8:

goto (I6,T) I9: goto

Trang 49

b) Nếu A Ii thì action[i, a] = "reduce (A

)", với mọi a FOLLOW(A), A S'

c) Nếu S' S · Ii thì action[i, $] = "accept".

Nếu một action đụng độ đƣợc sinh ra bởi các luật trên, ta nói văn phạm không phải là SLR(1) Giải thuật thất bại CuuDuongThanCong.com https://fb.com/tailieudientucntt

Trang 50

Xây dựng bảng phân tích LR chính tắc

đƣợc thực hiện nếu kí tự đọc vào tiếp theo

là aCuuDuongThanCong.com https://fb.com/tailieudientucntt

Trang 51

một tập các mục LR(1) của văn phạm G thì bao đóng closure(I) là tập các mục

closure(I) đƣợc nữa

và X là một ký hiệu văn phạm thì goto(I, X) là bao đóng của tập hợp các mục [A

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Trang 52

LR(1) (kí hiệu là C) của văn phạm G'

procedure Item (G')

begin

C := {closure({[ S' .S, $]})};

repeat

For Với mỗi tập các mục I C và mỗi ký

goto(I, X) C thì thêm goto(I, X) vào C;

until Không còn tập hợp mục nào có thể thêm

vào C;

end;

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Trang 53

goto (I2, C) I5:

goto (I2, c) I6:

goto (I2, d) I7: goto (I ,

Trang 54

action[i, a] = "shift j", a là ký hiệu kết thúc

b) Nếu [A , a] Ii thì action[i, a] = "reduce (A

.)", A S'

c) Nếu [S' S ·, $] Ii thì action[i, $] = "accept".

Nếu một action đụng độ đƣợc sinh ra bởi các luật trên, ta nói văn phạm không phải là LR(1) Giải

thuật thất bại

3 Nếu goto (Ii,A)=Ij thì goto [i, A] = j, A là kí hiệu

chƣa kết thúc

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Trang 56

trong đó các trạng thái được nhóm lại với

nhau nhờ đó bảng phân tich cấu trúc có kích thước nhỏ hơn (có thể so sánh với SLR)

một luật sinh và a là ký hiệu kết thúc có hạt

Trang 57

3 Trạng thái i được xây dựng từ Ji .Các action tương

ứng trạng thái i xác định tương tự như canonical LR Nếu một action đụng độ được sinh ra bởi các luật trên, ta nói văn phạm không phải là LALR(1) Giải thuật thất bại

3 Xây dựng bảng goto : Giả sử J = I1 I2 Ik Vì

I1, I2, Ik có chung hạt nhân nên goto (I1,X), goto (I2,X), , goto (Ik,X) cũng có chung hạt nhân

Ðặt K bằng hợp tất cả các tập hợp có chung hạt CuuDuongThanCong.com https://fb.com/tailieudientucntt

Trang 59

Công cụ phân tích cú pháp Yacc

compiler) là câu lệnh sẵn có của UNIX và

là một công cụ hữu hiệu cho phép xây

dựng bộ phân tích cú pháp một cách tự

động

những năm đầu của thập kỉ 70

CuuDuongThanCong.com https://fb.com/tailieudientucntt

Ngày đăng: 01/09/2021, 20:03

HÌNH ẢNH LIÊN QUAN

thức hình thành các xâu từ các kí hiệu kết thúc và chƣa kết thúc - slide chương 3 trình phiên dịch phân tích cú pháp
th ức hình thành các xâu từ các kí hiệu kết thúc và chƣa kết thúc (Trang 4)
dạng biểu diễn hình học của dẫn xuất. Ví dụ parse tree cho biểu thức –(id+id) là: - slide chương 3 trình phiên dịch phân tích cú pháp
d ạng biểu diễn hình học của dẫn xuất. Ví dụ parse tree cho biểu thức –(id+id) là: (Trang 9)
định các tập hợp cho phép xây dựng bảng phân tích M và phục hồi lỗi - slide chương 3 trình phiên dịch phân tích cú pháp
nh các tập hợp cho phép xây dựng bảng phân tích M và phục hồi lỗi (Trang 25)
4. Ô còn trống trong bảng tƣơng ứng với lỗi (error). - slide chương 3 trình phiên dịch phân tích cú pháp
4. Ô còn trống trong bảng tƣơng ứng với lỗi (error) (Trang 28)
• Mô hình của LR parser - slide chương 3 trình phiên dịch phân tích cú pháp
h ình của LR parser (Trang 36)
• Cấu hình (configuration) của một bộ phân - slide chương 3 trình phiên dịch phân tích cú pháp
u hình (configuration) của một bộ phân (Trang 38)
• Có 3 phƣơng pháp xây dựng một bảng - slide chương 3 trình phiên dịch phân tích cú pháp
3 phƣơng pháp xây dựng một bảng (Trang 41)
Xây dựng bảng phân tích LR chính tắc - slide chương 3 trình phiên dịch phân tích cú pháp
y dựng bảng phân tích LR chính tắc (Trang 50)
nhau nhờ đó bảng phân tich cấu trúc có kích thƣớc nhỏ hơn (có thể so sánh với SLR) - slide chương 3 trình phiên dịch phân tích cú pháp
nhau nhờ đó bảng phân tich cấu trúc có kích thƣớc nhỏ hơn (có thể so sánh với SLR) (Trang 56)
3. Xây dựng bảng goto: Giả sử J = I1 I 2. Ik . Vì I 1, I2, ... Ikcó chung hạt nhân nên goto (I1 ,X), goto  (I 2,X), ..., goto (Ik,X) cũng có chung hạt nhân - slide chương 3 trình phiên dịch phân tích cú pháp
3. Xây dựng bảng goto: Giả sử J = I1 I 2. Ik . Vì I 1, I2, ... Ikcó chung hạt nhân nên goto (I1 ,X), goto (I 2,X), ..., goto (Ik,X) cũng có chung hạt nhân (Trang 57)

TỪ KHÓA LIÊN QUAN

w