TAILIEUCHUNG - Tài liệu trình biên dịch C (ĐH Cần Thơ) part 4

MỘT CHƯƠNG TRÌNH DỊCH BIỂU THỨC ÐƠN GIẢN Sử dụng các kỹ thuật nêu trên, chúng ta xây dựng một bộ dịch trực tiếp cú pháp mà nó dịch một biểu thức số học đơn giản từ trung tố sang hậu tố. Ta bắt đầu với các biểu thức là các chữ số viết cách nhau bởi + hoặc -. Xét lược đồ dịch cho dạng biểu thức này : expr → expr + term { print (‘+’) } expr → expr - term { print (‘-’) } expr → term term → 0 . term → 9 {. | IV. MỘT CHƯƠNG TRÌNH DỊCH BIỂU THỨC ĐƠN GIẢN Sử dụng các kỹ thuật nêu trên chúng ta xây dựng một bộ dịch trực tiếp cú pháp mà nó dịch một biểu thức số học đơn giản từ trung tố sang hậu tố. Ta bắt đầu với các biểu thức là các chữ số viết cách nhau bởi hoặc -. Xét lược đồ dịch cho dạng biểu thức này expr expr term print expr expr - term print - expr term term 0 print 0 . term 9 print 9 Hình - Đặc tả lược đồ dịch khởi đầu Văn phạm nền tảng cho lược đồ dịch trên có chứa luật sinh đệ qui trái bộ phân tích cú pháp dự đoán không xử lý được văn phạm dạng này cho nên ta cần loại bỏ đệ quy trái bằng cách đưa vào một ký hiệu chưa kết thúc mới rest để được văn phạm thích hợp như sau expr term rest rest term print rest - term print - rest s term 0 print 0 term 1 print 1 term 9 print 9 Hình sau đây tả quá trình dịch biểu thức 9 - 5 2 dựa vào lược đồ dịch trên Bây giờ ta cài đặt chương trình dịch bằng C theo đặc tả như trên. Phần chính của chương trình này là các đoạn mã C cho các hàm expr term và rest. Hàm expr tương ứng với ký hiệu chưa kết thúc expr expr 23 term rest Hàm expr tương ứng với ký hiệu chưa kết thúc expr rest if lookahead match term putchar rest else if lookahead - match - term putchar - rest else Hàm expr tương ứng với ký hiệu chưa kết thúc expr term if isdigit lookahead putchar lookahead match lookahead else error Tối ưu hóa chương trình dịch Một số lời gọi đệ quy có thể được thay thế bằng các vòng lặp để làm cho chương trình thực hiện nhanh hơn. Đoạn mã cho rest có thể được viết lại như sau rest L if lookahead match term putchar goto L else if lookahead - match - term putchar - goto L 24 else Nhờ sự thay thế này hai hàm rest và expr có thể được tích hợp lại thành một. Mặt khác trong C một câu lệnh stmt có thể được thực hiện lặp đi lặp lại bằng cách viết while 1 stmt với 1 là điều kiện hằng đúng. Chúng ta cũng có thể thóat khỏi vòng lặp dễ dàng bằng lệnh break. Đoạn chương trình có thể được viết lại như sau expr term while 1 if lookahead match term .

TAILIEUCHUNG - Chia sẻ tài liệu không giới hạn
Địa chỉ : 444 Hoang Hoa Tham, Hanoi, Viet Nam
Website : tailieuchung.com
Email : tailieuchung20@gmail.com
Tailieuchung.com là thư viện tài liệu trực tuyến, nơi chia sẽ trao đổi hàng triệu tài liệu như luận văn đồ án, sách, giáo trình, đề thi.
Chúng tôi không chịu trách nhiệm liên quan đến các vấn đề bản quyền nội dung tài liệu được thành viên tự nguyện đăng tải lên, nếu phát hiện thấy tài liệu xấu hoặc tài liệu có bản quyền xin hãy email cho chúng tôi.
Đã phát hiện trình chặn quảng cáo AdBlock
Trang web này phụ thuộc vào doanh thu từ số lần hiển thị quảng cáo để tồn tại. Vui lòng tắt trình chặn quảng cáo của bạn hoặc tạm dừng tính năng chặn quảng cáo cho trang web này.