Получить длину совпадения в парсеках

parse pattern "(some_input)" input Parsec возвращает проанализированные данные (как я указал в pattern.

Как узнать, сколько input он израсходовал (шаблон не привязан к eof)? Я не хочу добавлять отслеживание длины через все внутренние компоненты pattern (если отбросить некоторые части ввода).


person Vi.    schedule 22.07.2011    source источник
comment
Вам нужно будет использовать getInput перед синтаксическим анализом, чтобы получить входной поток, и использовать length, чтобы получить длину входного потока. После синтаксического анализа сравните начальную длину с оставшейся длиной ввода.   -  person stephen tetley    schedule 22.07.2011
comment
длина (getInput (сокет hGetContents)) => Бесконечность?   -  person Vi.    schedule 22.07.2011
comment
Я хочу проанализировать заголовок и определить, где появляется тело.   -  person Vi.    schedule 22.07.2011
comment
@stephen tetley, getInput полезен в моем случае, но не решает задачу. Рассмотрим бесконечный ввод. Длина ввода как до, так и после синтаксического анализа равна бесконечности.   -  person Vi.    schedule 22.07.2011
comment
Привет, Ви - получение потребленной длины - это своеобразный вариант использования, с которым Parsec, естественно, не справляется. Возможно, вам захочется посмотреть, поддерживают ли его другие библиотеки комбинаторов парсеров, или, в крайнем случае, вам, возможно, придется написать свою собственную библиотеку комбинаторов парсеров.   -  person stephen tetley    schedule 22.07.2011
comment
ОК, рассматривая это как ответ: 1. Это невозможно в Parsec, 2. Если заголовок и тело, используйте getInput, 3. Можно сделать в других парсерах.   -  person Vi.    schedule 22.07.2011


Ответы (1)


  1. С Парсеком нелегко;
  2. Если необходимо пропустить заголовок, вы можете получить остальную часть ввода, используя getInput;
  3. Возможно, это могут сделать другие библиотеки парсеров.

(ответ основан на комментариях к вопросу)

person Vi.    schedule 22.07.2011