PyParsing: что делает Combine ()? - PullRequest
5 голосов
/ 31 мая 2010

В чем разница между:

foo = TOKEN1 + TOKEN2

и

foo = Combine(TOKEN1 + TOKEN2)

Спасибо.

ОБНОВЛЕНИЕ : Исходя из моих экспериментов, кажется, что Combine() для терминалов, где вы пытаетесь построить выражение для сравнения, тогда как обычный + для нетерминалов. Но я не уверен.

1 Ответ

14 голосов
/ 31 мая 2010

Комбинат имеет 2 эффекта:

  • объединяет все токены в одну строку

  • требуется, чтобы все соответствующие токены были смежными без пробелов

Если вы создаете выражение типа

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

Затем realnum.parseString("3.14") вернет список из 3 токенов: начальный «3», «.» И конечный «14». Но если вы оберните это в Combine, как в:

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

затем realnum.parseString("3.14") вернет '3.14' (который затем можно преобразовать в число с плавающей запятой, используя действие синтаксического анализа). А так как Combine подавляет пропуски по умолчанию, пропускаемые между pyparsing между токенами, вы случайно не найдете «3.14» в «Ответе 3. 14 - следующий ответ».

...