2011-10-23 23 views
5

Tôi nghe nói rằng biểu thức S có thể được biểu diễn dưới dạng cây; ví dụ: (f 1 (g 2) 3)Có một "Trình chỉnh sửa cấu trúc cây" cho Lisp không?

 . 
. . . . 
f 1 .  3   [first level] 
     g 2    [second level] 

Có trình chỉnh sửa nào (tốt nhất là miễn phí) để chỉnh sửa loại cấu trúc này trực tiếp không? Đây sẽ

  1. Tránh "tất cả những dấu ngoặc đơn"
  2. triển lãm sự sang trọng Tôi đã hiểu biết về lisp.

Trả lời

2

Theo như tôi biết (và như bài viết trên Wikipedia xác nhận), structure editing đã được sử dụng trong Interlisp-D. Tôi không biết về bất kỳ trình soạn thảo cấu trúc nào cho Common Lisp được sử dụng rộng rãi trong ngày hôm nay, nhưng có lẽ có điều gì đó mà tôi không biết. Có một số example trên trang web của Pascal J. Bourguignon mà bạn có thể muốn chơi cùng. (Tôi đã không xem xét kỹ hơn) Tôi đã làm, tuy nhiên sử dụng một cái gì đó tương tự cho XML trong Oxygen một số thời gian trước đây.

(Ngoài ra, tôi không nghĩ rằng lý do Interlisp sử dụng này có bất cứ điều gì để làm với cách loại bỏ các dấu ngoặc đơn, và có thể có vấn đề với ý kiến, ví dụ.)

+0

Tôi đoán chương trình Pascal có thể hữu ích, nếu tôi có thể tìm ra cách để tích hợp nó vào emacs. Nó không hoàn toàn là trình soạn thảo cây mà tôi đang tìm kiếm, vì vậy tôi nghĩ tôi nên giữ câu hỏi mở ngay bây giờ. Tôi thú nhận tôi không thực sự hiểu Interlisp ngay cả sau khi một số googling; nó là một hệ điều hành cho máy Lisp?(Thật không may, điều đó có lẽ sẽ không giúp ích gì nhiều! :) – scarlet

+0

Có, Interlisp chạy trên máy Lisp và là một trong những hệ thống được sử dụng trước Common Lisp. Tuy nhiên, Lisp thường bị ảnh hưởng mạnh mẽ hơn bởi Maclisp, và việc sử dụng các trình soạn thảo cấu trúc không bắt kịp. Ngay cả khi điều này không "giúp đỡ rất nhiều", nó có thể tốt để biết rằng chỉnh sửa cấu trúc không phải là một ý tưởng mới, nhưng đã được sử dụng một vài thập kỷ trước đây. (Tôi nhớ các cuộc thảo luận về điều này trên cll, vì vậy bạn có thể muốn tìm kiếm chủ đề này trong các nhóm google.) – danlei

+0

Nếu bạn thực sự muốn viết một chế độ Emacs cho một cái gì đó như thế này, có lẽ bạn cũng có thể xem xét một chế độ chỉ thay đổi cách mã được trình bày và chỉnh sửa, thay vì thay đổi sexp trực tiếp, như mã của Pascal. (Đó là cách tiếp cận của các công cụ XML như Oxgen) Sau đó, bạn có thể tránh các vấn đề có thể xảy ra với các nhận xét trong mã và sẽ dễ dàng trao đổi mã với những người khác, những người không sử dụng tính năng chỉnh sửa cấu trúc. – danlei

5

S-biểu thức đại diện cho một cây , Không phải hướng ngược lại. ví dụ của bạn, định dạng với dòng mới:

(f 1 
    (g 2) 
    3) 

Nó đại diện cho khuyết điểm cây sau:

+---+---+ +---+---+ +---+---+ +---+---+ 
--->| f | ----->| 1 | ----->| ¦ | ----->| 3 |NIL| 
    +---+---+ +---+---+ + ¦ +---+ +---+---+ 
           v 
          +---+---+ +---+---+ 
          | g | ----->| 2 |NIL| 
          +---+---+ +---+---+ 

Đây là cùng một lúc cây cú pháp trừu tượng thực tế của chương trình — cái gì mà trình biên dịch cho các gia đình ngôn ngữ khác phải xây dựng từ các quy tắc phức tạp.

Để chỉnh sửa, các dấu ngoặc đơn là tất cả bạn và trình chỉnh sửa của bạn cần hoạt động ở cấp độ cây. Trong Emacs nó là paredit-mode, nhưng tôi đoán rằng các trình soạn thảo khác có các tiện ích hoặc plugin tương tự.

+0

Tôi nhận được cách các dấu ngoặc đơn đại diện cho cấu trúc cây; Tôi đã tự hỏi nếu có một trình soạn thảo hiển thị cây như một cây sơ đồ để người dùng chỉnh sửa. (Tôi không chắc rằng các con trỏ sẽ thân thiện với người dùng cho một điều như vậy, nhưng tôi đoán nó có thể hoạt động.) – scarlet

2

Chế độ ParEdit cho emac về cơ bản là trình chỉnh sửa có cấu trúc.

Ngoài ra, trong their paper, Gomolka & Humm đề cập đến nguyên mẫu nghiên cứu mở rộng CUSP cho Eclipse, nhưng tôi không biết triển khai có thể tải xuống.

+0

Đó là sự tức giận. Cung cấp mô tả đầy đủ về trình chỉnh sửa cấu trúc, bao gồm các bức ảnh, các dòng mã, kết quả khảo sát, sau đó không có gợi ý về nơi nhận được nó. (Thành thật mà nói tôi có lẽ sẽ không chuyển từ emacs ngày nay, nhưng chỉ giống nhau.) Cảm ơn bạn đã cập nhật. – scarlet

2

Gingko as a Tree Structure editor for lisp

Chúng tôi đang làm việc trên cho phép bạn write Lisp with Gingko (một cây biên tập cấu trúc nói chung).

Việc chuyển đổi từ cây thành nguồn là tầm thường, vì vậy thực sự điều duy nhất còn thiếu là sâu hơn (Gingko hiện bị giới hạn ở 3 cấp độ).

[này vẫn còn rất thực nghiệm, vì vậy tôi rất muốn phản hồi & đầu vào từ các chuyên gia Lisp.]

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