Tôi có một định nghĩa quy tắc như vậy:ANTLR ưu tiên thẻ
reference: volume':'first_page'-'last_page ;
volume: INTEGER;
first_page: INTEGER;
last_page: INTEGER;
INTEGER: [0-9]+;
FREE_TEXT_WORD: NON_SPACE+;
fragment NON_SPACE : ~[ \r\n\t];
Với đầu vào "168: 321-331", tôi nghĩ rằng nó sẽ phù hợp với các tài liệu tham khảo quy tắc. Nhưng trên thực tế, toàn bộ chuỗi được mã hóa là FREE_TEXT_WORD.
Tôi làm cách nào để tạo mã thông báo INTEGER mất tùy chọn hơn FREE_TEXT_WORD trong trường hợp này?
Cảm ơn.
-1: Điều này không có vẻ như nó đang hoạt động. Những gì bạn đã thực sự thực hiện được chuyển đổi quy tắc thành 'FREE_TEXT_WORD: NON_SPACE;', cho phép quy tắc 'INTEGER' khớp với đầu vào bằng cách buộc quy tắc' FREE_TEXT_WORD' thành * không bao giờ * khớp nhiều hơn một ký tự. –
@ 280Z28 Cảm ơn bạn đã bình luận. Tôi đã thực sự ấn tượng rằng đó là một vấn đề tham lam và thử nghiệm nhanh chóng của tôi đã giải quyết vấn đề của OP vì vậy tôi đã gửi một câu trả lời. Tuy nhiên tôi đã mua cuốn sách ngày hôm qua, vì vậy hãy để tôi tiêu hóa nó một lúc. Tôi sẽ giữ câu trả lời ở đây và cuối cùng sẽ cập nhật hoặc xóa nó. – auselen