net.intelie.pipes.grammars.TimeSpanParserCore.jj Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of pipes-api Show documentation
Show all versions of pipes-api Show documentation
Intelie Pipes' API classes and interfaces
options{
static = false;
java_unicode_escape = true;
ignore_case = true;
}
PARSER_BEGIN(TimeSpanParserCore)
package net.intelie.pipes.generated;
import java.time.ZoneId;
import java.util.*;
import net.intelie.pipes.*;
import net.intelie.pipes.time.*;
import net.intelie.pipes.util.*;
import net.intelie.pipes.ast.*;
import java.io.Reader;
public class TimeSpanParserCore {
public AstStack ast;
public Token getCurrentToken() { jj_ntk(); return token; }
private int or(Integer v, int def) {
if (v==null) return def;
return v;
}
public static String unescape(String s) {
return Escapes.unescape(s);
}
}
PARSER_END(TimeSpanParserCore)
SKIP: {
}
TOKEN: {
<#DIGIT: ["0"-"9"]>
| <#LETTER: ["a"-"z"]>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| ">
|
|
|
|
|
|
|
|
|
| >
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| (||"_"|"-"|"/")*>
| >
| ){1,2}>
| ){3,4}>
| ){6} | (){8} | (){10} | (){12} | (){14}>
| )+>
| ()*) | (()*)>
}
TOKEN: {
| <#ESCAPED_CHAR: "\\" ~[] >
| <#QUOTED_CHAR1 : ( ~[ "\"", "\\" ] | ) >
| <#QUOTED_CHAR2 : ( ~[ "\'", "\\" ] | ) >
| <#QUOTE1 : "\"">
| <#QUOTE2 : "\'">
}
public TimeSpan start(ZoneId zone) : {
TimeSpan value;
}{
value = top(zone)
{ return value; }
}
public Period startPeriod(ZoneId zone) : {
Period value;
}{
value = timezonedPeriod(zone)
{ return value; }
}
private TimeSpan top(ZoneId zone) : {
TimeSpan answer;
}{
answer=annotated(zone)
{ return answer; }
}
private TimeSpan annotated(ZoneId zone) : {
TimeSpan answer;
Map map = new LinkedHashMap();
String key, value;
Token t;
}{
(
( key=string() | t= { key=t.image.substring(1);} )
{value=SpanAnnotations.TRUE;}
( value=string())?
{ map.put(key, value); }
)*
answer=timezoned(zone)
(
( key=string() | t= { key=t.image.substring(1);} )
{value=SpanAnnotations.TRUE;}
( value=string())?
{ map.put(key, value); }
)*
{
if (map.size() == 0) return answer;
return new AnnotatedSpan(answer, new SpanAnnotations(map));
}
}
private TimeSpan timezoned(ZoneId zone) : {
TimeSpan value;
String tz;
}{
(
tz=string() { zone = ZoneId.of(tz); }
)*
value = largest(zone)
(
tz=string() { zone = ZoneId.of(tz); }
)*
{ return value; }
}
private Period timezonedPeriod(ZoneId zone) : {
Period value;
String tz;
}{
(
tz=string() { zone = ZoneId.of(tz); }
)*
value = periodList(zone)
{ return value; }
}
private TimeSpan largest(ZoneId zone) : {
TimeSpan value;
List list;
}{
( ()? list = spanList(zone) { return new UnionSpan(list); } )
| ( ()? list = spanList(zone) { return new IntersectionSpan(list); } )
| value = shiftable(zone) { return value; }
}
private List spanList(ZoneId zone) : {
TimeSpan value;
List list = new ArrayList();
}{
value = shiftable(zone) { list.add(value); }
( (|)+ value = shiftable(zone) { list.add(value); } )*
{ return list; }
}
private TimeSpan shiftable(ZoneId zone) : {
TimeSpan value;
TimeSpan refValue;
Period periods;
int intv;
}{
value = composable(zone)
(
( (
()? ()? (
LOOKAHEAD(2) intv=intNumber() { value = new ShiftByPercentSpan(value, Where.LEFT, intv); }
| periods = periodList(zone) { value = new ShiftBySpan(value, Where.LEFT, periods); }
)
| () ()? (
LOOKAHEAD(2) intv=intNumber() { value = new ShiftByPercentSpan(value, Where.RIGHT, intv); }
| periods = periodList(zone) { value = new ShiftBySpan(value, Where.RIGHT, periods); }
)
)
| refValue = expression(zone) { value = new ShiftToSpan(value, refValue); }
)
| ()? refValue = expression(zone) { value = new ShiftToSpan(value, refValue); }
|
( ()? ()? (
LOOKAHEAD(2) intv=intNumber() { value = new ExtendPercentSpan(value, Where.LEFT, intv); }
| periods = periodList(zone) { value = new ExtendSpan(value, Where.LEFT, periods); }
)
| () ()? (
LOOKAHEAD(2) intv=intNumber() { value = new ExtendPercentSpan(value, Where.RIGHT, intv); }
| periods = periodList(zone) { value = new ExtendSpan(value, Where.RIGHT, periods); }
)
)
|
( ()? refValue = expression(zone) { value = new AlignSpan(value, Where.LEFT, refValue); }
| () refValue = expression(zone){ value = new AlignSpan(value, Where.RIGHT, refValue); }
)
)*
{ return value; }
}
private TimeSpan composable(ZoneId zone) : {
boolean composite = false;
TimeSpan start = null, end = null;
}{
(
(|) start = shiftable2(zone) ((||) end = shiftable2(zone))? { composite = true; }
| (||) end = shiftable2(zone) { composite = true; }
| start = shiftable2(zone) ((||) { composite = true; } end = shiftable2(zone))?
)
{
if (composite)
return new CompositeSpan(start, end);
else
return start;
}
}
private TimeSpan shiftable2(ZoneId zone) : {
TimeSpan value;
TimeSpan refValue;
}{
value = expression(zone)
( refValue = expression(zone) { value = new ShiftToSpan(value, refValue); })*
( refValue = expression(zone) { value = new ShiftToSpan(refValue, value); })*
{ return value; }
}
private TimeSpan expression(ZoneId zone) : {
TimeSpan value;
TimeSpan refValue;
Period periods;
}{
()?
( LOOKAHEAD(2) value = relativeOrPointOrPeriod(zone)
| LOOKAHEAD(2) value = relativeOrdinal(zone)
| value = relativeLast(zone)
| value = relativeNext(zone)
| value = relativeBeforeAfter(zone)
| value = windowOf(zone)
| value = relativeCurrent(zone)
| value = relativePrevious(zone)
| value = formattedDate(zone)
| value = formattedTime(zone)
| value = monthOrDayOfMonth(zone)
| value = weekday(zone)
| value = timestamp(zone)
| (|) { value = PointSpan.NOW; }
| { value = PeriodSpan.today(zone); }
| value = top(zone)
)
{ return value; }
}
private TimeSpan relativeOrPointOrPeriod(ZoneId zone) : {
Period periods;
TimeSpan span;
}{
periods = periodList(zone)
(
span = expression(zone)
{ return new PeriodSpan(periods, span); }
|
{ return new PointSpan(periods); }
| span = expression(zone)
{ return new BeforeSpan(span, periods); }
| span = expression(zone)
{ return new AfterSpan(span, periods); }
)
}
private TimeSpan relativeOrdinal(ZoneId zone) : {
int ordinal = 1;
Period period;
TimeSpan span;
}{
ordinal = ordinal()
period = period(zone)
(|)?
span = expression(zone)
{ return new InsideSpan(ordinal, period, span); }
}
private TimeSpan relativeBeforeAfter(ZoneId zone) : {
TimeSpan span;
}{
( (| (|)?) span = expression(zone)
{ return new BeforeSpan(span); }
| (| (|)?) span = expression(zone)
{ return new AfterSpan(span); }
)
}
private TimeSpan windowOf(ZoneId zone) : {
TimeSpan span;
}{
(|)? span = expression(zone)
{ return new WindowOfSpan(span); }
}
private TimeSpan relativePrevious(ZoneId zone) : {
Token t;
SimplePeriod period;
}{
( ((|) period = simplePeriod(zone)
|t= { period = new SimplePeriod(1, t.image.substring(6), zone); })
{ return BeforeSpan.previous(period); }
| ( { period = new SimplePeriod(1, "day", zone); }
| period = simplePeriod(zone)
) { return AfterSpan.coming(period); }
)
}
private TimeSpan relativeCurrent(ZoneId zone) : {
Period period;
}{
(|)
period = period(zone)
{ return new PeriodSpan(period); }
}
private TimeSpan relativeLast(ZoneId zone) : {
Period periods;
}{
periods = periodList(zone)
{ return new BeforeSpan(PointSpan.NOW, periods); }
}
private TimeSpan relativeNext(ZoneId zone) : {
Period periods;
}{
periods = periodList(zone)
{ return new AfterSpan(PointSpan.NOW, periods); }
}
private Period periodList(ZoneId zone) : {
List periods = new ArrayList();
Period period;
}{
period = period(zone) { periods.add(period); }
(
LOOKAHEAD(2) (|)+ period = period(zone) { periods.add(period); }
)*
{ return PeriodList.of(periods); }
}
private SimplePeriod simplePeriod(ZoneId zone) : {
Token t;
int amount = 1;
String unit;
}{
(amount = intNumber() | )?
t = { unit = t.image; }
{ return new SimplePeriod(amount, unit, zone); }
}
private Period period(ZoneId zone) : {
Period e;
String unit;
}{
( e = simplePeriod(zone)
| unit=string() { e = new CronPeriod(unit, zone); }
) { return e; }
}
private TimeSpan timestamp(ZoneId zone) : {
long value;
}{
(|)
value = longNumber()
{ return new TimestampSpan(value); }
}
private TimeSpan monthOrDayOfMonth(ZoneId zone) : {
int number;
TimeSpan answer;
}{
(answer = month(zone)) (
( number = ordinalOrInt() { answer = InsideSpan.dayOfSpan(number, zone, answer); } )?
)
{ return answer; }
}
private TimeSpan month(ZoneId zone) : {
}{
{ return InsideSpan.monthOfYear(1, zone); }
| { return InsideSpan.monthOfYear(2, zone); }
| { return InsideSpan.monthOfYear(3, zone); }
| { return InsideSpan.monthOfYear(4, zone); }
| { return InsideSpan.monthOfYear(5, zone); }
| { return InsideSpan.monthOfYear(6, zone); }
| { return InsideSpan.monthOfYear(7, zone); }
| { return InsideSpan.monthOfYear(8, zone); }
| { return InsideSpan.monthOfYear(9, zone); }
| { return InsideSpan.monthOfYear(10, zone); }
| { return InsideSpan.monthOfYear(11, zone); }
| { return InsideSpan.monthOfYear(12, zone); }
}
private TimeSpan weekday(ZoneId zone) : {
}{
{ return InsideSpan.dayOfWeek(1, zone); }
| { return InsideSpan.dayOfWeek(2, zone); }
| { return InsideSpan.dayOfWeek(3, zone); }
| { return InsideSpan.dayOfWeek(4, zone); }
| { return InsideSpan.dayOfWeek(5, zone); }
| { return InsideSpan.dayOfWeek(6, zone); }
| { return InsideSpan.dayOfWeek(7, zone); }
}
private TimeSpan formattedTime(ZoneId zone) : {
int hour;
Integer minute = null, second = null;
PeriodUnit unit;
}{
hour = int2()
(minute = int2()
(second = int2())?
)?
()?
( { if (hour == 12) hour-=12; }
| { if (hour < 12) hour+=12; }
)?
{
if (second != null)
unit = PeriodUnit.SECOND;
else if (minute != null)
unit = PeriodUnit.MINUTE;
else
unit = PeriodUnit.HOUR;
return new HourSpan(hour, or(minute, 0), or(second, 0), unit, zone);
}
}
private TimeSpan formattedDate(ZoneId zone) : {
Token t;
int year;
Integer month = null, day = null, hour = null, minute = null, second = null;
PeriodUnit unit;
boolean onlyYear = true;
}{
(
(t = {
onlyYear = false;
year = Integer.parseInt(t.image.substring(0, 4));
month = Integer.parseInt(t.image.substring(4, 6));
if (t.image.length() >= 8)
day = Integer.parseInt(t.image.substring(6, 8));
if (t.image.length() >= 10)
hour = Integer.parseInt(t.image.substring(8, 10));
if (t.image.length() >= 12)
minute = Integer.parseInt(t.image.substring(10, 12));
if (t.image.length() >= 14)
second = Integer.parseInt(t.image.substring(12, 14));
})
|
year = int4()
(month = int2() { onlyYear = false; }
(day = int2()
(hour = int2()
(minute = int2()
(second = int2())?
)?
)?
)?
)?
)
(
{ if (onlyYear) { hour = year / 100; minute = year % 100; } }
( { if (hour != null && hour == 12) hour-=12; }
| { if (hour != null && hour < 12) hour+=12; })
{
if (onlyYear)
return new HourSpan(hour, or(minute, 0), 0, PeriodUnit.MINUTE, zone);
}
)?
{
if (second != null)
unit = PeriodUnit.SECOND;
else if (minute != null)
unit = PeriodUnit.MINUTE;
else if (hour != null)
unit = PeriodUnit.HOUR;
else if (day != null)
unit = PeriodUnit.DAY;
else if (month != null)
unit = PeriodUnit.MONTH;
else
unit = PeriodUnit.YEAR;
return new DateSpan(year, or(month, 1), or(day, 1), or(hour, 0), or(minute, 0), or(second, 0), unit, zone);
}
}
private String string() : {
Token e;
}{
( e=
{ return unescape(e.image.substring(1, e.image.length()-1)); }
| e=
{ return e.image; }
)
}
private int ordinal() : {
int n;
}{
n=intNumber() { return n; }
| { return 1; }
}
private int ordinalOrInt() : {
int n;
}{
n=intNumber() ( )? { return n; }
| { return 1; }
}
private int int2() : {
Token t;
}{
(t=) { return Integer.parseInt(t.image); }
}
private int int4() : {
Token t;
}{
(t=) { return Integer.parseInt(t.image); }
}
private int intNumber() : {
Token t;
}{
(t=|t=|t=|t=) { return Integer.parseInt(t.image); }
}
private long longNumber() : {
Token t;
}{
(t=|t=|t=|t=) { return Long.parseLong(t.image); }
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy