Что является различием между:
foo = TOKEN1 + TOKEN2
и
foo = Combine(TOKEN1 + TOKEN2)
Спасибо.
ОБНОВЛЕНИЕ: На основе моего экспериментирования это походит Combine()
для терминалов, где Вы пытаетесь создать выражение для соответствия на, тогда как плоскость +
для нетерминалов. Но я не уверен.
Combine имеет 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' (которое затем можно преобразовать в float с помощью действия разбора). А поскольку Combine подавляет стандартный пропуск пробелов между лексемами в pyparsing, вы не найдете случайно "3.14" в "Ответ - 3. 14 - следующий ответ."