1 grammar StructuredDate;
4 * This is a grammar for ANTLR 4 (http://www.antlr.org/).
12 oneDisplayDate: displayDate ( DOT | QUESTION )? EOF ;
14 displayDate: uncertainDate
16 /* TODO: Need to decide what "before" and "after" actually mean
21 uncertainDate: CIRCA certainDate ;
23 certainDate: hyphenatedRange
27 beforeOrAfterDate: ( BEFORE | AFTER ) singleInterval ;
29 hyphenatedRange: singleInterval ( HYPHEN | DASH ) singleInterval
37 singleInterval: yearSpanningWinter
53 quarterInYearRange: nthQuarterInYearRange
54 | strSeasonInYearRange
66 yearSpanningWinter: WINTER COMMA? numYear SLASH numYear era ;
68 partialYear: partOf numYear era ;
70 quarterYear: seasonYear
75 halfYear: nthHalf numYear era ;
79 partialDecade: partOf numDecade era ;
81 decade: numDecade era ;
83 partialCentury: partOf ( strCentury | numCentury ) era ;
85 quarterCentury: nthQuarter ( strCentury | numCentury ) era ;
87 halfCentury: nthHalf ( strCentury | numCentury ) era ;
89 century: ( strCentury | numCentury ) era ;
91 millennium: nth MILLENNIUM era ;
93 strDate: strMonth ( numDayOfMonth | nth ) COMMA? numYear era;
94 invStrDate: era num COMMA? strMonth num
95 | ( num | nth ) strMonth COMMA? num era ;
96 strDayInMonthRange: strMonth numDayOfMonth ( HYPHEN | DASH ) numDayOfMonth COMMA? numYear era ;
97 monthInYearRange: strMonth ( HYPHEN | DASH ) strMonth COMMA? numYear era ;
98 nthQuarterInYearRange: nthQuarter ( HYPHEN | DASH ) nthQuarter COMMA? numYear era ;
99 strSeasonInYearRange: strSeason ( HYPHEN | DASH ) strSeason COMMA? numYear era ;
100 numDayInMonthRange: numMonth SLASH numDayOfMonth ( HYPHEN | DASH ) numDayOfMonth SLASH numYear era ;
101 numDate: num SLASH num SLASH num era
102 | num HYPHEN num HYPHEN num era ;
103 monthYear: strMonth COMMA? numYear era ;
104 invMonthYear: era numYear COMMA? strMonth ;
105 seasonYear: strSeason COMMA? numYear era ;
106 invSeasonYear: era numYear COMMA? strSeason ;
107 nthQuarterYear: nthQuarter numYear era ;
108 nthQuarter: ( nth | LAST ) QUARTER ;
109 nthHalf: ( nth | LAST ) HALF ;
111 strCentury: nth CENTURY ;
112 numCentury: HUNDREDS ;
113 nthCenturyRange: allOrPartOf nth ( HYPHEN | DASH ) allOrPartOf nth CENTURY era ;
114 strSeason: SPRING | SUMMER | FALL | WINTER ;
115 allOrPartOf: partOf | ;
116 partOf: EARLY | MIDDLE | LATE ;
117 nth: NTHSTR | FIRST | SECOND | THIRD | FOURTH ;
118 strMonth: MONTH | SHORTMONTH DOT? ;
122 numDayOfMonth: NUMBER ;
130 WS: [ \t\r\n]+ -> skip;
131 CIRCA: ('c' | 'ca') DOT? | 'circa' ;
132 SPRING: 'spring' | 'spr' ;
133 SUMMER: 'summer' | 'sum' ;
134 WINTER: 'winter' | 'win' ;
135 FALL: 'fall' | 'autumn' | 'fal' | 'aut' ;
137 MIDDLE: 'middle' | 'mid' ( HYPHEN | DOT )?;
139 BEFORE: 'before' | 'pre' HYPHEN? ;
140 AFTER: 'after' | 'post' HYPHEN? ;
149 MILLENNIUM: 'millennium' ;
150 MONTH: 'january' | 'february' | 'march' | 'april' | 'may' | 'june' | 'july' | 'august' | 'september' | 'october' | 'november' | 'december' ;
151 SHORTMONTH: 'jan' | 'feb' | 'mar' | 'apr' | 'jun' | 'jul' | 'aug' | 'sep' | 'sept' | 'oct' | 'nov' | 'dec' ;
152 BC: 'bc' | 'bce' | 'b.c.' | 'b.c.e.' ;
153 AD: 'ad' | 'a.d.' | 'ce' | 'c.e.';
154 NTHSTR: [0-9]*? ([0456789] 'th' | '1st' | '2nd' | '3rd' | '11th' | '12th' | '13th') ;
155 HUNDREDS: [0-9]*? '00' '\''? 's';
156 TENS: [0-9]*? '0' '\''? 's';
160 DASH: [—–] ; /* EM DASH, EN DASH */