/*
* Parser rules
*/
-oneDisplayDate: displayDate ( DOT | QUESTION )? EOF;
+
+oneDisplayDate: displayDate ( DOT | QUESTION )? EOF ;
displayDate: uncertainDate
| certainDate
millennium: nth MILLENNIUM era? ;
-strDate: strMonth ( numDayOfMonth | nth ) COMMA? numYear era;
+strDate: strMonth ( numDayOfMonth | nth ) COMMA? numYear era?;
invStrDate: era num COMMA? strMonth num
-| ( num | nth ) strMonth COMMA? num era ;
-strDayInMonthRange: strMonth numDayOfMonth ( HYPHEN | DASH ) numDayOfMonth COMMA? numYear era ;
-monthInYearRange: strMonth ( HYPHEN | DASH ) strMonth COMMA? numYear era ;
-nthQuarterInYearRange: nthQuarter ( HYPHEN | DASH ) nthQuarter COMMA? numYear era ;
-strSeasonInYearRange: strSeason ( HYPHEN | DASH ) strSeason COMMA? numYear era ;
-numDayInMonthRange: numMonth SLASH num ( HYPHEN | DASH ) num SLASH numYear era ;
-numDate: num SLASH num SLASH num era
-| num HYPHEN num HYPHEN num era ;
-monthYear: strMonth COMMA? numYear era ;
-invMonthYear: era numYear COMMA? strMonth ;
-seasonYear: strSeason COMMA? numYear era ;
-invSeasonYear: era numYear COMMA? strSeason ;
-nthQuarterYear: nthQuarter numYear era ;
+| era? num COMMA strMonth num ;
+dayFirstDate: num strMonth COMMA? num era
+| num strMonth COMMA num era?
+| nth strMonth COMMA? num era? ;
+dayOrYearFirstDate: num strMonth num ;
+invStrDateEraLastDate: num COMMA strMonth num era? ;
+strDayInMonthRange: strMonth numDayOfMonth ( HYPHEN | DASH ) numDayOfMonth COMMA? numYear era? ;
+monthInYearRange: strMonth ( HYPHEN | DASH ) strMonth COMMA? numYear era? ;
+nthQuarterInYearRange: nthQuarter ( HYPHEN | DASH ) nthQuarter COMMA? numYear era? ;
+strSeasonInYearRange: strSeason ( HYPHEN | DASH ) strSeason COMMA? numYear era? ;
+numDayInMonthRange: numMonth SLASH num ( HYPHEN | DASH ) num SLASH numYear era? ;
+numDate: num SLASH num SLASH num era?
+| num HYPHEN num HYPHEN num era? ;
+monthYear: strMonth COMMA? numYear era? ;
+invMonthYear: era? numYear COMMA? strMonth ;
+seasonYear: strSeason COMMA? numYear era? ;
+invSeasonYear: era? numYear COMMA? strSeason ;
+nthQuarterYear: nthQuarter numYear era? ;
nthQuarter: ( nth | LAST ) QUARTER ;
nthHalf: ( nth | LAST ) HALF ;
numDecade: TENS ;
num: NUMBER ;
unknownDate: UNKNOWN ;
+
/*
* Lexer rules
*/
DOT: '.' ;
QUESTION: '?' ;
OTHER: . ;
-UNKNOWN: 'unknown';
-STRING: [a-z]+ ;
\ No newline at end of file
+UNKNOWN: 'unknown' | 'UNKNOWN' ;
+STRING: [a-z]+ ;
result.setEarliestSingleDate(earliestDate);
result.setLatestDate(latestDate);
}
- @Override
- public void exitUnknownDate(UnknownDateContext ctx) {
- if (ctx.exception != null) return;
-
- // Dummy dates
- stack.push(new Date());
- stack.push(new Date());
- }
@Override
public void exitBeforeOrAfterDate(BeforeOrAfterDateContext ctx) {
public void exitNumDayInMonthRange(NumDayInMonthRangeContext ctx) {
if (ctx.exception != null) return;
- Era era = (Era) stack.pop();
+ Era era = (ctx.era() == null) ? null : (Era) stack.pop();
Integer num1 = (Integer) stack.pop();
Integer num2 = (Integer) stack.pop();
Integer num3 = (Integer) stack.pop();
dates are valid, we know that it shouldn't be interpreted as 04/01/13 - 19/31/1995 since these arent valid dates!
*/
-
Integer lateYear = num1;
Integer earlyMonth = num4;
Integer dayOfMonthEnd = num2;
@Override
public void exitInvStrDate(InvStrDateContext ctx) {
if (ctx.exception != null) return;
-
+
// Reorder the stack into a canonical ordering,
// year-month-day-era.
stack.push(year);
stack.push(numMonth);
stack.push(dayOfMonth);
+ stack.push(era);
if (dayOfMonth > 31 || dayOfMonth <= 0) {
throw new StructuredDateFormatException("unexpected day of month '" + Integer.toString(dayOfMonth) + "'");
stack.push(num);
}
+ @Override
+ public void exitUnknownDate(UnknownDateContext ctx) {
+ if (ctx.exception != null) return;
+
+ // Dummy dates
+ stack.push(new Date());
+ stack.push(new Date());
+ }
+
protected String getErrorMessage(RecognitionException re) {
String message = "";