116 lines
2.7 KiB
Plaintext
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;
|
|
}
|
|
|
|
%%
|