Files
spark/src/DataStreamSuite/DataStreamExpressions/DataStreamExpressionTokens.lex
T

116 lines
2.7 KiB
Plaintext

%namespace Bts.DataStreamExpressions
%scannertype DataStreamExpressionScanner
%visibility internal
%tokentype DataStreamExpressionToken
%option stack, minimize, parser, verbose, persistbuffer, noembedbuffers
/* Literal Constants */
Letter [a-zA-Z]
BooleanConstant 'true'|'false'
CSStringConstant \"([^\"\\]*|\\.)*\"
YearInt [0-9]{4}
MonthInt [0-9]{1,2}
DayInt [0-9]{1,2}
/**
* DateTimeConstant supports American (mm/dd/yyyy) and European (yyyy/mm/dd)
* formats. Month and day can be 1 or 2 digits. It does not validate that the
* numbers represent an actual date.
*/
DateTimeConstant ({MonthInt}\/{DayInt}\/{YearInt}|{YearInt}\/{MonthInt}\/{DayInt})
IntegerConstant -?[0-9]+
NullConstant 'null'
RealConstant -?[0-9]+\.[0-9]+
/* Relational Operators */
Equals =
Identifier {Letter}({Letter}*[0-9]*_*)*
/* Utility Tokens */
OpenParenthesis \(
CloseParenthesis \)
Comma ,
Colon :
QuoteOpen \[
QuoteClose \]
/* Comments */
LineComment \/\/[^\n\r]*(\n|\r|\r\n)
%%
{Equals} {
return (int)DataStreamExpressionToken.EQUALS;
}
{CSStringConstant} {
yylval.CsString = yytext.Substring(1, yytext.Length - 2);
return (int)DataStreamExpressionToken.CS_STRING_CONSTANT;
}
{BooleanConstant} {
yylval.Boolean = yytext.ToLower() switch {
"true" => true,
"false" => false,
_ => throw new Exception(
string.Format("Expected yytext to be 'true' or 'false' (actually '{0}')", yytext))
};
return (int)DataStreamExpressionToken.BOOLEAN_CONSTANT;
}
{NullConstant} {
yylval.Null = DBNull.Value;
return (int)DataStreamExpressionToken.NULL_CONSTANT;
}
{DateTimeConstant} {
yylval.DateTime = DateTime.Parse(yytext);
return (int)DataStreamExpressionToken.DATE_TIME_CONSTANT;
}
{IntegerConstant} {
yylval.Integer = int.Parse(yytext);
return (int)DataStreamExpressionToken.INTEGER_CONSTANT;
}
{RealConstant} {
yylval.Real = double.Parse(yytext);
return (int)DataStreamExpressionToken.REAL_CONSTANT;
}
{OpenParenthesis} {
return (int)DataStreamExpressionToken.PARENTHESIS_OPEN;
}
{CloseParenthesis} {
return (int)DataStreamExpressionToken.PARENTHESIS_CLOSE;
}
{Comma} {
return (int)DataStreamExpressionToken.COMMA;
}
{Colon} {
return (int)DataStreamExpressionToken.COLON;
}
{QuoteOpen} {
return (int)DataStreamExpressionToken.QUOTE_CLOSE;
}
{QuoteClose} {
return (int)DataStreamExpressionToken.QUOTE_OPEN;
}
{Identifier} {
yylval.Identifier = yytext;
return (int)DataStreamExpressionToken.IDENTIFIER;
}
{LineComment} {
return (int)DataStreamExpressionToken.LINE_COMMENT;
}
%%