- Mã ba địa chỉ là mã trung gian. Nó được sử dụng bởi các trình biên dịch tối ưu hóa
- Trong mã ba địa chỉ, biểu thức đã cho được chia thành nhiều lệnh riêng biệt. Các hướng dẫn này có thể dễ dàng dịch sang ngôn ngữ lắp ráp
- Mỗi lệnh mã ba địa chỉ có tối đa ba toán hạng. Nó là sự kết hợp giữa phép gán và toán tử nhị phân
Ví dụ
GivenExpression
Mã ba địa chỉ như sau
t1 := -c t2 := b*t1 t3 := -c t4 := d * t3 t5 := t2 + t4 a := t5
t được sử dụng làm thanh ghi trong chương trình đích
Ba mã địa chỉ có thể được biểu diễn dưới hai dạng. tăng gấp bốn và gấp ba lần
Khối cơ bản – Khối cơ bản là một chuỗi ba câu lệnh địa chỉ trong đó điều khiển đi vào ở đầu và chỉ rời ở cuối mà không có bất kỳ bước nhảy hoặc dừng nào
Tìm khối cơ bản –
Để tìm khối cơ bản, chúng ta cần tìm các khối dẫn đầu trong chương trình. Sau đó, một khối cơ bản sẽ bắt đầu từ một nhà lãnh đạo đến nhà lãnh đạo tiếp theo nhưng không bao gồm nhà lãnh đạo tiếp theo. Điều đó có nghĩa là nếu bạn phát hiện ra rằng dòng số 1 là dòng đầu tiên và dòng số 15 là dòng tiếp theo, thì dòng từ 1 đến 14 là một khối cơ bản, nhưng không bao gồm dòng số 15.
Xác định người lãnh đạo trong Khối cơ bản –
- Tuyên bố đầu tiên luôn là một nhà lãnh đạo
- Tuyên bố là mục tiêu của tuyên bố có điều kiện hoặc không có điều kiện là một nhà lãnh đạo
- Tuyên bố ngay sau một tuyên bố có điều kiện hoặc không có điều kiện là một nhà lãnh đạo
fact[x]
{
int
f = 1;
Người lãnh đạo và khối cơ bản –
for
[i = 2; i x] goto 9
Phân tích luồng điều khiển –
Nếu điều khiển nhập B1 không có tùy chọn nào khác sau B1, nó phải nhập B2. Bây giờ, nếu điều khiển vào B2, thì tùy theo điều kiện mà điều khiển sẽ chảy, nếu điều kiện đúng chúng ta sẽ đến dòng số 9, nghĩa là 9 không là gì ngoài B4. Nhưng nếu điều kiện là điều khiển sai, hãy chuyển sang khối B3 tiếp theo. Sau B3, không có điều kiện nào cả, chúng ta đi thẳng đến câu lệnh thứ 3 B2. Biểu đồ luồng điều khiển ở trên có một chu kỳ giữa B2 và B3 không là gì ngoài một vòng lặp
Trình biên dịch mã ba địa chỉChứa mã cho vòng lặp if-else và while và để tạo vòng lặp ở định dạng Mã ba địa chỉ
Trước khi chạy cái này, hãy đảm bảo rằng mô-đun prettytable đã được cài đặt nếu không bạn có thể chạy
pip install prettytable
Mã nguồn cho vòng lặp for
Mã nguồn cho vòng lặp while
Mã nguồn cho câu lệnh if-else
đầu ra
Trong khi lặp lại
cho vòng lặp
Không có vòng lặp "while" Có "while" trung gianVòng lặp While
người đóng góp
- @KautubhDamania
- @GaurangAthavale
- @mihir2510
- @g-bhagwanani
Khối cơ bản – Khối cơ bản là một chuỗi ba câu lệnh địa chỉ trong đó điều khiển đi vào ở đầu và chỉ rời ở cuối mà không có bất kỳ bước nhảy hoặc dừng nào
Tìm khối cơ bản –
Để tìm khối cơ bản, chúng ta cần tìm các khối dẫn đầu trong chương trình. Sau đó, một khối cơ bản sẽ bắt đầu từ một nhà lãnh đạo đến nhà lãnh đạo tiếp theo nhưng không bao gồm nhà lãnh đạo tiếp theo. Điều này có nghĩa là nếu bạn phát hiện ra rằng dòng số 1 là dòng đầu tiên và dòng số 15 là dòng tiếp theo, thì dòng từ 1 đến 14 là một khối cơ bản, nhưng không bao gồm dòng số 15.
Xác định người lãnh đạo trong Khối cơ bản –
- Tuyên bố đầu tiên luôn là một nhà lãnh đạo
- Tuyên bố là mục tiêu của tuyên bố có điều kiện hoặc không có điều kiện là một nhà lãnh đạo
- Tuyên bố ngay sau một tuyên bố có điều kiện hoặc không có điều kiện là một nhà lãnh đạo
fact[x]
{
int
f = 1;
Người lãnh đạo và khối cơ bản –
for
[i = 2; i x] goto 9
Phân tích luồng điều khiển –
Nếu điều khiển nhập B1 không có tùy chọn nào khác sau B1, nó phải nhập B2. Bây giờ, nếu điều khiển nhập vào B2, thì tùy thuộc vào điều kiện, điều khiển sẽ chảy, nếu điều kiện là đúng, chúng ta sẽ đến dòng số 9, có nghĩa là 9 không là gì ngoài B4. Nhưng nếu điều kiện sai, điều khiển sẽ chuyển sang khối tiếp theo B3. Sau B3, không có điều kiện nào cả, chúng ta đi thẳng đến câu lệnh thứ 3 B2. Biểu đồ luồng điều khiển ở trên có một chu kỳ giữa B2 và B3 không là gì ngoài một vòng lặp