2011-12-28 19 views
6

Kể từ khi trải nghiệm khủng khiếp của tôi với cssparser, tôi đã tự thiết lập nhiệm vụ triển khai trình phân tích cú pháp CSS trong Java bằng cách sử dụng Parboiled. Tôi đã có tất cả các đặc điểm kỹ thuật màu, nhưng tất nhiên tôi cần tất cả các phần còn lại ...Cái gì? có nghĩa là trong phần tokenization của đặc tả CSS W3C?

Vì vậy, tôi đã đi tìm đặc tả CSS và tìm thấy nó trên W3C website. Tôi bây giờ trong quá trình viết quy tắc cho tất cả các "nguyên tử", nhưng không tìm thấy một cái gì đó đáng lo ngại trong this section:

UNICODE-RANGE u\+[0-9a-f?]{1,6}(-[0-9a-f]{1,6})? 

Phần rằng quấy rầy tôi là dấu hỏi trong [0-9a-f?].

Tiêu đề đoạn cho biết các cụm từ thông dụng được sử dụng ở đây là kiểu chữ Lex. Các ? không có ý nghĩa đặc biệt trong một lớp nhân vật (nhờ @scizzo để xác nhận). Vì vậy, đây có phải là lỗi đánh máy trong thông số W3C hay là ? thực sự được phép trong phạm vi Unicode không? Nếu có, điều đó có nghĩa là gì?

Kết thúc: Tôi có câu trả lời. Tuy nhiên, các đặc điểm kỹ thuật sai: một "dãy nhãn unicode câu hỏi" chỉ có thể được một mình. Với regex ở trên, biểu thức này sẽ được cho phép trong khi rõ ràng là bất hợp pháp: u+4??-733f

Trả lời

4

Yup, đó là dấu chấm hỏi bằng chữ. From the Flex documentation:

Lưu ý rằng bên trong một lớp nhân vật, tất cả các nhà khai thác biểu hiện thường xuyên mất ý nghĩa đặc biệt của họ ngoại trừ thoát ('\') và các nhà khai thác lớp nhân vật, '-', ']', và, tại sự khởi đầu của lớp, '^'.

Bây giờ, theo W3C, ? can be used as a kind of wildcard:

? ký tự bao hàm sự 'bất kỳ giá trị chữ số (ví dụ như U + 4 ??)

+0

này được một điều khẳng định, có nghĩa là dấu chấm hỏi phải bằng cách nào đó hợp pháp trong một phạm vi Unicode ... Nhưng tôi không thể tìm thấy ý nghĩa của nó:/ – fge

+0

Chỉ cần chỉnh sửa, nhưng? về cơ bản là một ký tự đại diện. – sczizzo

+0

Cảm ơn rất nhiều về liên kết! – fge

Các vấn đề liên quan