2009-02-05 4 views
2

Мне нужно разобрать строки, содержащие время охватывает такие как:Диапазон времени/Дата грамматик

  • Четверг 6: 30-7: 30 AM
  • 30 декабря 2009 - 1 января 2010
  • 1/15/09, 7:30 до 8:30 PM
  • четверг, с 6:30 до 7:30 утра
  • и другие ...

добавил

  • 6:30 до 7:30

и дату/время, такие как большинство любых случаев, Вставка- в Word> дата может генерировать

Как я был бы очень удивлен, если что-то там покрывает все случаи, которые мне нужно покрыть, я ищу грамматики для начала.

ответ

7

Ok, следующая грамматика разбирает что-либо в вашем примере:

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 

Существует небольшая проблема в грамматике. Если считывается DayExp, а затем «Время» и «-», тогда вы можете ожидать другой DayExp или другое время. Но это решается взглядом, потому что, если это время, за номером следует «:».

Давайте попытаемся построить дерево разбора: (? Ссылка)

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

Вы просто генерировать, что или это из какого-то другого источника. Просто любопытно. – BCS

+0

Нет, я сгенерировал это. Я почти мечтаю в грамматике ;-). –

+1

@ Gamecat - вам нужно хобби! : P – warren