MỘT TRÌNH BIỂN DỊCH MỘT LƯỢT ĐƠN GIẢN 2

Một phần của tài liệu Trình biên dịch nguuyên lý kỹ thuật và công cụ (Trang 91 - 92)

. 98 TỔNG QUAN VỀ BIÊN DỊCH

88MỘT TRÌNH BIỂN DỊCH MỘT LƯỢT ĐƠN GIẢN 2

2.8 2.4 *~25 2.6 2.7 2.8 2.0 2.10 2.12

Văn phạm nào trong Bài tập 2.2 là đa nghĩa?

Xây dựng các văn phạm phì ngữ cảnh đơn nghĩa cho mỗi ngơn ngữ sau đây. Trong mỗi trường hợp hãy chứng tỏ rằng văn phạm được xây dựng là chính xác.

a) Các biểu thức số học ở dạng hậu vị.

b) Các danh sách định danh cĩ tính kết hợp trái được phản cách bởi dấu phây.

e) Các danh sách định đanh cĩ tính kết hợp phải được phản cách bởi dấu phây.

đ) Các biểu thức số học của số nguyên và định danh với bốn tốn tử hai ngơi + Xu,

e) Thêm tốn tử cộng và trừ đơn ngơi vào các tốn tử số học của (d),

a) Chứng tỏ rằng mọi chuỗi nhị phân được sinh bởi văn phạm sau đây đều cĩ giá trị chia hết cho 3. #ướng đến: Dùng qui nạp trên số nút trong cây phân tích cú pháp.

num 1 1 | 1 0 01 | năm Ơ | nu Hư

b) Văn phạm này cĩ sinh ra tất cả mọi chuỗi nhị phân cĩ giá trị chia hết cho 3 hay khơng?

Xây dựng một văn phạm phi ngữ cảnh cho các số La mã.

Xây dựng một lược đồ dịch dựa cú pháp để dịch các biểu thức số học từ ký pháp trung vị sang ký pháp tiền vị, nghĩa là một tốn tử sẽ xuất hị trước các tốn hạng của nĩ; thí dụ -xy là ký pháp tiền vị cho x-v. Về các cây phản tích cú pháp chú giải cho các nguyên liệu 9-5+2 và 9-5*2.

Xây dựng một lược đơ dịch dựa cú pháp để dịch các biểu thức từ dạng hậu vị sang đạng trung vị. Vẽ các cây phân tích củ pháp cho các nguyên liệu 95-2*

và 952#-~. -

Xây dựng một lược để địch dựa cú pháp để địch các số nguyên thành các số La mã.

Xây dựng một lược để dịch dựa cú pháp dịch các số La mâ thành các số nguyên.

Xây dựng các thể phán cú pháp đệ qui xuống cho các văn phạm trong Bài tập 2.2 (a), (b) và (e).

Xây dựng một chương trình địch dựa cú pháp xác nhận rằng các dấu ngoặc trong một chuỗi nguyên liệu đúng là cân bằng.

PHẦN BÀI TẬP 88

2.18

2.14

#215

Các qui tắc sau đây định nghĩa bản dịch một từ tiếng Anh sang tiếng Latin giãn lược:

a) Nếu một từ bắt đầu bằng một chuỗi phụ âm khơng rỗng, di chuyển chuỗi phụ âm đi đầu ra sau từ đĩ rồi gắn thêm hậu tố AY; thí đụ pig trở thành igpay.

b)_ Nếu một từ bắt đầu bằng một nguyên âm, thêm hậu tố YAy; thí dụ ow1 trở thành owlvay.

c) U cĩ một Q theo sau là một. nguyên âm.

d) Y ở đầu một từ là một nguyên âm nếu sau nĩ khỏng phải là một nguyên âm.

e) Các từ chỉ cĩ một chữ cái khơng bị thay đổi.

Xây dựng một lược để dịch dựa cú pháp cho tiếng Latin giản lược. Trong ngơn ngữ lập trình C, câu lệnh £oz cĩ dạng (adsbygoogle = window.adsbygoogle || []).push({});

for (CXDT| ¡ €XDT;¿ ; 0XPTg } SUHHE

Biểu thức thứ nhất được thực hiện trước khi vào vịng lặp; thường thì nĩ được dùng để khởi gán chỉ số vịng. Biểu thức thứ hai là một phép thứ được thực hiện trước mỗi lẫn lập của vịng; vịng sẽ được thốt ra nếu biểu thức này trở thành 0. Bán thân vịng lập gồm cĩ câu lệnh { sứ” exprr ; }. Biểu thức thứ ba được thực hiện vào cuối mỗi lần lặp; điển hình nĩ được dùng để làm tàng chỉ số vịng. Ý nghĩa của câu lệnh £or tương tự như

@xpri ; while (cxÐrs } { sứ eXprs ; }

Xây dựng một lược để dịch dựa cú pháp để địch các câu lệnh foz thành mã máy chồng xếp.

Xét câu lệnh for sau đây.

for := 1 step TƠ + / unEi1 TƠ */ đo / :mÿ + L

Ba định nghĩa về ngữ nghĩa cĩ thể gán cho câu lệnh này. Một ý nghĩa cĩ thể yêu cầu rằng giới hạn 10 +7 và trị tăng 10 - 7 phải được ước lượng mệt lần trước vịng lặp giống như trong PÍ/I, Thí dụ nếu / = 5 trước vịng lặp thì chúng ta sẽ chạy qua vịng 10 lần rỏi thốt. Ÿ nghĩa thứ hai hồn tồn khác hẳn, đá là chúng ta bắt buộc phải ước lượng giới hạn và trị tảng mỗi lấn qua vịng lặp.

Một phần của tài liệu Trình biên dịch nguuyên lý kỹ thuật và công cụ (Trang 91 - 92)