2012-04-10 14 views
8

Voglio leggere la configurazione in YAML con il codice elisp. Ha cercato ma non ha trovato il parser pronto per l'uso in elisp. Mi sono perso qualcosa di utile?Qual è il miglior parser YAML in elisp?

+0

Non conosco la risposta, ma se non ce n'è una, puoi chiamare qualche altro parser per leggere lo yaml e far emettere una rappresentazione testuale testuale che puoi leggere con 'read'. – Tom

+0

Grazie! È una buona idea. Forse posso provare 'pymacs'. – Vivodo

+0

Non sono sicuro di cosa intendi: c'è una modalità yaml qui: https://github.com/yoshiki/yaml-mode - ma vuoi che un parser legga lo yaml e faccia cosa con esso? –

risposta

1

Sei mesi più tardi, sembra che la risposta sia "non esiste un parser YAML elisp solido e facilmente disponibile."

Se davvero si vuole leggere un documento in YAML elisp e trasformarlo in qualcosa che elisp può interagire con, si sta andando ad avere per mettere in alcuni lavori nodoso. Lo EmacsWiki YAML page non ha molto per te, e il canonico YAML mode ha suggerimenti sintattici, ma nessun parser vero e proprio. Fortunatamente qualcuno ha implemented a YAML-parsing web-app che prende YAML e produce JSON o Python - potresti provare a dare un'occhiata a questo e-o usarlo per controllare qualsiasi parser YAML che potresti scrivere tu stesso.

Buona fortuna.

+0

Addendum: vedere [questa risposta SO] (http://stackoverflow.com/a/2231327/244494) per alcuni codici di avvio quando si scrive il proprio parser ricorsivo-discendente in elisp. –

+2

http://edward.oconnor.cx/2006/03/json.el potrebbe anche essere utile per il confronto e le idee. Ovviamente, YAML non è JSON, ma certamente hanno alcune somiglianze. – tripleee

3

e qualche mese dopo: lo volevo, quindi ecco come si fa con l'aiuto di pitone:

(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 
) 

Si scopre l'yaml del buffer corrente in un hashmap elisp, con l'aiuto di json.el .

Avete bisogno di pyyaml ​​di python: pip install PyYaml.

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

+0

Intendo su un livello che è un hack che mi fa trasalire, ma su un altro, non posso farmi mancare di rispetto "lo strumento di cui ho bisogno non esiste, quindi lo scriverò da solo". Upvoted. –

0

Tre anni più tardi, abbiamo dynamic modules, e emacs-libyaml sembra piuttosto interessante. Usa il sistema di moduli dinamici per esporre le associazioni C di libyaml in Elisp. Mi aspetto che le prestazioni siano fantastiche, anche se non l'ho provato.

Problemi correlati