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