Ale*_*lex 4 python parsing pyparsing
假设我正在解析以下行:
The quick brown fox jumps over the lazy dog
Run Code Online (Sandbox Code Playgroud)
我想把它解析为:
Words('The quick brown fox') + Literal('jumps') + Words('over the lazy dog')
Run Code Online (Sandbox Code Playgroud)
我目前的pyparsing定义是:
some_words = OneOrMore(Word(alphas))
jumps = Literal('jumps')
sentence = some_words + jumps + some_words
Run Code Online (Sandbox Code Playgroud)
发生了什么事情some_words吞噬了' jumps',我得到一个解析错误.如何将跳跃作为文字标记进行pyparsing lex?
你已经在思考解析器了,因为你明白它OneOrMore(Word(alphas))会继续前进,甚至读到"跳跃"这个词.现在转过来,编写解析器,按照你的想法做事.
对于每个"跳跃"的单词,你怎么知道它应该被添加到领先的单词集中?你知道每个单词,因为它不是"跳跃"这个词.Pyparsing不会自动执行此预测,但您可以使用NotAny(可以使用'〜'运算符缩写)自行执行此操作:
JUMPS = Literal("jumps")
some_words = OneOrMore(~JUMPS + Word(alphas))
Run Code Online (Sandbox Code Playgroud)
在匹配另一个单词之前,some_words首先验证该单词不是"跳跃".