Tôi đang sử dụng Flex và Bison cho trình tạo trình phân tích cú pháp, nhưng gặp sự cố với trạng thái bắt đầu trong máy quét của tôi.Trạng thái bắt đầu bằng Lex/Flex
Tôi đang sử dụng quy tắc độc quyền để đối phó với bình luận, nhưng ngữ pháp này dường như không phù hợp với thẻ trích dẫn:
%x COMMENT
// { BEGIN(COMMENT); }
<COMMENT>[^\n] ;
<COMMENT>\n { BEGIN(INITIAL); }
"==" { return EQUALEQUAL; }
. ;
Trong ví dụ đơn giản này dòng:
// a == b
isn' t khớp hoàn toàn với tư cách nhận xét, trừ khi tôi bao gồm quy tắc này:
<COMMENT>"==" ;
Làm cách nào để tôi nhận được vòng này withou t phải thêm tất cả các mã thông báo vào quy tắc độc quyền của tôi?
Tôi không muốn sử dụng các trạng thái bao gồm nếu có thể tránh được vì tôi có nhiều quy tắc. Vấn đề là quy tắc 'ăn bình luận' này dường như không khớp với các thẻ với nhiều hơn một ký tự (chẳng hạn như ==). – Dan
Sau đó, tôi nghĩ rằng bạn có thể làm điều gì đó sai trái. Bạn cần phải tạo 'trình phân tích cú pháp phụ' cho các nhận xét, không phù hợp với mã thông thường của bạn. –
Giả sử, bạn muốn lưu trữ dòng của mỗi đầu vào, sau đó điều này sẽ cung cấp cho bạn số dòng không chính xác? –