Python 使用pyparsing的简单演示';s缩进块递归
我试图在pyparsing中使用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
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上。去