2

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 に依存していることに注意してください...違いがあるかどうかはわかりません。

どんな考えでも大歓迎です。

4

2 に答える 2

2

parseKit で日付を文字列として単純に解析し、それを NSDate::dateWithNaturalLanguageString:locale: orNSDate::dateWithNaturalLanguageString: に渡して処理するという、より簡単なアイデアがあるかどうか疑問に思っています。

于 2012-03-16T02:45:00.803 に答える
2

ParseKitの開発者はこちら。

まず、date.grammarファイルのバグについてご指摘いただきありがとうございます。私はそれを修正しました。


あなたの主な質問に関しては、あなたが試みていることは今まで ParseKit では不可能だったと確信しています。

つまり、ParseKit のトークナイザー ( ) は、整数トークンしかPKTokenizer生成できませんでした。数値は常に浮動小数点としてトークン化されていたため、入力を 3 つの個別のトークン(数値) (シンボル) (数値) として解析することはできませんでした。むしろ、常に としてトークン化されます。Number3.143.143.14

朗報: 新しい方法でこの機能を追加しました。

-[PKNumberState allowsFloatingPoint]

デフォルトはYESです。

そして、次のように ParseKit Grammar で使用できる、一致する Tokenizerディレクティブを追加しました。

@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 に答える