đượ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