假设我正在解析以下行:
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?
答案 0 :(得分:5)
你已经在思考解析器了,因为你明白OneOrMore(Word(alphas))
继续前进,甚至读“跳”这个词。现在转过来,编写解析器,按照你的想法做事。
对于每个“跳跃”的单词,你怎么知道应该将它添加到主要的单词集中?你知道每个单词,因为它不是“跳跃”这个词。 Pyparsing不会自动执行此前瞻,但您可以使用NotAny(可以使用'〜'运算符缩写)自行完成:
JUMPS = Literal("jumps")
some_words = OneOrMore(~JUMPS + Word(alphas))
现在在匹配另一个单词之前,some_words首先验证该单词不是“跳跃”。