Bài giảng chương trình dịch
Trang 1Giáo trình Kiến trúc máy tính và
CHƯƠNG TRÌNH DỊCH
Trang 2Giáo trình Kiến trúc máy tính và
Trang 3Giáo trình Kiến trúc máy tính và
Nội dung giáo trình
CHƯƠNG 1 NHẬP MÔN CHƯƠNG TRÌNH DỊCH
CHƯƠNG 2 PHÂN TÍCH TỪ VỰNG
CHƯƠNG 3 CÁC VẤN ĐỀ CƠ BẢN VỀ PHÂN TÍCH CÚ PHÁP CHƯƠNG 4 CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ PHÁP
CHƯƠNG 5 PHÂN TÍCH NGỮ NGHĨA
CHƯƠNG 6 XỬ LÝ LỖI VÀ SINH MÃ
Trang 4Giáo trình Kiến trúc máy tính và
1 Các khái niệm cơ bản
2 Đặc trưng của ngôn ngữ lập trình (NNLT) bậc cao
3 Các qui tắc từ vựng và cú pháp
4 Các chức năng của một trình biên dịch
Chương 2
Trang 5Giáo trình Kiến trúc máy tính và
1.1 Sự phát triển của ngôn ngữ lập trình
1.2 Khái niệm chương trình dịch
1.3 Phân loại chương trình dịch
1.4 Các ứng dụng khác của kỹ thuật dịch
Chương 2
Trang 6Giáo trình Kiến trúc máy tính và
1.1 Sự phát triển của ngôn ngữ lập trình
NNLT bậc cao (Higher _level language)
Trang 7Giáo trình Kiến trúc máy tính và
1.2 Khái niệm chương trình dịch
Chương trình dịch là chương trình dùng để dịch một chương trình (CT nguồn) viết trên NNLT nào đó (NN nguồn) sang một chương trình tương đương (CT đích) trên một NN khác (NN đích)
Chương 2
Trang 8Giáo trình Kiến trúc máy tính và
1.3 Phân loại chương trình dịch
CT nguồn Trình biên
dịch CT đích
Máy tính thực thi Kết quả
Thời gian dịch
Dữ liệu
Thời gian thực thi
Trang 9Giáo trình Kiến trúc máy tính và
1.3 Phân loại chương trình dịch
CT nguồn Trình thông dịch Kết quả
Dữ liệu
Trang 10Giáo trình Kiến trúc máy tính và
1.4 Các ứng dụng khác của kỹ thuật dịch
người và máy thông qua các câu lệnh.
tóm tắt văn bản.
Chương 2
Trang 11Giáo trình Kiến trúc máy tính và
Trang 12Giáo trình Kiến trúc máy tính và
chữ cái của các NN là khác nhau.
+ 52 chữ cái: A Z, az
+ 10 chữ số: 0 9
+ Các ký hiệu khác:*, /, +, -, …
Trang 13Giáo trình Kiến trúc máy tính và
3 Các qui tắc từ vựng và cú pháp
3.2 Từ tố (Token)
Chương 2
Trang 14Giáo trình Kiến trúc máy tính và
3 Các qui tắc từ vựng và cú pháp
3.3 Phạm trù cú pháp
theo một qui luật nào đó
+ BNF(Backus Naus Form):
<lệnhgán>::=<tên biến>:=<biểu thức>
Trang 15Giáo trình Kiến trúc máy tính và
nghĩa được khái niệm chương trình đến mức
độ tự có
Trang 16Giáo trình Kiến trúc máy tính và
3 Các qui tắc từ vựng và cú pháp
3.4 Các qui tắc từ vựng thông dụng
tab(‘\t’), dấu sang dòng(‘\n’)
khoảng trống thay vì một khoảng trống
Trang 17Giáo trình Kiến trúc máy tính và
phép toán, tên biến và các phép toán
Ví dụ: x:=x+3*3;
Trang 18Giáo trình Kiến trúc máy tính và
Trang 19Giáo trình Kiến trúc máy tính và
Trang 20Giáo trình Kiến trúc máy tính và
cú pháp của ngôn ngữ không
Trang 21Giáo trình Kiến trúc máy tính và
Trang 22Giáo trình Kiến trúc máy tính và
4 Các chức năng của một chương trình biên dịch
4.4 Xử lý lỗi
Trang 23Giáo trình Kiến trúc máy tính và
4 Các chức năng của một chương trình biên dịch
4.4 Xử lý lỗi
chưa khai báo)
Trang 24Giáo trình Kiến trúc máy tính và
4 Các chức năng của một chương trình biên dịch
4.5 sinh mã trung gian
nguồn có 2 đặc điểm:
Trang 25Giáo trình Kiến trúc máy tính và
4 Các chức năng của một chương trình biên dịch
4.6 Tối ưu mã trung gian
tượng thì thời gian thực thi mã đối tượng sẽ ngắn hơn
Trang 26Giáo trình Kiến trúc máy tính và
4 Các chức năng của một chương trình biên dịch
4.7 Sinh mã đối tượng
một ngôn ngữ khác ngôn ngữ nguồn.
dạng trung gian của CT nguồn, sau đó ghi kết quả để lượt sau đọc và xử lý tiếp.
Trang 27Giáo trình Kiến trúc máy tính và
4 Các chức năng của một chương trình biên dịch
V í dụ:
a:=(b+c)*6 5
Bộ PTTV id1:=(id2+id3)*Num4
Bộ PTCP n1 id1 := n2
* n3
id2
Num4 id3
+
Bộ PTNN n1 id1 := n2
* n3
id2
Intoreal(65) id3
+
Bộ sinh mã trung gian
Temp1:=intoreal(65) Temp2:=id2+id3 Temp3:=temp2*temp1 Id1:=temp3
Bộ tối ưu sinh mã trung gian
Temp1:=id2+id3 Id1:=temp1*65.0
Bộ sinh mã đối tượng
MovF id2, R1 MovF id3, R2 Add R2, R1 Mult #65.0, R1 MovF R1, id1
Trang 28Giáo trình Kiến trúc máy tính và
Trang 29Giáo trình Kiến trúc máy tính và
vựng dãy các token phân tích cú pháp.
với phân tích cú pháp Một lần chỉ phát hiện 1 token gọi là từ tố tiếp đến
Trang 30Giáo trình Kiến trúc máy tính và
thành token đến khi gặp ký tự không thể kết hợp thành token.
(văn bản, mã phân loại) vừa phát hiện cho
bộ phân tích cú pháp.
Trang 31Giáo trình Kiến trúc máy tính và
từ vựng
Gửi token Bộ
phân tích
cú pháp Yêu cầu token
Bảng danh biểu
Trang 32Giáo trình Kiến trúc máy tính và
3.1 Định nghĩa: M(Σ, Q, δ, q0, F)
Σ: bộ chữ vào Q: tập hữu hạn các trạng thái q0 Q: trạng thái đầu
Trang 33Giáo trình Kiến trúc máy tính và
3.2 Biểu diễn các hàm chuyển trạng thái
sao cho δ(q,a)=p
Trang 34Giáo trình Kiến trúc máy tính và
3.2 Biểu diễn các hàm chuyển trạng thái
Trang 35Giáo trình Kiến trúc máy tính và
3.2 Biểu diễn các hàm chuyển trạng thái
tròn.
tròn kép.
có mang các nhãn aΣ, có nghĩa δ(q,a)=p
Trang 36Giáo trình Kiến trúc máy tính và
3.2 Biểu diễn các hàm chuyển trạng thái
Trang 37Giáo trình Kiến trúc máy tính và
3.2 Biểu diễn các hàm chuyển trạng thái
hình vẽ có ưu điểm hơn Trong hình vẽ ta xác định đầy đủ tất cả các thành phần
của Otomat.
chuyển trạng thái, tập các trạng thái, bộ chữ vào nhưng không phân biệt được trạng thái bắt đầu và trạng thái kết thúc.
Trang 38Giáo trình Kiến trúc máy tính và
3.3 Hoạt động của Otomat
bắt đầu từ trạng thái q0.
trạng thái theo δ Có thể đọc xong hay không đọc xong xâu vào.
Trang 39Giáo trình Kiến trúc máy tính và
3.3 Hoạt động của Otomat
thì xâu vào được đoán nhận (xâu đúng).
thì xâu vào không được đoán nhận.
không xác định) thì xâu vào không được
đoán nhận.
Trang 40Giáo trình Kiến trúc máy tính và
3.4 Ví dụ: Xác định Otomat đoán nhận số nhị phân M(Σ, Q, δ, q0, F)
Trang 41Giáo trình Kiến trúc máy tính và
3.4 Ví dụ: Xác định Otomat đoán nhận số nhị phân
Trang 42Giáo trình Kiến trúc máy tính và
Trang 43Giáo trình Kiến trúc máy tính và
Trang 44Giáo trình Kiến trúc máy tính và
Procedure Dockytu(var c:char);
…{Đọc ký tự tiếp, ký tự này luôn luôn được
đọc trước}
Function LoaiKT(c:char):Loaikytu;
…{Cho biết loại của ký tự c}
Procedure Baoloi;
…{Cho một thông báo lỗi}
Procedure Tuvung(var ma:Loaituto;var x:xau); Var i:0 max;
Begin For i:=1 to max do x[i]:=’’;
I:=0;
While loaikytu(kytutiep)=trang do
Dockytu(kytutiep);
Case loaikytu(kytutiep) of Conso: Begin
Trang 45Giáo trình Kiến trúc máy tính và
end;
Ccai: begin Repeat
If i<max then Begin I:=i+1;
x[i]:=kytutiep;
end;
Dockytu(kytutiep);
Until (loaikytu(kytutiep)<>Ccai) and (loaikytu(kytutiep)<>conso);
Ma:=danhbieu;
End;
End; {case} End; {tuvung}
Trang 46Giáo trình Kiến trúc máy tính và
4.1 Phương pháp điều khiển bằng bảng
Var bangchuyen: array[1 6,loaikytu] of 0 6;
Mảng này được nạp dữ liệu như sau:
trang Conso Cham Ttu Ccai
Trang 47Giáo trình Kiến trúc máy tính và
4.1 Phương pháp điều khiển bằng bảng
Procedure Tuvung(var ma:loaituto; var x:xau);
Trang 48Giáo trình Kiến trúc máy tính và
Gồm các token và các thuộc tính của token
Chỉ số Token Trị từ vựng Các thuộc tính khác 01
Trang 49Giáo trình Kiến trúc máy tính và
danh sách móc nối
Trang 50Giáo trình Kiến trúc máy tính và
Trang 51Giáo trình Kiến trúc máy tính và
Trang 52Giáo trình Kiến trúc máy tính và
Ký hiệu: độ dài xâu x là |x|
Trang 53Giáo trình Kiến trúc máy tính và
Trang 54Giáo trình Kiến trúc máy tính và
1.1 Xâu
là x.y hay xy là 1 xâu viết x trước, rồi đến y sau chứ không có dấu cách.
y=0110 xy=010110
Trang 55Giáo trình Kiến trúc máy tính và
1.1 Xâu
tự ngược lại của xâu x
Trang 56Giáo trình Kiến trúc máy tính và
tập hợp: (giao), (hợp), -(hiệu, bù)
Trang 57Giáo trình Kiến trúc máy tính và
Trang 58Giáo trình Kiến trúc máy tính và
1.3 Biểu diễn ngôn ngữ
hữu hạn và có thể xác định được.
Ví dụ: ngôn ngữ là các số tự nhiên nhỏ hơn
20 và lớn hơn 12
L={13, 14, 15, 16, 17, 18, 19}
Trang 59Giáo trình Kiến trúc máy tính và
1.3 Biểu diễn ngôn ngữ
Trang 60Giáo trình Kiến trúc máy tính và
Trang 61Giáo trình Kiến trúc máy tính và
Trang 62Giáo trình Kiến trúc máy tính và
xuất đầu tiên là ký hiệu bắt đầu.
Trang 63Giáo trình Kiến trúc máy tính và
Trang 64Giáo trình Kiến trúc máy tính và
một sản xuất sinh được
Trang 65Giáo trình Kiến trúc máy tính và
nhiều sản xuất mới sinh được
Trang 66Giáo trình Kiến trúc máy tính và
ở bên trái nhất gọi là suy dẫn trái Tương tự
ta có suy dẫn phải
Trang 67Giáo trình Kiến trúc máy tính và
chưa kết thúc
nó từ trái sang phải có nhãn x1, x2, x3, …xn thì Ax1x2x3…xn p
Trang 68Giáo trình Kiến trúc máy tính và
EE+E | E*E | (E) | a
Vẽ cây suy dẫn trái, phải sinh xâu: a+a*a
(1) (2) (3) (4)
Trang 69Giáo trình Kiến trúc máy tính và
Văn phạm G=(Σ, Δ, s, p) sản sinh ra ngôn
Trang 70Giáo trình Kiến trúc máy tính và
Văn phạm G1 và G2 được gọi là tương đương bất kỳ xâu x được sinh ra từ G1 thì G2 cũng sinh ra được và ngược lại
Trang 71Giáo trình Kiến trúc máy tính và
Cho văn phạm PNC G, với A Δ mà
là văn phạm đệ qui Với , (ΣΔ)*
Trang 72Giáo trình Kiến trúc máy tính và
Trang 73Giáo trình Kiến trúc máy tính và
Trang 74Giáo trình Kiến trúc máy tính và
Trang 75Giáo trình Kiến trúc máy tính và
Trang 76Giáo trình Kiến trúc máy tính và
3.2 Phương pháp giải quyết
Trang 77Giáo trình Kiến trúc máy tính và
3.2 Phương pháp giải quyết
sản xuất để thu S: PTCP từ dưới lên
phạm G
của văn phạm G
Trang 78Giáo trình Kiến trúc máy tính và
3.2 Phương pháp giải quyết
Ví dụ: Cho văn phạm PNC G sau:
SB BR | (B) R E=E E a | b | (E+E) Xâu x: (a=(b+a))
Hỏi xâu x có viết đúng cú pháp của G k0?
(1) (2) (3) (4) (5) (6) (7)
Trang 79Giáo trình Kiến trúc máy tính và
3.2 Phương pháp giải quyết
Trang 80Giáo trình Kiến trúc máy tính và
3.2 Phương pháp giải quyết
Trang 81Giáo trình Kiến trúc máy tính và
3.2 Phương pháp giải quyết
Ví dụ:
Vậy xâu x viết đúng cú pháp của G
Trang 82Giáo trình Kiến trúc máy tính và
3.3 Sơ đồ chung giải thuật PTCP từ dưới lên
Trang 83Giáo trình Kiến trúc máy tính và
3.3 Sơ đồ chung giải thuật PTCP từ dưới lên
Trang 84Giáo trình Kiến trúc máy tính và
3.3 Sơ đồ chung giải thuật PTCP từ dưới lên
Else
If (cán xuất hiện ở đỉnh stack) Then
- Lấy cán ra khỏi stack
- Đẩy A vào stack với A
Trang 85
Giáo trình Kiến trúc máy tính và
3.3 Sơ đồ chung giải thuật PTCP từ dưới lên
Else
If (Buffer<>$) Then D/c k/h ở đỉnh của Buffer Stack Else
-Báo lỗi x không đúng cú pháp VP G -Dừng vòng lặp
Trang 86Giáo trình Kiến trúc máy tính và
3.3 Sơ đồ chung giải thuật PTCP từ dưới lên
DK true | false
L write(ID) | read(ID)
ID a | b Xâu x: if true then read(a); có đúng cú pháp
vp trên?
Trang 87Giáo trình Kiến trúc máy tính và
(0) $ if true then read(a); $ D/c
(2) $if true then read(a);$ R/g DKtrue
3.3 Sơ đồ chung giải thuật PTCP từ dưới lên
Trang 88Giáo trình Kiến trúc máy tính và
(9) $if DK then read(ID) ;$ R/g Lread(ID)
3.3 Sơ đồ chung giải thuật PTCP từ dưới lên
Trang 89Giáo trình Kiến trúc máy tính và
3.3 Sơ đồ chung giải thuật PTCP từ dưới lên
Trang 90Giáo trình Kiến trúc máy tính và
3.4 Sơ đồ chung giải thuật PTCP từ trên xuống
Trang 91Giáo trình Kiến trúc máy tính và
3.4 Sơ đồ chung giải thuật PTCP từ trên xuống
Trang 92Giáo trình Kiến trúc máy tính và
3.4 Sơ đồ chung giải thuật PTCP từ trên xuống
- Dừng vòng lặp Else
If (AΔ) xuất hiện ở đỉnh Stack Then Chọn sx thích hợp A
Triển khai A bằng ở đỉnh Stack
Trang 93Giáo trình Kiến trúc máy tính và
3.4 Sơ đồ chung giải thuật PTCP từ trên xuống
Trang 94Giáo trình Kiến trúc máy tính và
3.4 Sơ đồ chung giải thuật PTCP từ trên
Trang 95Giáo trình Kiến trúc máy tính và
3.4 Sơ đồ chung giải thuật PTCP từ trên xuống
AbA | c Xâu x: abbc có đúng cú pháp của VP trên ?
Trang 96Giáo trình Kiến trúc máy tính và
3.4 Sơ đồ chung giải thuật PTCP từ trên xuống
Trang 97Giáo trình Kiến trúc máy tính và
3.4 Sơ đồ chung giải thuật PTCP từ trên xuống
Trang 98Giáo trình Kiến trúc máy tính và
Xâu x có đúng cp của G? ch/m?
Trang 99Giáo trình Kiến trúc máy tính và
Xâu x có đúng cp của G? ch/m?
Trang 100Giáo trình Kiến trúc máy tính và
Trang 101Giáo trình Kiến trúc máy tính và
Trang 102Giáo trình Kiến trúc máy tính và
1.1 Phương pháp ưu tiên toán tử
Văn phạm phi ngữ cảnh thỏa mãn các ĐK:
nhau
Trang 103Giáo trình Kiến trúc máy tính và
1.1 Phương pháp ưu tiên toán tử
Với a, b Σ có:
Trang 104Giáo trình Kiến trúc máy tính và
1.1 Phương pháp ưu tiên toán tử
Trang 105Giáo trình Kiến trúc máy tính và
1.1 Phương pháp ưu tiên toán tử
(Không có T/c bắc cầu)
Trang 106Giáo trình Kiến trúc máy tính và
1.1 Phương pháp ưu tiên toán tử
Trang 107Giáo trình Kiến trúc máy tính và
1.1 Phương pháp ưu tiên toán tử
nhất là a và buffer là b}
If (a>b) Then
- Tìm cán ở đỉnh stack(vị trí mở cán <)
- Lấy cán ra khỏi stack
.
.
Trang 108Giáo trình Kiến trúc máy tính và
1.1 Phương pháp ưu tiên toán tử
Else
If (a<b) or (a=b)Then D/c b từ Buffer Stack Else
- Báo lỗi x không đúng cú pháp G
- Dừng vòng lặp
Trang 109Giáo trình Kiến trúc máy tính và
1.1 Phương pháp ưu tiên toán tử
DK true | false
L write(ID) | read(ID)
ID a | b Xâu x: if true then read(a); có đúng cú pháp
vp trên?
Trang 110Giáo trình Kiến trúc máy tính và
1.1 Phương pháp ưu tiên toán tử
Xét vế phải của từng sản xuất
Trang 111Giáo trình Kiến trúc máy tính và
1.1 Phương pháp ưu tiên toán tử
Trang 112Giáo trình Kiến trúc máy tính và
1.1 Phương pháp ưu tiên toán tử
Trang 113Giáo trình Kiến trúc máy tính và
1.1 Phương pháp ưu tiên toán tử
Sx(4|5): Lwrite(ID) | read(ID)
write | read = ( (qt1) ( = ) (qt1)
( < a | b (qt2)
a |b > ) (qt3)
.
.
.
Trang 114Giáo trình Kiến trúc máy tính và
1.1 Phương pháp ưu tiên toán tử
Trang 115Giáo trình Kiến trúc máy tính và
Stt Stack Buffer Q/hệ H/động
(0) $ if true then read(a);$ < D/c
(1) $if true then read(a);$ < D/c
(2) $if true then read(a);$ > R/g DKtrue (3) $if DK then read(a);$ = D/c
1.1 Phương pháp ưu tiên toán tử
.
< .
Trang 116Giáo trình Kiến trúc máy tính và
Stt Stack Buffer Q/hệ H/động (4) $if DK then read(a);$ < D/c
(5) $if DK then read (a);$ = D/c
(6) $if DK then read( a);$ < D/c
(7) $if DK then read( a );$ > R/g IDa
1.1 Phương pháp ưu tiên toán tử
.
.
< .
Trang 117Giáo trình Kiến trúc máy tính và
(11) $ if DK then L; $ > R/g Sif
DK then L;
1.1 Phương pháp ưu tiên toán tử
.
.
< .
< .
Trang 118Giáo trình Kiến trúc máy tính và
1.1 Phương pháp ưu tiên toán tử
Trang 119Giáo trình Kiến trúc máy tính và
1.1 Phương pháp ưu tiên toán tử
Bài tập:
N 5
Xâu x: const a=5; type b=byte; var c:real;
Trang 120Giáo trình Kiến trúc máy tính và
1.1 Phương pháp ưu tiên toán tử
Bài tập:
.
Trang 121Giáo trình Kiến trúc máy tính và
Trang 122Giáo trình Kiến trúc máy tính và
Trang 123Giáo trình Kiến trúc máy tính và
Trang 124Giáo trình Kiến trúc máy tính và
1.2 Phương pháp thứ tự yếu
stack là Xi(ΣΔ), ở đỉnh buffer là yiΣ Bộ phân tích sẽ xác định hành động thông qua bảng S_R:
Trang 125Giáo trình Kiến trúc máy tính và
Trang 126Giáo trình Kiến trúc máy tính và
Trang 127Giáo trình Kiến trúc máy tính và
Trang 128Giáo trình Kiến trúc máy tính và
If (Có vế phải dài nhất ở đỉnh stack) then
- Lấy ra khỏi stack
- Đẩy A vào stack với A
Trang 129Giáo trình Kiến trúc máy tính và
Trang 130Giáo trình Kiến trúc máy tính và
Trang 131Giáo trình Kiến trúc máy tính và
Trang 132Giáo trình Kiến trúc máy tính và
Trang 133Giáo trình Kiến trúc máy tính và
Trang 134Giáo trình Kiến trúc máy tính và
Trang 135Giáo trình Kiến trúc máy tính và
S_R[X,Y]=rỗng
.
.
Trang 136Giáo trình Kiến trúc máy tính và
1.2 Phương pháp thứ tự yếu
Xâu x: const a=5;var b:byte;begin read(b) end.
Trang 137Giáo trình Kiến trúc máy tính và
( < a|b a|b > ) const <ID ID= = = < N
N=; const <a|b a|b > = = < 5
5 > ; begin<L L=end end=.
.
.
.
.
.
.
.
.
.
.
.
.
Trang 138Giáo trình Kiến trúc máy tính và
1.2 Phương pháp thứ tự yếu
Văn phạm phi ngữ cảnh thỏa mãn các ĐK:
- Không có 2 sản xuất có cùng vế phải
- Không có vế phải là
- Không có phần tử S_R[x,y] có cả trị S và R
- Nếu Ax1x2…xn và Bxixi+1…xn thì
không xi-1<=B
Trang 139Giáo trình Kiến trúc máy tính và
Cx1x2…xi-thu gọn xixi+1…xn về B rồi mới Cx1x2…xi-thu gọn
x1x2…xi-1B về C Như vậy mâu thuẫn với tính chất luôn luôn thay thế vế phải dài nhất