2010-05-30 4 views
5

В чем разница между:PyParsing: Что делает Combine()?

foo = TOKEN1 + TOKEN2 

и

foo = Combine(TOKEN1 + TOKEN2) 

Спасибо.

UPDATE: На основе моих экспериментов, похоже, Combine() для терминалов, где вы пытаетесь построить выражение в соответствии с, в то время как обычная + для нетерминалов. Но я не уверен.

ответ

13

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

  • он присоединяет все маркеры в одну строку

  • требует совпадающие маркеры на все примыкать без разделяющего пробела

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

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

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

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

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

+0

+1, довольно авторитетный ответ (не все могут осознать, что Павел является автором «пипарации», поэтому я в основном указываю на это!). –

+0

Спасибо, Алекс. И @ Rosarch, добро пожаловать в пипаринг! Эти вопросы, которые вы публикуете, очень распространены для пользователей пиражей, которые впервые используются, поэтому продолжайте подключаться. Я попытался осветить некоторые из этих пунктов в онлайн-вики и документах, но я вижу, что все еще есть способы! – PaulMcG

+0

Да, я полностью отдаю себе отчет в том, что Павел является автором пипараций. Замечательно, что вы на SO, чтобы предоставить нообам, таким как я, руководство. –