Pyparsing:如何将令牌存储到以下列表/组中?

时间:2012-07-20 21:33:00

标签: python pyparsing

我正在尝试编写一个带有pyparsing的解析器。这是我的语法定义的一个信息:

import pyparsing as pp

Modifier = pp.Word(pp.alphas)
Name = pp.Literal("foobar")
Sentence = pp.Optional(Modifier) + Name + pp.Group(pp.OneOrMore(Modifier))

以下是解析示例字符串时发生的情况:

>>> print Sentence.parseString("testA FOOBAR testB testC")
['testA', 'FOOBAR', ['testB', 'testC']]

有没有办法修改上面的语法规则,以便将第一个可选修饰符推送到下一组?

示例:

>>> print MagicSentence.parseString("test A FOOBAR testB testC")
['FOOBAR', ['testA', 'testB', 'testC']]

1 个答案:

答案 0 :(得分:2)

最简单的方法就是像你一样解析它,但是为Sentence添加一个解析动作来重新排列元素。像这样:

>>> def moveLeadingItem(tokens):
...     first = tokens[0]
...     del tokens[0]
...     tokens[-1].insert(0,first)
... 
>>> Sentence.setParseAction(moveLeadingItem)
>>> print Sentence.parseString("testA foobar testB testC")
['foobar', ['testA', 'testB', 'testC']]