extensions/expression-language/Scanner.ll (89 lines of code) (raw):
/**
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
%{
  #include <cerrno>
  #include <climits>
  #include <cstdlib>
  #include <string>
  #include <string>
  #include <sstream>
  #include "Driver.h"
  #include "Parser.hpp"
%}
%option noyywrap
%option nounput
%option batch
%option noinput
%option 8bit
%option c++
id         [a-zA-Z][a-zA-Z_0-9.]*
num        [-]?[0-9]+[.]?[0-9]*([eE][+-]?[0-9]+)?
whitespace [ \r\t]+
%{
  #define YY_USER_ACTION  yylloc->columns(yyleng);
%}
%%
%{
  yylloc->step();
%}
"\n" return Parser::token::TOK_NEWLINE;
"$"  return Parser::token::TOK_DOLLAR;
"{"  return Parser::token::TOK_LCURLY;
"}"  return Parser::token::TOK_RCURLY;
"("  return Parser::token::TOK_LPAREN;
")"  return Parser::token::TOK_RPAREN;
"["  return Parser::token::TOK_LSQUARE;
"]"  return Parser::token::TOK_RSQUARE;
"|"  return Parser::token::TOK_PIPE;
","  return Parser::token::TOK_COMMA;
":"  return Parser::token::TOK_COLON;
";"  return Parser::token::TOK_SEMI;
"/"  return Parser::token::TOK_FSLASH;
"\\" return Parser::token::TOK_BSLASH;
"*"  return Parser::token::TOK_STAR;
"#"  return Parser::token::TOK_HASH;
"'"  return Parser::token::TOK_SQUOTE;
"\"" return Parser::token::TOK_DQUOTE;
{whitespace} {
  yylval->build<std::string>(yytext);
  return Parser::token::TOK_WHITESPACE;
}
{num} {
  yylval->build<std::string>(yytext);
  return Parser::token::TOK_NUMBER;
}
"true" {
  yylval->build<std::string>(yytext);
  return Parser::token::TOK_TRUE;
}
"false" {
  yylval->build<std::string>(yytext);
  return Parser::token::TOK_FALSE;
}
{id} {
  yylval->build<std::string>(yytext);
  return Parser::token::TOK_IDENTIFIER;
}
. {
  yylval->build<std::string>(yytext);
  return Parser::token::TOK_MISC;
}
<<EOF>> return Parser::token::TOK_END;
%%
int yyFlexLexer::yylex() {
  throw std::logic_error("Not implemented.");
}