我正在尝试编写一个带有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']]
答案 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']]