. 98 TỔNG QUAN VỀ BIÊN DỊCH
64 MỘT TRÌNI BIẾN DỊCH MỘT LƯỢT ĐƠN GIẢN
huống, thể phân cú pháp phải đọc trước một số ký tự trước khi cĩ thể quyết định sẽ trả về thẻ từ nào cho thể phân cú pháp. Thí dụ một thể phân cú pháp cho Pascal phải đọc tiếp nữa khi nĩ gặp ký tự >. Nếu ký tự kế tiếp là = thì chuỗi ký tự >= là từ tố tạo za thẻ từ cho tốn tử “lớn hơn hoặc bằng”. Ngược lại thì > là từ tố tạo ra tốn tử "lớn hơn”, và thể phân từ vựng đã đọc một ký tự quá nhiều lần. Ký tự “dư” ra này phải được đưa trở lại nguyên liệu bởi vì nĩ cĩ thể là ký tự dầu tiên của từ tố kế tiếp trong nguyên liệu. truyền thẻ từ đọc ký tự và thuộc tính : thể phân từ vựng thể phân cú pháp đẩy ký tự trở về
Hình 39.35. Đặt thể phân từ vựng vào giữa nguyên liệu và thể phân cú pháp. “Thể phân từ vựng và thể phân cú pháp tạo ra một cặp “kẻ làm-người ăn” (pro- ducer-consumer). Thể phân từ vựng tạo ra các thể từ và thể phân cú pháp sẽ “tiêu thụ” nĩ. Các thẻ từ được sinh ra cĩ thể được giữ trong một vùng đệm cho đến khi chúng được sử dụng. Tương tác giữa hai thể phân tícb này chỉ bị ràng buộc bởi kích thước vùng đệm bởi vì thể phân từ vựng sẽ khơng thể tiến hành khi vùng đệm đầy cịn thể phân cú pháp sẽ khơng thể tiến khi hành vùng đệm rỗng. Thơng thường vùng đệm chỉ giữ một thê từ. Trong trường hợp này, tương tác cĩ thể được cài đặt đơn giản bằng cách đưa thể phân từ vựng thành một thủ tục được thể phân cú pháp gọi, trả về các thẻ từ theo như yêu cầu.
Cài đặt thao tác đọc và đẩy các ký tự trở lại thường được thực hiện bằng cách thiết lập một vùng đệm nguyên liệu. Mỗi lần sẽ đọc một khối các ký tự vào vùng đệm; sử dụng một con trỏ để theo dõi phần nguyên liệu đã được phân tích. Đẩy một ký tự trở lại được cài đặt bằng cách cho con trỏ trở lui lại. Các ký tự nguyên liệu cũng cĩ thể cần được lưu lại cho cơng việc ghi nhận lỗi bởi vì cần phải chỉ ra vị trí lỗi trong đoạn chương trình. Đệm các ký tự nguyên liệu chỉ vì lý do hiệu năng. Chuyển một khối ký tự bao giờ cũng hiệu quả hơn là chuyển mỗi lần một ký tự. Các kỹ thuật đệm nguyên. liệu sẽ được thảo luận trong Phần 3.2.
Một thể phân từ vựng
Bây giờ chúng ta xây dựng một thể phân từ vựng thơng thường cho chương trình dịch biểu thức của Phản 3.5. Mục đích của thể phân từ vựng là cho phép các khoảng trắng và các số xuất biện trong biểu thức. Trong phần kế tiếp chúng ta mở rộng thể phân từ vựng cho phép đùng cả các định danh.
.PHẦN 3.6 PHÂN TÍCH TỪ VỰNG 65
dùng getchar () —————>| F——— trả thẻ từ đọc nguyên liệu thể phân từ vựng cho bên gọi
3 "- 1exan Q}
đẩy c trở lại bằng«©————1 ungate (c,stdin) đặt giá trị thuộc tính