Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用pyparsing的简单演示';s缩进块递归_Python_Pyparsing - Fatal编程技术网

Python 使用pyparsing的简单演示';s缩进块递归

Python 使用pyparsing的简单演示';s缩进块递归,python,pyparsing,Python,Pyparsing,我试图在pyparsing中使用indentedBlock(这对我来说非常棒)来解析一些嵌套的缩进,但在理解API引用中的描述(或中提到的更具体的示例)时遇到了一些困难 有人能给我介绍一下如何递归使用缩进块的简明演示或解释吗,或者在这里提供一个?例如,我们将如何转换像…这样的亚美尔语 - a1_el - b1_el x1_attr: 1 x2_attr: 2 - b2_el - c1_el # I am a comment

我试图在pyparsing中使用
indentedBlock
(这对我来说非常棒)来解析一些嵌套的缩进,但在理解API引用中的描述(或中提到的更具体的示例)时遇到了一些困难

有人能给我介绍一下如何递归使用
缩进块
的简明演示或解释吗,或者在这里提供一个?例如,我们将如何转换像…这样的亚美尔语

- a1_el
    - b1_el
        x1_attr: 1
        x2_attr: 2
    - b2_el
        - c1_el # I am a comment
    - b3_el
        x1_attr: 1 
…转换为一些XML表示形式,例如

<a1_el>
    <b1_el x1_attr="1" x2_attr="2"/>
    <b2_el>
        <c1_el/><!-- I am a comment -->
    </b2_el>
    <b3_el x1_attr="1"/>
</a1_el>


…是否具有缩进块?(另外:在什么实际情况下,
indentStack
参数需要不同的OTPION?)。非常感谢

这有点陈旧,但这里有一个部分答案:

from pyparsing import *

COMMENT   = pythonStyleComment
OPCOMMENT = Optional(COMMENT)
IDENT     = Word(alphas, alphanums + '_')

attribute    = IDENT + Suppress(':') + Word(alphanums) + OPCOMMENT
element      = Suppress('-') + IDENT + OPCOMMENT
elementBlock = Forward()
blockContent = attribute|elementBlock|COMMENT
elementBlock << element + Optional(indentedBlock(blockContent, [1]))
从pyparsing导入*
COMMENT=pythonStyleComment
OPCOMMENT=可选(注释)
IDENT=Word(字母,字母+字母)
attribute=IDENT+Suppress(“:”)+Word(alphanums)+OPCOMMENT
元素=抑制('-')+IDENT+OPCOMMENT
elementBlock=Forward()
blockContent=属性|元素块|注释

elementBlock这似乎很好地去除了缩进,并且只需要很少的代码!(顺便说一句:第二个
indentedBlock()
-参数的默认值是否应该不被定义为
[1]
?我们不希望在大多数情况下只要求
[1]
?为什么人们在调用
indentedBlock()
之前经常明确定义
indentstack
变量?),将
indentstack
作为一个单独的变量,可以在库解析代码时跟踪它。此外,你可以说这是“更好的程序”。但是我知道堆栈将如何在内部使用(查看了代码),所以我决定这里不需要变量,我直接将其作为参数传递。你可以随心所欲:)Pyparsing不再托管在wikispaces.com上。去