Có tài liệu SMIE nào rõ ràng không?


18

Tôi đã dành nhiều, nhiều giờ để cố gắng làm cho bất kỳ loại quy tắc / ngữ pháp thụt lề SMIE nào hoạt động.

Có bất kỳ ví dụ nào về chế độ dựa trên SMIE nhỏ, đồ chơi hoặc bộ xương với tài liệu về cách nó thực sự hoạt động, hoặc bất kỳ cuộc thảo luận nào về cách sử dụng nó không? Một cái gì đó, giả sử, định nghĩa một biểu thức là một chuỗi các mã thông báo kết thúc bằng dấu chấm phẩy và một khối là một số biểu thức giữa dấu ngoặc và không có gì khác. Thực sự, thực sự đơn giản?

Câu hỏi cụ thể: khi sử dụng smie-config-show-indent 90% thời gian tôi nhận được phản hồi ': list-intro "" -> nil'. Danh sách giới thiệu dựa trên định nghĩa của biểu thức hoặc danh sách biểu thức trên là gì? Tại sao nó nói không và vẫn thụt dòng sau đây? Làm thế nào để tôi thay đổi nó?

Thứ hai: có bất kỳ mối quan hệ nào giữa ngữ pháp và quy tắc smie của tôi không? Tôi cho rằng có bởi vì cả hai đều được chuyển vào thiết lập smie, nhưng tôi không thể tìm thấy bất kỳ cách nói nào, "khi bạn thấy một" khối ", thụt vào nội dung", ví dụ, dựa trên một ngữ pháp xác định một khối .

Thứ ba, SMIE dường như có rất nhiều quy tắc "nướng trong". Chỉ cần khởi động nó sẽ xử lý chung các dấu ngoặc, dấu ngoặc và dấu ngoặc đơn chẳng hạn. Có cách nào để xem các quy tắc này hoặc sửa đổi chúng? Hoặc là bảng cú pháp đang làm tất cả điều này và SMIE hoàn toàn không làm gì cả (điều mà tôi bắt đầu nghi ngờ).

Cuối cùng, khi cố gắng gỡ lỗi SMIE, tôi cố gắng thực hiện "chỉnh sửa, bộ đệm chế độ eval, đi đến mã ví dụ trong bộ đệm khác, chu trình MX <my mode>, test" nhưng dường như mỗi chuyến đi xung quanh không làm rõ các quy tắc từ chu kỳ trước. Làm thế nào tôi có thể chắc chắn rằng chế độ xác định xuất phát bắt đầu từ một bảng sạch? Tôi có (kill-all-local-biến) trong đó nhưng dường như không đủ và cuối cùng tôi phải đóng emacs.

Tôi không đăng bất kỳ ví dụ nào về những gì tôi có bởi vì tôi không có gì thậm chí còn hoạt động mơ hồ, ngoài việc làm nổi bật (sử dụng phông chữ khóa mặc định, vì vậy nó thậm chí không thực sự SMIE tôi đoán). Tôi cần một số bước thực sự của em bé.


1
Thử hỏi tác giả SMIE cho tài liệu?
vẽ

4
@drew Anh ấy đã công khai tuyên bố rằng anh ấy không phải là một học giả giỏi (và đã đọc tài liệu của anh ấy tôi không thể tranh luận), vì vậy có vẻ như vô nghĩa.
Nagora

1
Vâng tôi biết. Ông thậm chí đã nói rằng mã nên đủ như doc. Ồ, có phải tôi đã quên đặt " ;-) " sau đề nghị của mình không? ;-)
vẽ

1
Tôi đã xem xét điều này một thời gian trước và nhận thấy rằng lisp/progmodes/sh-script.eldường như sử dụng smie.elkhá rộng rãi. Họ dường như cũng ghi nhận việc sử dụng nó vì vậy có lẽ đó là một ví dụ tốt hơn?
Xaldew 15/03/2016

2
Chế độ SML và chế độ Modula2 đều sử dụng SMIE. IIRC SMIE được trích xuất từ ​​chế độ SML ban đầu. Tôi phải thừa nhận, tôi cũng đã thấy điều này đặc biệt khó khăn.
ocodo

Câu trả lời:



1

Bạn có thể bắt đầu với một cái gì đó như

(defconst foo-smie-grammar
    (smie-prec2->grammar
     (smie-bnf->prec2
      '((exp ("begin" insts "end"))
        (insts (exp) (insts ";" insts))))))

  ...
  (smie-setup foo-smie-grammar #'ignore)
  ...
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.