2009-04-02 38 views
5

Tôi đang tìm kiếm một số tổng quan tốt về các phương pháp hay nhất và các mẫu phổ biến để bật đánh dấu cú pháp trong hộp văn bản. Nó có vẻ giống như một bài tập rất phổ biến gần như tất cả các ngôn ngữ có một điều khiển giao diện người dùng cho phép đánh dấu cú pháp bằng các ngôn ngữ khác nhau. Tôi chỉ tò mò muốn xem liệu có một mô hình triển khai chung hay không.Mẫu thiết kế nổi bật cú pháp

Mọi người đều sử dụng cụm từ thông dụng? Có kho lưu trữ cho các cụm từ thông dụng thường được sử dụng trong các trường hợp làm nổi bật cú pháp không?

Có cách tiếp cận thay thế/tốt hơn để làm nổi bật cú pháp không?

Cập nhật

Liên kết với các nguồn lực có liên quan về việc thực hiện cú pháp nổi bật trong một ngôn ngữ nhất định hoặc các khái niệm liên quan đến làm nổi bật cú pháp sẽ là tuyệt vời. Lexing (phân tích từ vựng) đã được đưa ra trong một câu trả lời nhưng không có một liên kết để tìm hiểu thêm. Bất cứ điều gì để giúp hiểu rõ hơn vấn đề thường được giải quyết này sẽ là tuyệt vời.

Lexical Analysis on Wikipedia

+0

+1 Tôi rất tò mò muốn biết về điều này .... Tôi nghi ngờ regex sẽ quá chậm đối với các tệp lớn hoặc ít nhất chúng sẽ không hoạt động cho những thứ phức tạp, như chỉ làm nổi bật các biến đã được xác định. – mpen

Trả lời

2

Cụm từ thông dụng chắc chắn là nơi đầu tiên bắt đầu nhất. Tuy nhiên, họ không thể đối phó với nhiều trường hợp cạnh mà hầu hết các ngôn ngữ gặp phải - văn bản trông giống như từ khóa có thể được tìm thấy trong các chuỗi ký tự, chuỗi chữ lần lượt có thể chứa dấu phân cách thoát, cũng như các ký tự đặc biệt. Về cơ bản để làm tốt công việc làm nổi bật cú pháp bạn cần phải thực hiện lexing của nguồn - phân tích cú pháp nó với việc áp dụng các chẩn đoán cụ thể về ngôn ngữ để xây dựng một danh sách các vùng, trong đó mỗi vùng của nguồn được chú thích với cách nó được tạo kiểu.

Khi chỉnh sửa diễn ra, bạn lại có thể áp dụng các quy tắc ngôn ngữ để xem thay đổi này có thể thay đổi cách trình bày của một khu vực đến mức nào. Ví dụ, gõ một chữ cái bên trong một chuỗi ký tự đơn giản là làm cho vùng chuỗi ký tự dài hơn, nhưng gõ một dấu đóng sẽ cắt bớt vùng đó và biến phần còn lại của nó thành mã, tùy thuộc vào tất cả các quy tắc lexing khác.

+0

Vì vậy, tôi sẽ đoán hầu hết các trang web dựa trên (javascript) tô sáng đang sử dụng biểu thức thông thường và IDE thực tế đang lexing? –

+0

Có lẽ - mặc dù ngay cả với JS, các biên tập viên tốt sẽ có khả năng lex. Những người reg-ex, tốt, họ bị lẫn lộn ở lần. Tôi biết tôi đã nhìn thấy điều này xảy ra trong một số biên tập viên, nơi họ nghĩ rằng một trích dẫn được thoát ra thực sự là một dấu phân cách chuỗi. – levik

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