các tùy chọn để viết một ngữ pháp ngôn ngữ cho một chế độ chính mới là gì?


7

Tôi đang viết một chế độ chính cho một ngôn ngữ lập trình có ngữ pháp được xác định rõ: nó có BNF, được chính thức hóa trong một số tệp hạnh phúc .

Tôi đặc biệt không muốn triển khai lại BNF như một loạt các lần quét regex tiến / lùi (như nhiều chế độ chính làm), mặc dù tôi sẽ không phản đối việc dịch nó bằng tay hoặc tự động.

Tôi biết về SMIE , có bất kỳ tùy chọn nào khác có sẵn cho tôi trong Emacs lisp cho phép tôi xác định ngữ pháp của ngôn ngữ và có càng nhiều tự động được tạo ra càng tốt, ví dụ như khuôn mặt, lệnh sexp, dân số imothy.

Tôi quan tâm chủ yếu đến sự đơn giản và chính xác của chế độ, hơn là hiệu năng thô của nó, nhưng tôi chắc chắn muốn có một ý tưởng sơ bộ về sự đánh đổi là gì (rõ ràng nếu hiệu suất quá thấp thì không thể sử dụng được và do đó không thích hợp để sử dụng).

Điều này có phần liên quan đến việc Viết Chế độ chính mặc dù đã được nâng cao hơn nữa, vì tôi đã nhận thức được mọi thứ trong "Chế độ chính" trong hướng dẫn sử dụng Emacs Lisp.

CẬP NHẬT : Tôi đã nghiên cứu và nói chuyện với tác giả của Semantic và nó không thể tạo ra font-locks, nó nhằm mục đích cung cấp các công cụ cấp cao hơn và đó không phải là thứ tôi đang tìm kiếm.


1
Tôi sẽ đi CEDET / Wisent, nhưng tôi đã không tự mình làm điều đó. Xem cedet.sourceforge.net/addlang.shtml
Stefan Kamphausen

CEDET trông khá khó hiểu đối với tôi, nhưng trình phân tích cú pháp nghe có vẻ hay.
fommil

1
Có vẻ như ít nhất là phần phân tích cú pháp của CEDET giờ là một phần của Emacs. Xem gnu.org/software/emacs/manual/html_node/semantic/index.html#Top
Stefan Kamphausen

2
CEDET là một phần của Emacs, nhưng điều đó không có nghĩa là nó được duy trì, xem Bug # 23792 .
npostavs

Bây giờ tôi đã đọc (các) bìa hướng dẫn ngữ nghĩa / thông minh để che và tôi không nghĩ rằng nó giúp tôi tránh việc viết một công cụ khóa phông chữ hoặc thụt lề. Các lexer vẫn phụ thuộc vào các bảng cú pháp. Nó có rất nhiều tính năng cấp cao mà tôi không quan tâm (tôi không tin rằng chúng sẽ hoạt động hoặc mở rộng thỏa đáng cho ngôn ngữ của tôi), nhưng dường như có một khoảng cách trong nội dung cấp thấp. Tui bỏ lỡ điều gì vậy? @StefanKamphausen
fommil 27/10/18

Câu trả lời:


4

Bên cạnh gói SMIE (thực sự có thể sử dụng ngữ pháp BNF, nhưng thường sẽ không hoạt động tốt với ngữ pháp BNF được thiết kế cho trình phân tích cú pháp kiểu LALR thông thường), có wisigói có sẵn từ GNU ELPA ( http: //elpa.gnu .org / gói / wisi.html ):

Gói wisi cung cấp các tiện ích để sử dụng các trình phân tích cú pháp LALR tổng quát để thực hiện thụt lề, phông chữ và điều hướng. Xem chế độ ada để biết ví dụ về việc sử dụng nó.

Tôi không có kinh nghiệm với nó và không biết bất kỳ gói nào ngoài chế độ ada sử dụng nó, nhưng chế độ ada khá đặc trưng, ​​vì vậy, đáng để xem qua. Ngoài ra, tôi hy vọng tác giả của nó sẽ rất vui khi được giúp bạn sử dụng nó.


Điều này có vẻ khá tuyệt, mặc dù nó rất gắn liền ada-modevà tôi không chắc nó có thể khái quát như thế nào. Một vấn đề tôi lo ngại là trình phân tích cú pháp cơ bản, thông minh, từ Semantic, thường thực hiện phân tích cú pháp tệp đầy đủ thay vì cục bộ hóa và không đặc biệt mạnh đối với các lỗi cú pháp, do đó, nó có thể đưa ra một hồi quy hoàn hảo lớn. Tôi đoán người ta sẽ cần một bằng chứng về khái niệm để xem, vì không có câu trả lời chắc chắn.
fommil

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.