2010-05-30 20 views
5

¿Cuál es la diferencia entre:PyParsing: ¿Qué hace Combine()?

foo = TOKEN1 + TOKEN2 

y

foo = Combine(TOKEN1 + TOKEN2) 

Gracias.

ACTUALIZACIÓN: Basado en mi experimentación, parece que es Combine() para terminales, en las que están tratando de construir una expresión para que coincida con el, mientras llanura + es para los no terminales. Pero no estoy seguro.

Respuesta

13

Combinar tiene 2 efectos:

  • concatena todas las fichas en una sola cadena

  • que requiere las fichas coincidentes a todo ser adyacentes sin espacios en blanco

Si crea una expresión como

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

Luego realnum.parseString("3.14") devolverá una lista de 3 tokens: el '3' inicial, el '.', Y el '14' posterior. Pero si usted envuelve esta en modo combinar, como en:

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

continuación realnum.parseString("3.14") volverá '3.14' (que luego se puede convertir a un flotador mediante una acción de análisis). Y dado que Combine suprime el espacio en blanco predeterminado de pyparsing omitiendo los tokens, no encontrará accidentalmente "3.14" en "La respuesta es 3. 14 es la siguiente respuesta".

+0

+1, una respuesta bastante autorizada (no todos pueden darse cuenta de que Paul es el autor de 'pyparsing', ¡por lo que principalmente lo señalo! -). –

+0

Gracias, Alex. Y @Rosarch, bienvenido a pyparsing! Estas preguntas que está publicando son muy comunes para los usuarios principiantes de pyparsing, así que continúe desconectándose. Intenté cubrir algunos de estos puntos en el wiki y los documentos en línea, pero puedo ver que todavía hay mucho por hacer. – PaulMcG

+0

Sí, soy plenamente consciente de que Paul es el autor de pyparsing. Es genial que estés en SO para proporcionar noobs como yo con orientación. –