2010-05-30 3 views
5

Was ist der Unterschied zwischen ist:PyParsing: Was macht Combine()?

foo = TOKEN1 + TOKEN2 

und

foo = Combine(TOKEN1 + TOKEN2) 

Dank.

UPDATE: Basierend auf meinen Experimenten scheint es, wie Combine() für Terminals ist, wo Sie versuchen, einen Ausdruck zu bauen anzupassen, während Ebene + für Nicht-Terminals ist. Aber ich bin mir nicht sicher.

Antwort

13

Kombinieren hat 2 Wirkungen:

  • es verkettet alle Tokens in einem einzelnen String

  • es die passenden Token alle erfordert ohne dazwischen Leerzeichen

angrenzen Wenn Sie einen Ausdruck wie

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

Dann realnum.parseString("3.14") wird eine Liste von 3 Tokens zurückgeben: die führende '3', die '.', Und die abschließende '14'. Aber wenn Sie diese in Komb wickeln, wie in:

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

dann realnum.parseString("3.14") kehrt ‚3.14‘ (die Sie könnten dann mit einem Schwimmer konvertieren einen Parse Aktion verwendet wird). Und da Combine das Standard-Whitespace-Skipping zwischen den Token unterdrückt, werden Sie nicht zufällig "3.14" in "Die Antwort ist 3. 14 ist die nächste Antwort" finden.

+0

+1, eine ziemlich autoritative Antwort (nicht alle können erkennen, dass Paul der Autor von 'pyparsing' ist, also deute ich meistens darauf hin! -). –

+0

Danke, Alex. Und @Rosarch, willkommen zum pyparsing! Diese Fragen, die du postest, sind sehr häufig bei erstmaligen Pypar-Usern. Ich habe versucht, einige dieser Punkte im Online-Wiki und in der Dokumentation zu behandeln, aber ich sehe, dass es noch einen Weg zu gehen gibt! – PaulMcG

+0

Ja, ich bin mir vollkommen bewusst, dass Paul der Autor des Pyapsings ist. Es ist großartig, dass Sie auf SO sind, um Noobs wie mich mit Anleitung zu versorgen. –