2009-02-05 6 views
2

J'ai besoin pour analyser des chaînes contenant le temps enjambe telles que:Heure/plage Date Grammaires

  • Jeudi 6: 30-7: 30 AM
  • 30 Décembre 2009 - Janvier 1, 2010
  • 1/15/09, 7:30-20:30
  • jeudi, 6 heures 30-7h30
  • et d'autres ...

ajouté

  • 6:30 à 7:30

et date/temps comme la plupart des cas, que la Insérer- de Word> Date peut générer

Comme je serais très surpris Si quelque chose couvre tous les cas que je dois couvrir, je cherche des grammaires pour commencer.

Répondre

7

Ok, la grammaire suivante parse quoi que ce soit dans votre exemple:

DTExp  = Day, ['-', Day] 
Day   = DayExp, [[','], ['from'], TimeRange] 
DayExp  = WeekDay 
      | [Weekday], Month, DayNumber, [[','], YearNumber] 
      | [Weekday], MonthNumber, '/', DayNumber, ['/', YearNumber] 
TimeRange = Time, [['-'|'to'] Time] 
Time   = HourNumber, ':', MinuteNumber, ['AM'|'PM'] 
WeekDay  = 'monday' | 'tuesday' | ... 
Month  = MonthNumber | MonthName 
MonthName = 'january' | 'february' | ... 
DayNumber = Number 
MonthNumber = Number 
YearNumber = Number, ['AD'|'BC'] 
HourNumber = Number 
MinuteNumber = Number 

Il y a un léger problème dans la grammaire. Si un DayExp est lu, suivi d'un Time et d'un '-', vous pouvez vous attendre à un autre DayExp ou à un autre moment. Mais ceci est résolu par un lookahead, parce que si c'est un temps, un nombre est suivi d'un ':'.

de construire permet d'essayer un arbre d'analyse syntaxique: (lien)

Thursday 6 : 30  - 7 : 30 AM 
    |  |  |   |   |  | 
WeekDay Number : Number - Number : Number | 
    |  -----|----   -----|----------- 
    |   Time  -  Time 
    |   ---------|--------- 
DayExp    TimeRange 
    ----------|----------- 
      Day 
       | 
      DTExp 
+0

Est-ce que vous créez juste que ou est-il d'une autre source. Juste curieux. – BCS

+0

Non, j'ai généré cela. Je rêve presque en grammaire ;-). –

+1

@Gamecat - vous avez besoin d'un passe-temps! : P – warren