
Nhập môn Chương trình dịch
Học kì II 2006-2007
Bài 09: Phân tích ngữnghĩa

Nhắc việc
• Nộp bài tập lập trình số1: tuần sau

Phân tích ngữnghĩa
• Tìm tất cảcác lỗi còn lại của chương trình
nguồn
– Khai báo biến
– Kiểm tra kiểu (kiểu tĩnh)
• Thiết lập các thông tin cần thiết cho các
bước dịch sau đó
– Kiểu của các biểu thức
– Bốtrí dữliệu

Kiểm tra ngữnghĩa – đệ quy
•Ta đã có cây cú pháp
– Duyệt cây cú pháp bằng phương pháp đệ quy, tới thăm tất cả
các nút trong cây
– Tại mỗi nút, xây dựng các thông tin cần thiết (thông tin vềkiểu)
class Add extends Expr {
Expr e1, e2;
Type typeCheck() throws SemanticError {
Type t1 = e1.typeCheck(), t2 = e2.typeCheck();
if (t1 == Int && t2 == Int) return Int;
else throw new TypeCheckError(“type error +”);
}
}

Kiểm tra kiểu của tên
class Id extends Expr {
String name;
Type typeCheck() {
return ?
}
}
• Cần lưu giữ thông tin vềkiểu của các tên
xuất hiện trong phạm vi (scope) của
chương trình: bảng kí hiệu(symbol table)