3

我正在尝试使用 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']]
4

1 回答 1

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']]
于 2012-07-20T21:50:17.567 回答