PHÁN TÍCH TỪ VỰNG

Một phần của tài liệu Phân tích từ vựng (Trang 32 - 33)

được với ký tự thứ nhất, nó không phải là mẫu dài nhất đối sánh được với một tiền tố

của nguyên liệu. Vì thế chiến lược của Lex trong việc chọn tiển tế dài nhất đối sánh được với một mẫu tạo dễ dàng cho việc giải quyết xung đột giữa < và <= bằng một phương pháp được mong đợi — đó là chọn <= làm thẻ từ tiếp theo. [1

Toán tử sải với

Như chúng ta đã thấy trong Phản 3.1, thể phân từ vựng của một số kết cấu của ngôn ngữ lập trình cần phải “xem trước” một số ký tự vượt quá điểm kết thúc của một từ tố trước khi có thể xác định chắc chắn một thẻ từ. Chúng ta nhớ lại thí dụ về Fortran với

cặp lệnh

DO 5 1 = 1.25 DO 5 I = 1,25 DO 5 I = 1,25

Trong Eortran, các khoảng trống (blank) không có tác dụng gì bên ngoài các phần

giải thích và các chuỗi Hollerith, do vậy giả sử rằng mọi khoảng trống có thể loại được đều đã được lược bỏ trước khi thể phân từ vựng bắt đầu hoạt động. Vì thế khi chuyển

cho thể phân từ vựng, các câu lệnh trên sẽ trở thành DO51=1..25

DO51=1,,25

Trong câu lệnh thứ nhất, chúng ta không thể nói được gì cho đến khi gặp dấu chấm thập phân, cho biết rằng chuỗi DO là thành phần của định đanh DO5T. Trong câu lệnh

thứ hai, bản thân DO là một từ khóa,

Trong Lex, chúng ta có thể viết một mâu dưới đạng r;/?;, trong đó r¡ và r; là các biểu thức chính qui, mang nghĩa là đối sánh được một chuỗi với r; nhưng chỉ nếu theo sau nó là một chuỗi r;. Biểu thức chính qui rạ sau đoán tử sải oới (lookahead operator)

/ chỉ ra ngữ cảnh bên phải của một đối sánh; nó chỉ được dùng để hạn chế một đối

sánh, không phải là thành phần của đối sánh. Thí dụ một đặc tả Lex để nhận đạng từ

khóa DO trong ngữ cảnh ở trên là

DO/((1etter)} | (digit})* = ((1etter} | {digit))*,

Với đặc tả này, thể phân từ vựng sẽ xem trong vùng đệm nguyên liệu để tìm một.

chuỗi chữ cái và ký số có một dấu bằng theo sau, kế đến là các chữ cái và ký số rồi đến một dấu phẩy để bảo đảm rằng không có một câu lệnh gán. Thế thì chỉ các ký tự Ð và © đi trước toán tử sải với / mới là thành phần của từ tố đã đối sánh được. Sau khi đối sánh thành công, yytext chỉ đến D và yyleng = 2. Chú ý rằng mẫu sải với đơn giản

này cho phép nhận dạng được ĐO khi theo sau nó là dãy ký tự lộn xộn như Z4=6Q, nhưng sẽ không bao giờ xem DO là thành phản của một định danh.

SỐ

PHẦN 3.5 MỘT NGÔN NGỮ ĐẶC TẢ THỂ PHÂN TỪ VỰNG 125

Thí dụ 3.12. Toán tử sải với có thể được dùng để giải quyết một vấn đẻ khó khăn

khác khi phân tích từ vựng của ngôn ngữ Fortran: phần biệt các từ khóa với định đanh. Thí dụ nguyên liệu

Một phần của tài liệu Phân tích từ vựng (Trang 32 - 33)

Tải bản đầy đủ (PDF)

(39 trang)