使用ParseKit语法来解析时间戳

时间:2012-03-15 12:23:07

标签: objective-c timestamp parsekit

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

例如,如果我尝试解析2008-01-25,我可以使用date = /\d{4}/ '-' /\d{2}/ '-' /\d{2}/之类的内容。事实上,ParseKit附带了一个date.grammar就可以完成这个(有趣的是,除非你添加@symbolState='-';,否则提供的语法在DemoApp中不起作用,但我离题了......)

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

任何想法都会非常感激。

2 个答案:

答案 0 :(得分:2)

ParseKit的开发人员。

首先,感谢date.grammar文件中的错误。我修好了。


关于你的主要问题,我很确定你到底尝试的是ParseKit是不可能的。

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

好消息:我已经使用新方法添加了此功能:

-[PKNumberState allowsFloatingPoint]

默认为YES

我添加了一个匹配的 Tokenizer Directive ,您可以在ParseKit Grammars中使用它:

@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    = '.';

答案 1 :(得分:2)

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