Использование грамматики ParseKit для разбора меток времени

У меня довольно простой вопрос о ParseKit и разборе временных меток... как мне заставить форсировать символическую природу точки / периода.

Например, если я пытаюсь разобрать 2008-01-25Я мог бы использовать что-то вроде date = /\d{4}/ '-' /\d{2}/ '-' /\d{2}/, На самом деле, есть date.grammar поставляется с ParseKit, который делает именно это (достаточно интересно, однако, предоставленная грамматика не работает в DemoApp, если вы не добавите @symbolState='-';но я отвлекся...)

Тем не менее, что мне делать, если я хочу разобрать дату с точками в ней... например, 2008.01.25 или же 2008-01-25-12.34.45, Я пытался добавить '.' к @symbolState директива, но она просто продолжает игнорироваться. Обратите внимание, что я полагаюсь на DemoApp для проверки моих грамматик в данный момент... не уверен, что это имеет какое-то значение.

Любые мысли будут высоко ценится.

2 ответа

Решение

Разработчик ParseKit здесь.

Во-первых, спасибо за сообщение об ошибке в date.grammar файл. Я исправил это.


Что касается вашего основного вопроса, я уверен, что то, что вы пытаетесь сделать, было невозможно с ParseKit до сих пор.

То есть токенизатор ParseKit (PKTokenizer) не смог произвести только целое число Number жетоны. Числа всегда маркировались как числа с плавающей точкой, что означает, что было невозможно проанализировать ввод, как 3.14 как три отдельных токена 3 (Число) . (Условное обозначение) 14 (Число). Скорее это всегда будет обозначено как 3.14,

Хорошие новости: я добавил эту возможность новым методом:

-[PKNumberState allowsFloatingPoint]

который по умолчанию YES,

И я добавил соответствующую директиву токенизатора, которую вы можете использовать в своих грамматиках ParseKit, например:

@allowsFloatingPoint = NO;

ПРИМЕЧАНИЕ. Чтобы увидеть эту функцию, вам необходимо получить последнюю версию заголовка соединительной линии в Google Code.

Итак, вот пример грамматики даты, которая делает примерно то, что вы просили с новой функцией:

@symbolState = '.';
@allowsFloatingPoint = NO;

@start  = date;

date    = year dot month dot day;

year    = /\d{4}/;
month   = /\d{2}/;
day     = /\d{2}/;

dot    = '.';

Мне интересно, может ли быть более простой идеей заставить parseKit просто проанализировать дату как строку, а затем передать ее NSDate::dateWithNaturalLanguageString:locale: orNSDate::dateWithNaturalLanguageString: для обработки.

Другие вопросы по тегам