2011-11-30 7 views
6

Theo mặc định, flex sử dụng quy tắc kết hợp dài nhất. Có cách nào để ghi đè hành vi này để làm cho nó khớp với chuỗi ngắn nhất không?cách bật quy tắc đối sánh ngắn nhất trong flex (lexer)?

Cảm ơn bạn

+0

Không, và bạn sẽ không muốn nó nếu bạn đã có nó. Ví dụ, nhiều nếu không phải là hầu hết các từ vựng (chắc chắn là tất cả của tôi) kết thúc với một quy tắc bắt tất cả '. trả về yytext [0]; '. Điều đó sẽ trở thành quy tắc duy nhất đã làm bất cứ điều gì. – EJP

Trả lời

0

This page trong cuốn hướng dẫn Flex nói rằng nó không có bất kỳ nhà khai thác không tham lam vì nó là một máy quét chứ không phải là một bộ phân tích, và gợi ý biểu thức thông thường có thể được sử dụng để thêm các chức năng còn thiếu.

+0

tôi không có nghĩa là các toán tử tham lam cho mỗi se.If bạn có các regexprs hoàn toàn riêng biệt, cả hai đều khớp với cùng một tiền tố của một số chuỗi, một lexer theo mặc định chọn giá trị dài nhất. những gì tôi cần là để làm cho nó chọn một cái ngắn hơn, thiết lập lại, và bắt đầu kết hợp lại. – VilleDePommes