Hình 2.30 Đoạn mã giả cho một thể phân từ vựng 2.8 MÁY CHỒNG XẾP TRỪU TƯỢNG

Một phần của tài liệu Trình biên dịch nguuyên lý kỹ thuật và công cụ (Trang 72 - 74)

. 98 TỔNG QUAN VỀ BIÊN DỊCH

Hình 2.30 Đoạn mã giả cho một thể phân từ vựng 2.8 MÁY CHỒNG XẾP TRỪU TƯỢNG

2.8 MÁY CHỒNG XẾP TRỪU TƯỢNG

Kỳ đầu (front end) của một trình biên dịch xây dựng một dạng biểu diễn trung gian cho chương trình nguồn để từ đĩ kỳ sau (back end) sẽ tạo ra chượng trình đích. Một đạng biểu diễn trung gian thơng dụng là dạng mã cho một :nđy chẳng xếp trừu tượng {abstract stack maachine). Như đã nĩi ở Chương 1, phân chia một trình biên dịch thành kỳ đầu và kỳ sau cho phép dễ dàng sửa lại trình biên dịch để chạy trên một máy khác. Trong phần này chúng ta sẽ trình bày một máy chồng xếp trừu tượng và chỉ ra

PHẦN 2.8 MÁY CHỒỎNG XẾP TRỪU TƯỢNG m1

cách sinh mã chương trình cho nĩ. Máy này cĩ các bộ nhớ dành riêng cho các chỉ thị và dành riêng cho dữ liệu; tất cả các phép tốn số học được thực hiện trên các giá trị nằm trên một chẳng xếp. Các chỉ thị rất hạn chế và được chia làm ba nhĩm: nhĩm chỉ thị số học trên số nguyên, nhĩm thao tác chồng xếp và nhĩm dịng điều khiển. Hình 2.31 minh họa cho máy này, Con trỏ pc chỉ ra chỉ thị đang được cho thực hiện. Ý nghĩa của các chỉ thị trên máy sẽ được thảo luận như dưới đây.

Chỉ thị số học

Máy trừu tượng phải cài đặt mỗi tốn tử bằng ngơn ngữ trung gian. Một phép tốn cơ bản như phép cộng hoặc trừ đầu được máy trừu tượng hỗ trợ trực tiếp. Một phép tốn phức tạp hơn cĩ thể cần phải được cài đặt như một loạt chỉ thị của máy trừu tượng. Chúng ta đơn giản hĩa phần mơ tả máy bằng cách giả thiết rằng cĩ một chỉ thị cho mỗi tốn tử số học,

INSTRUCTIONS STACK DATA.

¡ |puah § 16 01

2 |xvalue 2 top ¬I 7 TK

*ị*+ T7Ị3

4 |xvalue 3 4

sị* pc

si sẻ

Hình 2.31. Hình ảnh của máy chồng xếp sau khi thực hiện bốn chỉ thị đầu tiên. Mã chương trình máy trừu tượng cho một biểu thức số học sẽ mơ phĩng hành động ước lượng dạng hậu vị cho biểu thức đĩ bằng phương pháp dùng chẳng xếp. Việc ước lượng được tiến hành bằng cách xử lý dạng hậu vị từ trái sang phải, đẩy mỗi tốn hạng vào chồng xếp khi bất gặp nĩ. Khi gặp một tốn tử &-ngơi, đối tận trái của nĩ nằm ở (k - 1) vị trí bên dưới đỉnh chồng và đối tận phải nằm tại đỉnh. Hành động ước lượng áp dụng tốn tử cho & giá trị trên cùng của chồng, lấy các tốn hạng ra và đẩy kết quả vào lại chồng. Thí dụ khí ước lượng biểu thức ! 3 + 5 *, các hành động sau đây được thực hiện.

1. Đẩy số 1 vào chồng xếp. Đẩy số 3 vào chồng xếp.

Cộng hai phần tử trên cùng, lấy chún/ ra khỏi chồng xếp rêi đẩy kết quả 4 vào. Đẩy số B5 vào chồng xếp.

£rĩ®

G0

8

Nhân hai phẩn tử trên cùng, lấy chúng ra khỏi chồng xếp rồi đẩy kết quả 20 vào. Giá trị ở đỉnh chẳng xếp ở bước cuối cùng (ở đây là 20) là giá trị của tồn bộ biểu thức.

72 MỘT TRÌNH BIÊN DỊCH MỘT LƯỢT ĐƠN GIẢN

Trong ngơn ngữ trung gian, tất cả mọi giá trị đều là số nguyên, 0 tương ứng với fa1se và các số nguyên khác khơng tương ứng với true. Tốn tử logic and và oz cần phải cĩ cả hai đối.

L-giá trị và R-giá trị

Chúng ta cần phản biệt ý nghĩa của các định danh ở bên trái và bên phải của một phép gán. Trong mỗi phép gán sau

vế phải xác định một giá trị nguyên, cịn vế trái xác định nơi giá trị được lưu. Tương tự nếu p và q là những con trỏ chỉ đến các ký tự và

p†.:= a†;

vế phải qŸ xác định một ký tự cịn pÏ xác định vị trí ký tự được lưu. Các thuật ngữ /- giá trị và ngiá trị muốn nĩi đến các giá trị thích hợp tương ứng ở vế trái và vế phải của một phép gán. Nghĩa là, r-giá trị là điều mà chúng ta thường xem là “giá trị” cịn Ù-giá trị chính là các vị trí.

Thao tác chồng xếp

Bên cạnh những chỉ thị cho thao tác đẩy một hằng số nguyên vào chồng xếp và nhặt một giá trị ra khỏi đỉnh chồng, chúng ta cịn cĩ những chỉ thị truy xuất vùng nhớ dữ liệu: (adsbygoogle = window.adsbygoogle || []).push({});

push 0 đẩy o vào chồng xếp

rvalue/ đẩy nội dung ở vị trí dữ liệu / vào chỗng xếp l1value/ đẩy địa chỉ của vị trí đữ liệu ? vào chơng xếp

pop xĩa bỏ giá trị ở đỉnh chồng xếp (nhặt ra khưi chồng) :rc r-giá trị trên đỉnh chẳng được đặt vào /-giá trị bên dưới nĩ

Một phần của tài liệu Trình biên dịch nguuyên lý kỹ thuật và công cụ (Trang 72 - 74)