2

我有一个关于 ParseKit 和解析时间戳的相当简单的问题......我如何去强制一个点/句点的符号性质。

例如,如果我试图解析2008-01-25,我可以使用类似date = /\d{4}/ '-' /\d{2}/ '-' /\d{2}/. 事实上,date.grammarParseKit 附带了一个可以做到这一点的(有趣的是,提供的语法在 DemoApp 中不起作用,除非你添加@symbolState='-';,但我离题了......)

但是,如果我想解析一个带有点的日期,我该怎么办......例如,2008.01.252008-01-25-12.34.45. 我已经尝试添加'.'@symbolState指令中,但它一直被忽略。请注意,我现在依靠 DemoApp 来测试我的语法......不确定这是否有任何区别。

任何想法将不胜感激。

4

2 回答 2

2

ParseKit的开发者在这里。

首先,感谢您对date.grammar文件中的错误的提醒。我已经修好了。


至于你的主要问题,我很确定你正在尝试的是 ParseKit 直到现在。

也就是说,ParseKit 的标记器 ( PKTokenizer) 不能生成整数Number标记。数字总是被标记为浮点数,这意味着不可能将输入解析3.14为三个单独的标记3(Number) .(Symbol) 14(Number)。相反,它总是被标记为3.14.

好消息:我用一种新方法添加了这个功能:

-[PKNumberState allowsFloatingPoint]

默认为YES.

我添加了一个匹配的Tokenizer 指令,您可以在 ParseKit 语法中使用它,例如:

@allowsFloatingPoint = NO;

注意您需要在Google Code上查看最新的主干 HEAD才能看到此功能。

因此,这是一个示例日期语法,它大致完成了您对新功能的要求:

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

@start  = date;

date    = year dot month dot day;

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

dot    = '.';

于 2012-03-16T01:31:21.813 回答
2

我想知道一个更简单的想法是否可能是让 parseKit 简单地将日期解析为字符串,然后将其交给 NSDate::dateWithNaturalLanguageString:locale: orNSDate::dateWithNaturalLanguageString: 进行处理。

于 2012-03-16T02:45:00.803 回答