Cấu trúc gọi đệ qui Về mặt hiện thực gọi đệ qui khác gọi trở về đơn giản ở chỗ, với gọi đệ qui nhiều bản hoạt động của cùng 1 ctc có thể cùng tồn tại trong bộ nhớ, trong thời gian thực
Trang 1Chương 4 CẤU TRÚC ĐIỀU KHIỂN
Trang 2– Shared data: block structure
Trang 5Cơ chế điều khiển
Trang 6Cơ chế điều khiển
(A*)
Trang 7Cú pháp của biểu thức
Trung tố (infix): phổ biến và tự nhiên
(A + B) * (C - A)
– Chỉ dùng cho các phép toán hai toán hạng
– Cần có qui định về độ ưu tiên về thứ tự thực hiện các phép toán để giảm tính mơ hồ (ambiguity)
Trang 10Dạng thời gian thực thi của biểu thức
Các biểu thức ở các dạng cú pháp được dịch sang dạng thời gian thực thi trước khi được thực thi thật sự bởi phần cứng máy tính hoặc chương trình thông dịch
– Biên dịch: chuỗi các lệnh máy
– Thông dịch: cấu trúc cây, dạng tiền tố hoặc hậu tố
Trang 11Dạng thời gian thực thi của biểu thức
Biên dịch: chuỗi các lệnh máy sinh ra cho biểu thức ở dạng hâu
A + BCA
Trang 12Điều khiển trình tự giữa các phát biểu
Phát biểu GOTO
Phát biểu ghép
Phát biểu điều kiện
Phát biểu lặp
Trang 13GOTO L
JMP L
L
Trang 15Phát biểu điều kiện
Trang 16Phát biểu điều kiện
L3
Trang 20Điều khiển trình tự giữa các chương trình
con
Gọi trở về đơn giản
Gọi đệ qui
Trang 21Cấu trúc gọi trở về đơn giản
Khi chương trình được thực thi, chương trình chính được
thực hiện đầu tiên Trong thời gian thực thi chương trình
chính có thể gọi các ctc thực hiện Và mỗi chương trình con này, đến lượt nó, lại có thể gọi các chương trình con khác thực hiện
Nếu ctc A gọi ctc B, thì A gọi là chương trình gọi, B gọi là chương trình được gọi Trong thời gian thực thi B thì A tạm thời bị treo Khi sự thực thi B hoàn thành, sự thực thi A sẽ tiếp tục tại ‘điểm’ ở ngay sau nơi gọi B
Trang 22Hạn chế của cấu trúc gọi trở về đơn giản
Chương trình con không được đệ qui (bao gồm đệ qui trực tiếp, gián tiếp)
Cần có các phát biểu gọi tường minh
Chương trình con phải được hoàn thành ở mỗi lần gọi
Điều khiển được chuyển ngay tức thời ở điểm gọi
Trình tự thực thi đơn
Trang 23Cấp phát bộ nhớ ctc gọi trở về đơn giản
gọi ctc có thể sử dụng chung một khối lưu trữ và khối lưu trữ này cũng được cấp phát tĩnh như khối lưu trữ phân đoạn mã
Các đối tượng dữ liệu trong các bản ghi hoạt động hòan toàn xác định trong thời gian thực thi chương trình và có thể truy cập dễ dàng, do đó tốc độ thực thi chương trình tăng lên
Tuy nhiên, cách lưu trữ này có nhược điểm là các ctc chiếm dụng vùng nhớ nhiều, do phải cấp phát các khối lưu trữ cho các bản ghi hoạt động của tất cả các ctc có mặt trong
chương trình Các khối này nằm trong bộ nhớ trong suốt thời
Trang 24Cấu trúc gọi đệ qui
Về mặt hiện thực gọi đệ qui khác gọi trở về đơn giản ở chỗ, với gọi đệ qui nhiều bản hoạt động của cùng 1 ctc có thể cùng tồn tại trong bộ nhớ, trong thời gian thực thi chương trình VD A gọi B rồi B gọi A, có tới 2 bản hoạt động của A nằm trong bộ nhớ khi B gọi A
Để gọi đệ qui ctc phải cấp phát động khối lưu trữ cho các bản hoạt động trong thời gian thực thi chương trình
Trang 25Cấp phát bộ nhớ cho ctc gọi đệ qui
Việc cấp phát các khối lưu trữ thường được thực hiện theo
cơ chế chồng Các khối lưu trữ được cấp phát trong một
chồng gọi là chồng trung tâm (central stack)
Khi thực thi chương trình, bản ghi hoạt động của chương
trình chính được cấp phát ở đáy chồng Khi một chương
trình A được gọi, bản ghi hoạt động của A được bố trí ngay tiếp theo Nếu A gọi tới B thì bản ghi hoạt động của B sẽ lại được bố trí ngay tiếp vùng nhớ bản ghi hoạt động của A,
việc cấp phát cứ diễn ra tiếp tục như vậy
Khi B kết thúc trả điều khiển cho A thì bản ghi hoạt động
Trang 26Một số cấu trúc điều khiển khác của ctc
Ngoại lệ và xử lý ngoại lệ
Các trình cộng hành (coroutine)
Chương trình con được định thời (scheduled subprogram)
Cộng tác và sự thực thi đơn giản (đa xử lý với nhiều CPU)
Trang 27Ngoại lệ và xử lý ngoại lệ
Biến cố là những sự kiện xẩy ra, ngắt quãng sự thực thi bình thường của chương trình VD tràn dưới, tràn trên, nhập sai kiểu dữ liệu,…
Trình xử lý ngoại lệ (exception handle) để xử lý ngoại lệ
CTC xử lý ngoại lệ thường không được gọi một cách tường minh
Điều khiển có thể không được chuyển về điểm ngay sau nơi xẩy ra ngoại lệ, sau khi CTC xử lý ngoại lệ được gọi
Trang 29Chương trình con định thời
Chương trình con định thời (schedule subprogram) là các ctc mà sự thực thi nó có thể không bắt đầu ngay sau khi nó đươc gọi
Định thời theo thời gian
CALL A AT TIME = CURRENT_TIME + 10
Định thời theo độ ưu tiên
CALL B WITH PRIORITY 7
Trang 314.2 Điều khiển dữ liệu
Các khái niệm cơ bản (Basic concepts)
Dữ liệu cục bộ và môi trường (Local data and environments)
Dữ liệu chia sẻ: tầm vực động (Shared data: dynamic
scope)
Dữ liệu chia sẻ: cấu trúc khối (Shared data: block structure)
Dữ liệu chia sẻ: truyền tham số (Shared data: parameter transmission )
Trang 32Điều khiển dữ liệu
Các khái niệm cơ bản
Dữ liệu cục bộ
Dữ liệu dùng chung
Thông số và truyền thông số
Trang 33Các khái niệm cơ bản
Trang 34 Tên biến
Tên các tham số hình thức
Tên chương trình con
Tên kiểu dữ liệu tự định nghĩa
Tên hằng định danh
Trang 35Môi trường tham khảo
Sự kết hợp (association): là sự ràng buộc giữa một danh
hiệu với một đối tượng dữ liệu
Môi trường tham khảo là tập các sự kết hợp mà một chương trình có thể tham khảo trong thời gian thực thi chương trình con
Trang 36Môi trường tham khảo
Trang 37Môi trường tham khảo
Môi trường tham khảo được phân thành các phần sau
– Môi trường cục bô (local enviroment)
– Môi trường không cục bộ (nonlocal enviroment)
– Môi trường toàn cục (global enviroment)
– Môi trường được định nghĩa trước (predefined
enviroment)
Trang 39Môi trường không cục bộ
Trang 40Môi trường toàn cục
Trang 41Môi trường được định nghĩa trước
codes for
“write”
Trang 42Tầm vực
Tầm vực của một ràng buộc là phạm vi chương trình mà trong đó ràng buộc có ý
nghĩa, hay có hiệu lực.
Tầm vực động: các bản hoạt động của chương trình con mà bên trong đó kết hợp
có hiệu lực.
Tầm vực tĩnh: phần văn bản chương trình mà bên trong đó các khai báo có hiệu
lực
Trang 43SUB2
Trang 46SUB2
SUB4
Trang 47Các quy tắc tầm vực tĩnh trong ngôn ngữ
X: real
Trang 48Các quy tắc tầm vực tĩnh trong ngôn ngữ
có cấu trúc khối
2 Nếu trong một khối có tham
khảo đến một danh hiệu mà
không có khai báo cục bộ
cho danh hiệu này, thì sự
tham khảo đó sẽ liên hệ với
khai báo cho danh hiệu có ở
khối gần nhất bao khối đang
xét
MAINSUB1
SUB3
SUB2
SUB4
X: realX: integer
X := 1
Trang 49Các quy tắc tầm vực tĩnh trong ngôn ngữ
có cấu trúc khối
3 Mọi khai báo cục bộ của một
khối và của các khối ở trong
khối đó bị che đối với tất cả
các khối bao lấy hoặc ở ngoài
khối đang xét
MAINSUB1
SUB3
SUB2
SUB4
X: real
Trang 50Các quy tắc tầm vực tĩnh trong ngôn ngữ
có cấu trúc khối
4 Tên khối là một phần của
môi trường tham khảo
cục bộ của khối bao trực
tiếp khối đang xét.
MAINSUB1
SUB3
SUB2
SUB4
Trang 51Dữ liệu cục bộ
Đặc tả: dữ liệu cục bộ của một chương trình con bao gồm các
thông số hình thức, các biến cục bộ, và các chương trình con được khai báo ở đầu chương trình con đó.
Hiện thực
– Khi dịch đến ctc, chương trình dịch sẽ tạo ra và duy trì bảng danh
hiệu, các ràng buộc giữa các danh hiệu với thông tin tương ứng được khai báo cho các danh hiệu ở đầu ctc
– Trong thời gian thực thi ctc, các dữ liệu cục bộ của ctc được lưu
trữ trong bản ghi hoạt động tương ứng và được truy suất theo công thức địa chỉ nền cộng với độ dời (offset)
– Các biến cục bộ không muốn bị xóa đi sau khi ctc kết thúc (biến
Trang 52Tham số của ctc
Tham số hình thức và tham số thực sự: Tham số hình thức là biến
được liệt kê trong danh sách tham số (thường nằm tại phần đầu của định nghĩa chương trình con) Còn tham số thực sự là giá trị cụ thể của biến đó tại thời gian chạy.
Trang 53Các phương pháp truyền tham số
Nói chung một ngôn ngữ cung cấp nhiều phương pháp
truyền tham số mà người lập trình có thể lựa chọn để xác định khai báo tham số hình thức lúc định nghĩa chương trình con và cung cấp các tham số thực tế lúc gọi thực hiện
chương trình con Các phương pháp truyền tham số chủ yếu bao gồm:
– Truyền bằng giá trị
– Truyền bằng giá trị-kết quả
Trang 54Truyền bằng giá trị
Tham số hình thức là tham số chỉ vào (IN-only parameters), tức là chỉ nhận giá trị vào cho chương trình con, không có nghĩa vụ trả kết quả về cho chương trình gọi Tham số hình thức được xem
như là một biến cục bộ của chương trình con và được cấp phát ô nhớ riêng
Tham số thực tế là một biểu thức (là một biến, một hằng, một
hàm hoặc là một biểu thức thực sự)
Phương pháp thực hiện: Tại thời điểm gọi, giá trị của tham số
thực tế được sao chép vào trong ô nhớ của tham số hình thức
Trong quá trình thực hiện chương trình con, mọi thao tác trên
tham số hình thức là sự thao tác trên ô nhớ riêng của nó, không ảnh hưởng đến tham số thực tế
Khi chương trình con kết thúc, sự thay đổi giá trị của tham số
hình thức, không làm ảnh hưởng đến giá trị của tham số thực tế
Trang 55Truyền tham chiếu
tức là nó có nghĩa vụ nhận giá trị vào cho chương trình con
và trả kết quả về cho chương trình gọi Tham số hình thức là một con trỏ
số thực tế được sao chép cho tham số hình thức Trong quá trình thực hiện chương trình con, mọi thao tác trên tham số hình thức là sự thao tác trên ô nhớ của tham số thực tế
Trang 56Truyền bằng giá trị -kết quả
Tham số hình thức là tham số vào ra (IN-OUT parameters) nhưng là một biến cục bộ của chương trình con và được cấp phát ô nhớ riêng
Tham số thực tế phải là một biến, tức là một ĐTDL có ô nhớ
Phương pháp thực hiện: Tại thời điểm gọi, giá trị của tham
số thực tế được sao chép vào trong ô nhớ của tham số hình thức Trong quá trình thực hiện chương trình con, mọi thao tác trên tham số hình thức là sự thao tác trên ô nhớ riêng của nó, không ảnh hưởng đến tham số thực tế
Khi chương trình con kết thúc, giá trị cuối cùng của tham số hình thức được sao chép vào ô nhớ của tham số thực tế
Trang 57Truyền bằng kết quả
Tham số hình thức là tham số chỉ ra (OUT-only parameters), tức
là chỉ trả kết quả về cho chương trình gọi, không có nghĩa vụ
nhận giá trị vào cho chương trình con Tham số hình thức được xem như là một biến cục bộ của chương trình con và được cấp phát ô nhớ riêng
Tham số thực tế phải là một biến , tức là một ĐTDL có ô nhớ.
Phương pháp thực hiện: Giá trị của tham số thực tế không được
sử dụng trong chương trình con Tham số hình thức có thể được gán trị như đối với một biến cục bộ Trong quá trình thực hiện
chương trình con, mọi thao tác trên tham số hình thức là sự thao tác trên ô nhớ riêng của nó, không ảnh hưởng đến tham số thực
Trang 58Ví dụ
Kết quả thực hiện với các
phương pháp truyền tham số
Truyền bằng giá trị 1010
Truyền tham chiếu 2020
Truyền bằng giá trị - kết quả 1020
Truyền bằng kết quả 1020