/
ExpressionParsers.cs
74 lines (64 loc) · 2.7 KB
/
ExpressionParsers.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
using NodaTime;
using Sprache;
using System;
using System.Collections.Generic;
using System.Linq;
using TextProcessing.Model;
namespace TextProcessing.SpracheParsers
{
public class ExpressionParsers
{
public static Parser<DayTime> DayTime =
from day in TokenParsers.DayOfWeek
from _ in Parse.WhiteSpace
from time in TokenParsers.LocalTime
select new DayTime(day, time);
public static Parser<DayTime> DayTimeDelegate =
TokenParsers.DayOfWeek.Then(day =>
Parse.WhiteSpace.Then(_ =>
TokenParsers.LocalTime.Select(time =>
new DayTime(day, time))));
public static Parser<DayTime> PickupTime =
from pickupFlag in TokenParsers.PickupFlag
from _ in Parse.WhiteSpace
from pickup in DayTime
select pickup;
public static Parser<DayTime> DropOffTime =
from dropOffFlag in TokenParsers.DropOffFlag
from _ in Parse.WhiteSpace
from pickupFlag in DayTime
select pickupFlag;
public static Parser<PickupDropoff> PickupDropOff =
from pickup in PickupTime
from _ in Parse.WhiteSpace
from dropOff in DropOffTime
select new PickupDropoff { Pickup = pickup, DropOff = dropOff };
public static Parser<Range<DayOfWeek>> DayRange =
from start in TokenParsers.DayOfWeek
from _ in TokenParsers.RangeMarker
from end in TokenParsers.DayOfWeek
select new Range<DayOfWeek> { From = start, To = end };
public static Parser<Range<LocalTime>> TimeRange =
from start in TokenParsers.LocalTime
from _ in TokenParsers.RangeMarker
from end in TokenParsers.LocalTime
select new Range<LocalTime> { From = start, To = end };
public static Parser<OpenHours> OpenHours =
from start in TokenParsers.OpenFlag
from _1 in Parse.WhiteSpace
from days in DayRange
from _2 in Parse.WhiteSpace
from hours in TimeRange
select new OpenHours { Days = days, Hours = hours};
public static Parser<IEnumerable<LocalTime>> TourTimes =
from toursFlag in TokenParsers.ToursFlag
from _ in Parse.WhiteSpace
from times in Parse.DelimitedBy(TokenParsers.LocalTime, Parse.WhiteSpace)
select times;
public static Parser<IEnumerable<DayTime>> EventSchedule =
from eventsFlag in TokenParsers.EventsFlag
from _ in Parse.WhiteSpace
from times in Parse.DelimitedBy(DayTime, Parse.WhiteSpace)
select times;
}
}