/* -*- mode: C++; c-basic-offset: 2; indent-tabs-mode: nil -*- */ /* * Main authors: * Jip J. Dekker */ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ %option noyywrap %option prefix="regex_yy" %{ #include #define YY_DECL int yylex() #include %} %% [ \t\n] { /* ignore white space */ } [0-9]+ { regex_yylval.iValue = std::atoi(regex_yytext); return R_INTEGER; } "|" { return R_UNION; } "+" { return R_PLUS; } "*" { return R_STAR; } "(" { return R_GROUP_OPEN; } ")" { return R_GROUP_CLOSE; } "?" { return R_OPTIONAL; } "{" { return R_QUANT_OPEN; } "}" { return R_QUANT_CLOSE; } "," { return R_COMMA; } "." { return R_ANY; } "[" { return R_CLASS_OPEN; } "]" { return R_CLASS_CLOSE; } "-" { return R_CLASS_RANGE; } "^" { return R_CLASS_NEG; } [A-Za-z][A-Za-z0-9_]* { regex_yylval.sValue = strdup(yytext); return R_IDENTIFIER; } "'"[^\\'\xa\xd\x0]*"'" { regex_yylval.sValue = strdup(yytext); return R_IDENTIFIER; } . { /* Catch all */ throw std::runtime_error("Illegal token in regular expression: '" + std::string(regex_yytext) + "'"); } %%