2012-04-04 12 views
5

Tengo datos similares a YAML y necesito crear una gramática para ello utilizando Pyparsing. Como Python, el alcance de datos de Yaml está definida por el espacio en blancoCómo crear una gramática para los siguientes datos usando Pyparsing

datos:

object : object_name 
comment : this object is created first 
methods: 
    method_name: 
    input: 
     arg1: arg_type 
     arg2: arg2_type 
    output: 

    methond2_name: 
    input: 
    output: 
     arg1 : arg_type 

Después de analizar lo anterior, si algo resultado similar al siguiente:

{'comment': 'this object is created first', 
'object': 'object_name', 
'methods': {'method_name': {'input': {'arg1': 'arg_type', 'arg2': 'arg2_type'}, 
'output': None}, 'methond2_name': {'input': None, 'output': {'arg1': 'arg_type'}}}} 

[EDIT] Los datos es similar a YAML pero no exactamente lo mismo. Entonces, el analizador de YAML Python no puede analizarlo. Me fui de algunos de los detalles para hacer que los datos de ejemplo sean más simples

+3

Sí, esta es una pregunta demasiado amplia y sin información y código adicional. –

+0

lepl tiene un ejemplo que es casi este - http://www.acooke.org/lepl/offside.html#example - pero pyparsing tiene una * mucho * comunidad más grande para soporte, así que no recomendaría cambiar a menos que haya no hay forma de que pyparsing maneje sangrías. –

+1

El texto sensible al espacio en blanco es un punto débil para pyparsing. Este ejemplo (http://pyparsing.wikispaces.com/file/view/indentedGrammarExample.py) en la wiki de pyparsing muestra una forma, pero sigue siendo incómodo. – PaulMcG

Respuesta

3

En lugar de Pyparsing, podría usar PyYAML para esto.

import yaml 
f = open('yyy.yaml', 'r') 
print yaml.load(f) 

de salida:

{'comment': 'this object is created first', 
'object': 'object_name', 
'methods': {'method_name': {'input': {'arg1': 'arg_type', 'arg2': 'arg2_type'}, 
'output': None}, 'methond2_name': {'input': None, 'output': {'arg1': 'arg_type'}}}} 
+0

Lo siento, debería haber mencionado que los datos son similares a YAML, pero no exactamente lo mismo. Entonces, el analizador de YAML Python no puede analizarlo. Me fui de algunos de los detalles para simplificar los datos de ejemplo. – Cory

+3

@cory - vale, pero tienes que decirnos cuáles son las diferencias, de lo contrario, ¡es imposible responder a la pregunta! Se necesita un mejor ejemplo de datos> salida;) – fraxel

Cuestiones relacionadas