2013-09-03 25 views
5

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 ;-)

+1

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

+0

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) –

Trả lời

1

Tôi tưởng tượng bạn đã tìm thấy một trả lời cho câu hỏi này vì nó đã được đăng cách đây rất lâu. Thậm chí vẫn còn:

Một tốt ANTLR v4 ngữ pháp cho CSS3 có thể được tìm thấy trên ANTLR Github đây:

Antlr v4 CSS3 Grammar

Như đã nêu trong Readme, nó hoạt động trên một số lượng file CSS - tuy nhiên, nó không xử lý cú pháp đầy đủ của @import hoặc @include.

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