我有一个关于ParseKit和解析时间戳的相当简单的问题......我如何强制执行点/句点的符号性质。
例如,如果我尝试解析2008-01-25
,我可以使用date = /\d{4}/ '-' /\d{2}/ '-' /\d{2}/
之类的内容。事实上,ParseKit附带了一个date.grammar
就可以完成这个(有趣的是,除非你添加@symbolState='-';
,否则提供的语法在DemoApp中不起作用,但我离题了......)
但是,如果我想解析带有点的日期,我该怎么办...例如,2008.01.25
或2008-01-25-12.34.45
。我已经尝试将'.'
添加到@symbolState
指令中,但它一直被忽略。请注意,我依靠DemoApp来测试我的语法...不确定这是否有所不同。
任何想法都会非常感激。
答案 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:进行处理。