2012-04-04 13 views
5

Ho dati simili a YAML e ho bisogno di creare una grammatica usando Pyparsing. Come Python, la portata dei dati di Yaml è definito dalla spaziCome creare una grammatica per i seguenti dati usando Pyparsing

dati:

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 

dopo l'analisi di cui sopra, si deve qualcosa output simile al seguente:

{'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] I dati è simile a YAML ma non esattamente lo stesso. Quindi il parser Python YAML non è in grado di analizzarlo. Ho lasciato alcuni dettagli per rendere più semplici i dati di esempio

+3

Sì, questo è troppo ampia una domanda, senza ulteriori informazioni e il codice. –

+0

lepl ha un esempio che è quasi questo - http://www.acooke.org/lepl/offside.html#example - ma il pyparsing ha una comunità * molto * più grande per il supporto, quindi non suggerirei di cambiare a meno che non ci sia nessun modo per fare da pypars per gestire i rientri. –

+1

Il testo sensibile agli spazi bianchi è un punto debole per il pyparsing. Questo esempio (http://pyparsing.wikispaces.com/file/view/indentedGrammarExample.py) sul wiki di pyparsing mostra un modo, ma è comunque un andare goffo. – PaulMcG

risposta

3

Al posto di Pyparsing è possibile utilizzare PyYAML per questo.

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

uscita:

{'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

Mi dispiace che avrei dovuto dire che i dati sono simili a YAML ma non esattamente uguali. Quindi il parser Python YAML non è in grado di analizzarlo. Ho lasciato alcuni dettagli per semplificare i dati di esempio. – Cory

+3

@cory - ok, ma devi dirci quali sono le differenze, altrimenti è impossibile rispondere alla domanda! È necessario un esempio di output> dati migliore;) – fraxel

Problemi correlati