Có bất kỳ ngữ pháp CSS nào tốt cho antlr4 không? Tôi biết có một số ngữ pháp cho antlr3, nhưng nó chỉ ra CSS không phải là tầm thường để phân tích cú pháp mà không có "chế độ lexer", được thêm vào trong v4. Tại sao?Ngữ pháp CSS tốt trong Antlr v4
Hãy xem xét các selectors CSS sau:
.hello.world { /* ... */ }
.hello .world { /* ... */ }
Trong hầu hết các văn phạm, khoảng trắng chỉ đơn giản là bỏ qua. Nhưng nếu bạn bỏ qua khoảng trắng, sẽ không thể phân biệt giữa hai bộ chọn ở trên ở cấp trình phân tích cú pháp.
Sau đó, một lần nữa, nếu bạn không bỏ qua khoảng trắng, ngữ pháp trở nên khá ồn ào với WS? hoặc các mẫu WS * ở khắp mọi nơi, vì khoảng trắng là chủ yếu là vô nghĩa trừ khi nó xảy ra trong bộ chọn.
Đó là nơi chế độ từ antlr4 đi vào, bởi vì với sự hỗ trợ cho các chế độ lexer bạn có thể xác định những quy định mới cho lexer bất cứ khi nào bạn nhập cảnh khác nhau (ví dụ: không bỏ qua khoảng trắng trong "selector" ngữ cảnh).
Điều đó nói rằng, tôi sẽ chấp nhận bất kỳ ngữ pháp cho antlr3 cũng chừng nào nó xử lý khoảng trắng đúng cách, vì đó là phiên bản chúng tôi đang sử dụng bây giờ anyway ;-)
Chúng tôi đã chỉ sử dụng phloc-css, một thư viện phân tích cú pháp CSS nguồn mở tuyệt vời. Hỗ trợ tuyệt vời cho đặc tả CSS mới nhất, và rất tích cực phát triển. – gzak
Có thể hữu ích http://www.antlr2.org/article/whitespace/ (tức là chỉ cần mã hóa nó như mọi thứ khác, không cần từ vựng kể từ khoảng 3.3) –