1. Trang chủ
  2. » Công Nghệ Thông Tin

Nhập môn Chương trình dịch - Bài 11

15 7 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 15
Dung lượng 85,6 KB

Nội dung

Luật ngữ nghĩa Luật ngữ nghĩa Bảng kí hiệu - đánh dấu các tên và các kiểu .Biểu thức kiểu - mô tả cách tạo thành các kiểu . Làm thế nào để mô tả việc kiểm tra kiểu → Dùng luật ngữ nghĩa . Luật ngữ nghĩa định nghĩa kiểu của các nút trong cây cú pháp

Nhập mơn Chương trình dịch Học kì II 2006 - 2007 Bài 11: Luật ngữ nghĩa Luật ngữ nghĩa • Bảng kí hiệu  đánh dấu tên kiểu • Biểu thức kiểu  mơ tả cách tạo thành kiểu • Làm để mơ tả việc kiểm tra kiểu → Dùng luật ngữ nghĩa • Luật ngữ nghĩa định nghĩa kiểu nút cú pháp Luật ngữ nghĩa • Luật ngữ nghĩa cho phép đánh giá kiểu nút cú pháp • Ví dụ: • E:T nút E có kiểu T • : int nút có kiểu int • * (3 + 4) : int • true : bool • “hello” : string • if (b) else : int Đánh giá kiểu if (b) else : int • Làm để đánh giá biểu thức có kiểu int ? b phải có kiểu bool (b: bool) phải có kiểu int (2: int) phải có kiểu int (3: int) Đánh giá kiểu • Ta viết: A ├ E : T – nghĩa là: ngữ cảnh A (bảng kí hiệu) biểu thức E có kiểu T – Ví dụ: b : bool, x : int ├ b : bool b : bool, x : int ├ if (b) else x : int ├ + : int Đánh giá kiểu • Để đánh giá b : bool, x : int ├ if (b) else x : int • Phải đánh giá b : bool, x : int ├ b : bool b : bool, x : int ├ : int b : bool, x : int ├ x : int Luật ngữ nghĩa • Với ngữ cảnh A, biểu thức E, lệnh S1 lệnh S2 ta có luật ngữ nghĩa A ├ if (E) S1 else S2 : T A ├ E : bool A ├ S1 : T A ├ S2 : T Viết luật ngữ nghĩa Tiền đề A ├ E : bool A ├ S1 : T A ├ S2 : T A ├ if (E) S1 else S2 : T Kết luận (tên luật) Viết luật ngữ nghĩa • Cho phép mơ tả xác, ngắn gọn cách đánh giá kiểu • Luật ngữ nghĩa viết cho nút sản xuất văn phạm • Đánh giá kiểu (kiểm tra kiểu) trình lần ngược cú pháp dựa vào luật Ví dụ A ├ E1 : int E1 A ├ E2 : int (+) : int E2 + A ├ E1 + E2 : int E1 : int : int E2 Cài đặt luật ngữ nghĩa • Cài đặt cách lần ngược lại theo luật class Add extends Expr { T = E.typeCheck(A) Expr e1, e2; A├E:T Type typeCheck(SymTab A) { Type t1 = e1.typeCheck(A), t2 = e2.typeCheck(A); if (t1 == Int && t2 == Int) return Int; else throw new TypeCheckError(“+”); } A ├ E1 : int A ├ E2 : int } (+) A ├ E1 + E2 : int Luật ngữ nghĩa • Luật ngữ nghĩa với giá trị biến luật • Luật ngữ nghĩa khơng có tiền đề: tiên đề • Cùng kết luận có nhiều cách chứng minh (nhiều luật có kết luận) Luật ngữ nghĩa: lệnh While • Với lệnh khơng có kiểu, ta đưa vào kiểu giả - unit (unit = có kiểu đúng) A ├ E : bool A├S:T (while) A ├ while (E) S : unit Luật ngữ nghĩa: lệnh If A ├ E : bool A├S:T (If) A ├ if (E) S : unit Luật ngữ nghĩa: lệnh gán A ├ id : T A├E:T (Assign) A ├ id = E : T A ├ E1 : Array [ T ] A ├ E2 : int A ├ E3 : T A ├ E1[E2] = E3 : T (Array assign) ... cách đánh giá kiểu • Luật ngữ nghĩa viết cho nút sản xuất văn phạm • Đánh giá kiểu (kiểm tra kiểu) trình lần ngược cú pháp dựa vào luật Ví dụ A ├ E1 : int E1 A ├ E2 : int (+) : int E2 + A ├ E1 +... (nhiều luật có kết luận) Luật ngữ nghĩa: lệnh While • Với lệnh khơng có kiểu, ta đưa vào kiểu giả - unit (unit = có kiểu đúng) A ├ E : bool A├S:T (while) A ├ while (E) S : unit Luật ngữ nghĩa: lệnh

Ngày đăng: 08/05/2021, 19:36