2012-04-04 51 views
5

我有類似於YAML的數據,需要使用Pyparsing爲其創建語法。像Python,YAML的數據範圍由空白如何使用Pyparsing爲以下數據創建語法

數據定義:

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 

解析在上述過程之後,它應該與此類似輸出的東西:

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

[編輯] 數據與YAML類似,但不完全相同。所以YAML Python解析器不能解析它。我留下了一些細節,使示例數據更簡單

+3

是的,這是太寬沒有附加信息和代碼的問題。 – 2012-04-05 00:50:55

+0

lepl有一個幾乎是這樣的例子 - http://www.acooke.org/lepl/offside.html#example - 但pyparsing有一個*更大的社區支持,所以我不會建議改變,除非有pyparsing無法處理縮進。 – 2012-04-05 03:10:08

+1

空白敏感文本是pyparsing的弱點。 pyparsing wiki上的這個例子(http://pyparsing.wikispaces.com/file/view/indentedGrammarExample.py)顯示了一種方式,但它仍然是一個尷尬的去處。 – PaulMcG 2012-04-06 05:03:33

回答

3

而不是Pyparsing,你可以使用PyYAML這個。

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

輸出:

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

對不起,我應該提到的數據與YAML類似,但不完全相同。所以YAML Python解析器不能解析它。我留下了一些細節以使示例數據更簡單。 – Cory 2012-04-09 16:35:02

+3

@cory - 好的,但你必須告訴我們有什麼區別,否則就不可能回答這個問題!需要更好的數據>輸出示例;) – fraxel 2012-04-09 16:39:13

相關問題