Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PyParsing: What does Combine() do?

What is the difference between:

foo = TOKEN1 + TOKEN2

and

foo = Combine(TOKEN1 + TOKEN2)

Thanks.

UPDATE: Based on my experimentation, it seems like Combine() is for terminals, where you're trying to build an expression to match on, whereas plain + is for non-terminals. But I'm not sure.

like image 461
Nick Heiner Avatar asked May 30 '10 21:05

Nick Heiner


1 Answers

Combine has 2 effects:

  • it concatenates all the tokens into a single string

  • it requires the matching tokens to all be adjacent with no intervening whitespace

If you create an expression like

realnum = Word(nums) + "." + Word(nums)

Then realnum.parseString("3.14") will return a list of 3 tokens: the leading '3', the '.', and the trailing '14'. But if you wrap this in Combine, as in:

realnum = Combine(Word(nums) + "." + Word(nums))

then realnum.parseString("3.14") will return '3.14' (which you could then convert to a float using a parse action). And since Combine suppresses pyparsing's default whitespace skipping between tokens, you won't accidentally find "3.14" in "The answer is 3. 14 is the next answer."

like image 191
PaulMcG Avatar answered Sep 19 '22 22:09

PaulMcG