2012-04-10 12 views
8

Quiero leer config en YAML con código elisp. Se buscó pero no se encontró el analizador listo para usar en elisp. ¿Extrañé algo útil?¿Cuál es el mejor analizador de YAML en elisp?

+0

No conozco la respuesta, pero si no la hay, puede llamar a otro analizador para leer el yaml y hacer que muestre una representación de lisp textual que puede leer con 'read'. – Tom

+0

¡Gracias! Es una buena idea. Tal vez puedo probar 'pymacs'. – Vivodo

+0

No estoy seguro de lo que quiere decir, hay un modo yaml aquí: https://github.com/yoshiki/yaml-mode, pero ¿quiere un analizador para leer el yaml y hacer qué con él? –

Respuesta

1

Seis meses después, parece que la respuesta es "no existe un analizador sólido de YALIS elisp fácilmente disponible".

Si realmente quieres leer un documento YAML en elisp y convertirlo en algo con lo que elisp puede interactuar, vas a tener que hacer un trabajo complicado. El EmacsWiki YAML page no tiene mucho para usted, y el canónico YAML mode tiene sugerencias de sintaxis, pero no un analizador real. Afortunadamente, alguien tiene implemented a YAML-parsing web-app que toma YAML y emite JSON o Python, podría intentar echarle un vistazo bajo ese capirote, o usarlo para verificar cualquier analizador YAML que pueda escribir usted mismo.

Buena suerte.

+0

Adición: vea [esta respuesta SO] (http://stackoverflow.com/a/2231327/244494) para obtener algún código de inicio al escribir el propio analizador de descenso recursivo en elisp. –

+2

http://edward.oconnor.cx/2006/03/json.el también puede ser útil para comparar e ideas. Obviamente, YAML no es JSON, pero ciertamente tienen algunas similitudes. – tripleee

3

y algunos meses más tarde: yo quería, así que aquí está cómo hacerlo con la ayuda de pitón:

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

Convierte el yaml del búfer en un HashMap elisp, con la ayuda de json.el .

Necesita Pyyaml ​​de Python: pip install PyYaml.

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

+0

Quiero decir en un nivel que es un truco que me hace dar un respingo, pero en otro, no puedo faltarle el respeto "la herramienta que necesito no existe, así que la escribiré yo mismo". Upvoted. –

0

Tres años más tarde, que tienen dynamic modules y emacs-libyaml parece bastante interesante. Utiliza el sistema de módulo dinámico para exponer los enlaces C de libyaml en Elisp. Esperaría que el rendimiento fuera fantástico, aunque no lo he probado.

Cuestiones relacionadas