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