2012-04-10 23 views
8

Tôi muốn đọc cấu hình trong YAML với mã elisp. Đã tìm kiếm nhưng không tìm thấy trình phân tích cú pháp sẵn sàng để sử dụng. Tôi đã bỏ lỡ một cái gì đó hữu ích?Trình phân tích cú pháp YAML tốt nhất trong elisp là gì?

+0

Tôi không biết câu trả lời, nhưng nếu không có bất kỳ thì bạn có thể gọi một số trình phân tích cú pháp khác để đọc yaml và có nó xuất ra một biểu diễn lisp văn bản mà bạn có thể đọc bằng 'read'. – Tom

+0

Cảm ơn! Đó là một ý tưởng hay. Có lẽ tôi có thể thử 'pymacs'. – Vivodo

+0

Tôi không chắc chắn ý của bạn là gì - có chế độ yaml ở đây: https://github.com/yoshiki/yaml-mode - nhưng bạn muốn một trình phân tích cú pháp đọc yaml và làm gì với nó? –

Trả lời

1

Sáu tháng sau, có vẻ như câu trả lời là "không có trình phân tích cú pháp YAML dễ dàng có sẵn."

Nếu bạn thực sự muốn đọc một tài liệu YAML trong elisp và biến nó thành thứ gì đó mà elisp có thể tương tác, bạn sẽ phải đưa vào một số công việc gnarly. Các EmacsWiki YAML page đã không có nhiều cho bạn, và kinh điển YAML mode có gợi ý cú pháp, nhưng không có phân tích cú pháp thực tế. May mắn thay ai đó có implemented a YAML-parsing web-app lấy YAML và xuất ra JSON hoặc Python - bạn có thể cố gắng xem xét và sử dụng nó để kiểm tra bất kỳ trình phân tích cú pháp YAML nào mà bạn có thể tự viết.

Chúc may mắn.

+0

Phụ lục: xem [câu trả lời SO này] (http://stackoverflow.com/a/2231327/244494) đối với một số mã bắt đầu khi viết trình phân tích cú pháp đệ quy gốc của một người trong elisp. –

+2

http://edward.oconnor.cx/2006/03/json.el cũng có thể hữu ích cho việc so sánh và ý tưởng. Rõ ràng, YAML không phải là JSON, nhưng chắc chắn chúng có một số điểm tương đồng. – tripleee

3

Và vài tháng sau: Tôi muốn nó, vì vậy đây là cách để làm điều đó với một số sự giúp đỡ từ python:

(defun yaml-parse() 
    "yaml to json to a hashmap of current buffer, with python. 

    There is no yaml parser in elisp. 
    You need pyYaml and some yaml datatypes like dates are not supported by json." 
    (interactive) 
    (let ((json-object-type 'hash-table)) 
    (setq myyaml (json-read-from-string (shell-command-to-string (concat "python -c 'import sys, yaml, json; json.dump(yaml.load(sys.stdin), sys.stdout, indent=4)' < " (buffer-file-name)))))) 
    ;; code here 
) 

Nó biến yaml của bộ đệm hiện tại vào một hashmap elisp, với sự giúp đỡ của json.el .

Bạn cần pyyaml ​​python: pip install PyYaml.

json.el: http://edward.oconnor.cx/2006/03/json.el

+0

Ý tôi là trên một cấp độ là một hack khiến tôi suy nghĩ, nhưng trên một cấp độ khác, tôi không thể khiến bản thân không tôn trọng "công cụ tôi cần không tồn tại, vì vậy tôi sẽ tự viết nó." Được thăng hạng. –

0

Ba năm sau, chúng tôi có dynamic modules, và emacs-libyaml trông khá thú vị. Nó sử dụng hệ thống mô-đun động để lộ các ràng buộc C của libyaml trong Elisp. Tôi hy vọng hiệu suất sẽ trở nên tuyệt vời, mặc dù tôi chưa thử nghiệm nó.

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