. 98 TỔNG QUAN VỀ BIÊN DỊCH
63 MỘT TRÌNH BIẾN DỊCH MỘT LƯỢT ĐƠN GIẢN 2.6 PHÂN TÍCH TỪ VỰNG
2.6 PHÂN TÍCH TỪ VỰNG
Bây giờ chúng ta sẽ đưa thêm vào chương trình dịch của phần trước một thế phán từ oựng (lexical analyzer) để đọc và biến đổi nguyên liệu thành một chuỗi các /hẻ từ (token) cho thể phân cú pháp xử lý. Từ định nghĩa văn phạm trong Phân 2.2, độc giả cần nhớ rằng câu của một ngơn ngữ gồm các chuỗi thẻ từ. Một chuỗi ký tự nguyên liệu tạo ra một thẻ từ duy nhất được gọi là một £ừ ¿ố (lexeme). Thể phân từ vựng cĩ thể lo xử lý các dạng biểu diễn từ tố của các thẻ từ thay cho thể phân cú pháp. Chúng ta sẽ liệt kê ra một số chức năng cần được thể phân từ vựng thực hiện.
Loại bỏ khoảng trắng và các đồng giải thích
Chương trình dịch biểu thức trong phản trước sẽ xét mỗi ký tự trong nguyên liệu, vì thế những ký tự “ngồi dự kiến” như các &ý t/ #rống (blank) sẽ khiến nĩ thất bại. Nhiều ngơn ngữ cho phép các “khoảng trắng” (các ký tự trống, ký tự tab, ký tự new- line) được xuất hiện giữa các thẻ từ. Cúc dịng giải thích (comment) cũng được thể phân cú pháp và chương trình dịch bỏ qua, vì thế chúng cũng cĩ thể được xử lý như những khoảng trắng.
Nếu khoảng trắng được loại bỏ nhờ thể phân từ vựng, thể phân cú pháp sẽ khơng bao giờ phải xem xét chúng. Chọn lựa cách sửa đổi văn phạm để đưa cá khoảng trắng vào trong cú pháp thì hầu như rất khĩ cài đặt.
Các hằng
Mỗi khi cĩ một ký số đơn độc xuất hiện trong một biểu thức, cĩ lê sẽ hợp lý hơn khi cho phép đặt một hằng số nguyên nào đĩ ở vị trí của nĩ. Bởi vì một hằng nguyên là một dãy ký số, nĩ cĩ thể dùng được bằng cách thêm các luật sinh vào văn phạm cho các biểu thức hoặc bằng cách tạo ra một thẻ từ cho các hằng như thế. Cơng việc gom các ký số thành các số nguyên nĩi chung được trao cho thể phân từ vựng bởi vì các số cĩ thể được xử lý như những đơn vị riêng biệt trong quá trình dịch.
Gọi num là thẻ từ biểu thị cho một số nguyên. Khi một dãy ký số xuất biện trong dịng nguyên liệu, thể phân từ vựng sẽ chuyển num cho thế phân cú pháp. Giá trị của số nguyên sẽ được chuyển theo dưới dạng một thuộc tính của thẻ từ num. Về mặt logic, thể phân từ vựng sẽ chuyển cả thẻ từ và thuộc tính cho thể phân cú pháp. Nếu chúng ta viết một thẻ từ và thuộc tính của nĩ như một bệ dữ liệu được bao giữa hai dấu < > thì nguyên liệu
31 + 28 + 59
được biến đổi thành một đãy các bộ
PHẦN 9.6 PHÂN TÍCH TỪ VỰNG 68
Thẻ từ + khơng cĩ thuộc tính. Thành phần thứ hai củả các bộ, đĩ là các thuộc tính, khơng cĩ vai trị gì trong khi phân tích cú pháp nhưng sẽ cần dùng đen trong khi dịch. Nhận diện các định danh và từ khĩa
Ngơn ngữ sử dụng các định danh tìidentiier) làm tên cho các biến, máng, hàm và những thành phần tương tự. Một văn phạm cho một ngơn ngữ thường xử lý định danh như một thẻ từ. Thể phân cú pháp dựa trên một văn phạm như thế muốn nhận được cùng một thẻ từ, chẳng hạn là iđ, mỗi khi cĩ một định danh xuất hiện trong nguyên liệu. Thí dụ với nguyên liệu
€ount = count + increment; (2.15)
sẽ được thể phân từ vựng biến đổi thành dịng thẻ từ
iđ = id + ïd ; (2.16)
Khi để cập đến việc phân tích từ vựng cho dịng nguyên liệu (2.15), chúng ta thường phân biệt giữa thẻ từ iđ với các từ tố count và inorement đi kèm với những thể hiện của thẻ từ này. Chương trình dịch cần biết rằng từ tế count tạo ra hai thể hiện đầu tiên của iđ trong (2.16) cịn từ tố inerement tạo ra thể hiện thứ ba của id.
Khi gặp một từ tố tạo ra một định danh trong nguyên Hiệu, chúng ta cÂn cĩ một cơ chế nhằm xác định xem từ tố này đã được gặp trước đĩ hay chưa. Như đã được đẻ cập trong Chương 1, chúng ta sẽ dùng một bảng ký hiệu (symbol table) cho cơng việc này. Từ tố được lưu trong bảng ký hiệu và một con trỏ chỉ đến mục ghi trong bảng trở thành một thuộc tính của thẻ từ id.
Nhiều ngơn ngữ sử dụng các chuỗi ký tự cố định như begin, end, ïf, vân vân, làm dấu chấm câu hoặc để xác định một số kết cấu. Những chuỗi ký tự này, được gọi là £ử khĩa (Keyword), nĩi chung đều thỏa các qui tắc tạo ra định danh, vì thế chúng ta cũng cần một cơ chế để quyết định xem khi nào một từ tế tạo ra một từ khĩa và khi nào nĩ tạo ra một định danh. Vấn để sẽ đễ giải quyết hơn nếu các từ khĩa được đành riêng (reserved), nghĩa là nếu chúng khơng được dùng làm định danh. Thế thì một chuỗi ký tự tạo ra một định danh chỉ nếu nĩ khơng phải là một từ khĩa.
Vấn đẻ cơ lập các thẻ từ cũng cần đặt ra nếu cùng một chuỗi ký tự xuất hiện trong từ tố của nhiều thẻ từ, chẳng hạn như <, <=, và <> của ngơn ngữ Pascal. Những kỹ thuật nhận diện hiệu quả những thẻ từ như thế sẽ được thảo luận trong Chương 3.
Giao điện cho thể phân từ vựng
Khi một thể phân từ vựng được đặt vào giữa thể phân cú pháp và dịng nguyên liệu, nĩ tương tác với cá hai phần này theo như Hình 2.25. Nĩ đọc các ký tự từ nguyên liệu, nhĩm chúng lại thành các từ tố rỗi gửi các thẻ từ được tạo bởi các từ tố cùng với giá trị thuộc tính của chúng đến những giai đoạn sau của trình biên dịch. Trong một số tình