# LEXER GENERATOR configuration file
# ---------------------------------------
# Place *first* the generic configuration
# then list your grammar.

PACKAGE:          edu.uci.ics.asterix.runtime.operators.file.adm
LEXER_NAME:       AdmLexer

TOKENS:

BOOLEAN_CONS   = string(boolean)
INT8_CONS      = string(int8)
INT16_CONS     = string(int16)
INT32_CONS     = string(int32)
INT64_CONS     = string(int64)
FLOAT_CONS     = string(float)
DOUBLE_CONS    = string(double)
DATE_CONS      = string(date)
DATETIME_CONS  = string(datetime)
DURATION_CONS  = string(duration)
STRING_CONS    = string(string)
HEX_CONS       = string(hex)
BASE64_CONS    = string(base64)
POINT_CONS     = string(point)
POINT3D_CONS   = string(point3d)
LINE_CONS      = string(line)
POLYGON_CONS   = string(polygon)
RECTANGLE_CONS = string(rectangle)
CIRCLE_CONS    = string(circle)
TIME_CONS      = string(time)
INTERVAL_TIME_CONS      = string(interval-time)
INTERVAL_DATE_CONS      = string(interval-date)
INTERVAL_DATETIME_CONS  = string(interval-datetime)
YEAR_MONTH_DURATION_CONS = string(year-month-duration)
DAY_TIME_DURATION_CONS   = string(day-time-duration)
UUID_CONS      = string(uuid)

NULL_LITERAL   = string(null)
TRUE_LITERAL   = string(true)
FALSE_LITERAL  = string(false)

CONSTRUCTOR_OPEN     = char(()
CONSTRUCTOR_CLOSE    = char())
START_RECORD         = char({)
END_RECORD           = char(})
COMMA                = char(\,)
COLON                = char(:)
START_ORDERED_LIST   = char([)
END_ORDERED_LIST     = char(])
START_UNORDERED_LIST = string({{)
# END_UNORDERED_LIST  = }} is recognized as a double END_RECORD token

STRING_LITERAL       = char("), anythingUntil(")

INT_LITERAL          = signOrNothing(), digitSequence()
INT8_LITERAL         = token(INT_LITERAL), string(i8)
INT16_LITERAL        = token(INT_LITERAL), string(i16)
INT32_LITERAL        = token(INT_LITERAL), string(i32)
INT64_LITERAL        = token(INT_LITERAL), string(i64)

@EXPONENT            = caseInsensitiveChar(e), signOrNothing(), digitSequence()

DOUBLE_LITERAL		 = signOrNothing(), char(.), digitSequence()
DOUBLE_LITERAL		 = signOrNothing(), digitSequence(), char(.), digitSequence()
DOUBLE_LITERAL		 = signOrNothing(), digitSequence(), char(.), digitSequence(), token(@EXPONENT)
DOUBLE_LITERAL		 = signOrNothing(), digitSequence(), token(@EXPONENT)

FLOAT_LITERAL		 = token(DOUBLE_LITERAL), caseInsensitiveChar(f)
