4

假设我正在解析以下行:

The quick brown fox jumps over the lazy dog

我想将其解析为:

Words('The quick brown fox') + Literal('jumps') + Words('over the lazy dog')

我目前的 pyparsing 定义是:

some_words = OneOrMore(Word(alphas))
jumps      = Literal('jumps')
sentence   = some_words + jumps + some_words

发生的事情是some_words吞噬了 ' jumps',我得到了一个解析错误。如何使 pyparsing lex 将跳转作为文字标记?

4

1 回答 1

5

你已经像解析器一样思考了,因为你知道它OneOrMore(Word(alphas))一直在思考,甚至​​阅读“跳跃”这个词。现在把它转过来,编写解析器以按照你的想法做事。

对于每个“跳跃”的单词,你怎么知道它应该被添加到前导单词集中?你知道每个单词,因为它不是“跳跃”这个词。Pyparsing 不会自动提前执行此操作,但您可以使用 NotAny 自己完成(可以使用 '~' 运算符缩写):

JUMPS = Literal("jumps")
some_words = OneOrMore(~JUMPS + Word(alphas))

现在在匹配另一个词之前, some_words 首先验证该词不是“跳跃”。

于 2011-08-13T19:30:20.113 回答