All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.intelie.pipes.grammars.TimeSpanParserCore.jj Maven / Gradle / Ivy

There is a newer version: 0.25.5
Show newest version
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"]>

|   
|   
|   
|   
|   
|   
|   
|   
|   
|   
|   
|   

|   
|   
|   
|   
|   
|   
|   

|   
|   
|   
|   
|    : SIGNED
|    : SIGNED
|   
|   
|   
|   
|   
|   
|   
|   
|   
|   
|   
|   
|   
|   ">
|   
|   
|   
|   
|   
|   
|   
|   
|   >
|   
|   
|   
|   
|   
|   
|   
|   
|   
|   
|   
|   
|   
|   
|   
|   
|   
|   
|   
|   
|   (||"_"|"-"|"/")*>
|   >
|   ){1,2}>
|   ){3,4}>
|   ){6} | (){8} | (){10} | (){12} | (){14}>
|   )+>
|   ()*) | (()*)>
}

 TOKEN: {
    
|   <#ESCAPED_CHAR: "\\" ~[] >
|   <#QUOTED_CHAR1 : ( ~[ "\"", "\\" ] |  ) >
|   <#QUOTED_CHAR2 : ( ~[ "\'", "\\" ] |  ) >
|   <#QUOTE1 : "\"">
|   <#QUOTE2 : "\'">
}

 SKIP: {
    
}

 TOKEN: {
     : DEFAULT
}

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 = signedLongNumber()
    { 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 signedLongNumber() : {
    Token t;
}{
    (t=) { return Long.parseLong(t.image); }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy