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