]> git.aero2k.de Git - tmp/jakarta-migration.git/blob
430d6bea65ccd8e6f16b1e115cba0c7b4fea6fca
[tmp/jakarta-migration.git] /
1 grammar StructuredDate;
2
3 /*
4  * This is a grammar for ANTLR 4 (http://www.antlr.org/).
5  *
6  */
7
8 /*
9  * Parser rules
10  */
11
12 oneDisplayDate:        displayDate ( DOT | QUESTION )? EOF ; 
13
14 displayDate:           uncertainDate
15 |                      certainDate
16 /* TODO: Need to decide what "before" and "after" actually mean
17 |                      beforeOrAfterDate
18 */
19 ;
20
21 uncertainDate:         CIRCA certainDate ;
22
23 certainDate:           hyphenatedRange
24 |                      singleInterval
25 ;
26
27 beforeOrAfterDate:     ( BEFORE | AFTER ) singleInterval ;
28
29 hyphenatedRange:       singleInterval ( HYPHEN | DASH ) singleInterval
30 |                      nthCenturyRange
31 |                      monthInYearRange
32 |                      quarterInYearRange
33 |                      strDayInMonthRange
34 |                      numDayInMonthRange
35 ;
36
37 singleInterval:        yearSpanningWinter
38 |                      partialYear
39 |                      quarterYear
40 |                      halfYear
41 |                      millennium
42 |                      partialCentury
43 |                      quarterCentury
44 |                      halfCentury
45 |                      century
46 |                      partialDecade
47 |                      decade
48 |                      year
49 |                      month
50 |                      date
51 ;
52
53 quarterInYearRange:    nthQuarterInYearRange
54 |                      strSeasonInYearRange
55 ;
56
57 date:                  numDate
58 |                      strDate
59 |                      invStrDate
60 ;
61
62 month:                 monthYear
63 |                      invMonthYear
64 ;
65
66 yearSpanningWinter:    WINTER COMMA? numYear SLASH numYear era ;
67
68 partialYear:           partOf numYear era ;
69
70 quarterYear:           seasonYear
71 |                      invSeasonYear
72 |                      nthQuarterYear
73 ;
74
75 halfYear:              nthHalf numYear era ;
76
77 year:                  numYear era ;
78
79 partialDecade:         partOf numDecade era ;
80
81 decade:                numDecade era ;
82
83 partialCentury:        partOf ( strCentury | numCentury ) era ;
84
85 quarterCentury:        nthQuarter ( strCentury | numCentury ) era ;
86
87 halfCentury:           nthHalf ( strCentury | numCentury ) era ;
88
89 century:               ( strCentury | numCentury ) era ;
90
91 millennium:            nth MILLENNIUM era ;
92
93 strDate:               strMonth ( numDayOfMonth | nth ) COMMA? numYear era;
94 invStrDate:            era numYear COMMA? strMonth numDayOfMonth ;
95 strDayInMonthRange:    strMonth numDayOfMonth ( HYPHEN | DASH ) numDayOfMonth COMMA? numYear era ;
96 monthInYearRange:      strMonth ( HYPHEN | DASH ) strMonth COMMA? numYear era ;
97 nthQuarterInYearRange: nthQuarter ( HYPHEN | DASH ) nthQuarter COMMA? numYear era ;
98 strSeasonInYearRange:  strSeason ( HYPHEN | DASH ) strSeason COMMA? numYear era ;
99 numDayInMonthRange:    numMonth SLASH numDayOfMonth ( HYPHEN | DASH ) numDayOfMonth SLASH numYear era ;
100 numDate:               num SLASH num SLASH num era
101 |                      num HYPHEN num HYPHEN num era ;
102 monthYear:             strMonth COMMA? numYear era ;
103 invMonthYear:          era numYear COMMA? strMonth ;
104 seasonYear:            strSeason COMMA? numYear era ;
105 invSeasonYear:         era numYear COMMA? strSeason ;
106 nthQuarterYear:        nthQuarter numYear era ;
107 nthQuarter:            ( nth | LAST ) QUARTER ;
108 nthHalf:               ( nth | LAST ) HALF ;
109 numDecade:             TENS ;
110 strCentury:            nth CENTURY ;
111 numCentury:            HUNDREDS ;
112 nthCenturyRange:       allOrPartOf nth ( HYPHEN | DASH ) allOrPartOf nth CENTURY era ;
113 strSeason:             SPRING | SUMMER | FALL | WINTER ;
114 allOrPartOf:           partOf | ;
115 partOf:                EARLY | MIDDLE | LATE ; 
116 nth:                   NTHSTR | FIRST | SECOND | THIRD | FOURTH ;
117 strMonth:              MONTH | SHORTMONTH DOT? ;
118 era:                   BC | AD | ;
119 numYear:               NUMBER ;
120 numMonth:              NUMBER ;
121 numDayOfMonth:         NUMBER ;
122 num:                   NUMBER ;
123
124
125 /*
126  * Lexer rules
127  */
128
129 WS:             [ \t\r\n]+ -> skip;
130 CIRCA:          ('c' | 'ca') DOT? | 'circa' ;
131 SPRING:         'spring' | 'spr' ;
132 SUMMER:         'summer' | 'sum' ;
133 WINTER:         'winter' | 'win' ;
134 FALL:           'fall' | 'autumn' | 'fal' | 'aut' ;
135 EARLY:          'early' ;
136 MIDDLE:         'middle' | 'mid' ( HYPHEN | DOT )?;
137 LATE:           'late' ;
138 BEFORE:         'before' | 'pre' HYPHEN? ;
139 AFTER:          'after' | 'post' HYPHEN? ;
140 FIRST:          'first' ;
141 SECOND:         'second' ;
142 THIRD:          'third' ;
143 FOURTH:         'fourth' ;
144 LAST:           'last' ;
145 QUARTER:        'quarter' ;
146 HALF:           'half' ;
147 CENTURY:        'century' ;
148 MILLENNIUM:     'millennium' ;
149 MONTH:          'january' | 'february' | 'march' | 'april' | 'may' | 'june' | 'july' | 'august' | 'september' | 'october' | 'november' | 'december' ;
150 SHORTMONTH:     'jan' | 'feb' | 'mar' | 'apr' | 'jun' | 'jul' | 'aug' | 'sep' | 'sept' | 'oct' | 'nov' | 'dec' ;
151 BC:             'bc' | 'bce' |  'b.c.' | 'b.c.e.' ;
152 AD:             'ad' | 'a.d.' | 'ce' | 'c.e.';
153 NTHSTR:         [0-9]*? ([0456789] 'th' | '1st' | '2nd' | '3rd' | '11th' | '12th' | '13th') ;
154 HUNDREDS:       [0-9]*? '00' '\''? 's';
155 TENS:           [0-9]*? '0' '\''? 's';
156 NUMBER:         [0-9]+ ;
157 COMMA:          ',' ;
158 HYPHEN:         '-' ;
159 DASH:           [—–] ; /* EM DASH, EN DASH */
160 SLASH:          '/' ;
161 DOT:            '.' ;
162 QUESTION:       '?' ;
163 STRING:         [a-z]+ ;
164 OTHER:          . ;