|
Packit |
1c1d7e |
/******************************************************************************
|
|
Packit |
1c1d7e |
*
|
|
Packit |
1c1d7e |
*
|
|
Packit |
1c1d7e |
*
|
|
Packit |
1c1d7e |
*
|
|
Packit |
1c1d7e |
* Copyright (C) 1997-2015 by Dimitri van Heesch.
|
|
Packit |
1c1d7e |
*
|
|
Packit |
1c1d7e |
* Permission to use, copy, modify, and distribute this software and its
|
|
Packit |
1c1d7e |
* documentation under the terms of the GNU General Public License is hereby
|
|
Packit |
1c1d7e |
* granted. No representations are made about the suitability of this software
|
|
Packit |
1c1d7e |
* for any purpose. It is provided "as is" without express or implied warranty.
|
|
Packit |
1c1d7e |
* See the GNU General Public License for more details.
|
|
Packit |
1c1d7e |
*
|
|
Packit |
1c1d7e |
* Documents produced by Doxygen are derivative works derived from the
|
|
Packit |
1c1d7e |
* input used in their production; they are not affected by this license.
|
|
Packit |
1c1d7e |
*
|
|
Packit |
1c1d7e |
*/
|
|
Packit |
1c1d7e |
%option never-interactive
|
|
Packit |
1c1d7e |
%option prefix="constexpYY"
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
%{
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
#include "constexp.h"
|
|
Packit |
1c1d7e |
#include "cppvalue.h"
|
|
Packit |
1c1d7e |
#include "ce_parse.h" // generated header file
|
|
Packit |
1c1d7e |
#include "message.h"
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
#define YY_NO_INPUT 1
|
|
Packit |
1c1d7e |
#define YY_NO_UNISTD_H 1
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
QCString g_strToken;
|
|
Packit |
1c1d7e |
CPPValue g_resultValue;
|
|
Packit |
1c1d7e |
int g_constExpLineNr;
|
|
Packit |
1c1d7e |
QCString g_constExpFileName;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
static const char *g_inputString;
|
|
Packit |
1c1d7e |
static int g_inputPosition;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
#undef YY_INPUT
|
|
Packit |
1c1d7e |
#define YY_INPUT(buf,result,max_size) result=yyread(buf,max_size);
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
static int yyread(char *buf,int max_size)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
int c=0;
|
|
Packit |
1c1d7e |
while( c < max_size && g_inputString[g_inputPosition] )
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
*buf = g_inputString[g_inputPosition++] ;
|
|
Packit |
1c1d7e |
c++; buf++;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
return c;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
%}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
CONSTSUFFIX ([uU][lL]?[lL]?)|([lL][lL]?[uU]?)
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
%option nounput
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
%%
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
"?" { return TOK_QUESTIONMARK; }
|
|
Packit |
1c1d7e |
":" { return TOK_COLON; }
|
|
Packit |
1c1d7e |
"||" { return TOK_OR; }
|
|
Packit |
1c1d7e |
"&&" { return TOK_AND; }
|
|
Packit |
1c1d7e |
"|" { return TOK_BITWISEOR; }
|
|
Packit |
1c1d7e |
"^" { return TOK_BITWISEXOR; }
|
|
Packit |
1c1d7e |
"&" { return TOK_AMPERSAND; }
|
|
Packit |
1c1d7e |
"!=" { return TOK_NOTEQUAL; }
|
|
Packit |
1c1d7e |
"==" { return TOK_EQUAL; }
|
|
Packit |
1c1d7e |
"<" { return TOK_LESSTHAN; }
|
|
Packit |
1c1d7e |
">" { return TOK_GREATERTHAN; }
|
|
Packit |
1c1d7e |
"<=" { return TOK_LESSTHANOREQUALTO; }
|
|
Packit |
1c1d7e |
">=" { return TOK_GREATERTHANOREQUALTO; }
|
|
Packit |
1c1d7e |
"<<" { return TOK_SHIFTLEFT; }
|
|
Packit |
1c1d7e |
">>" { return TOK_SHIFTRIGHT; }
|
|
Packit |
1c1d7e |
"+" { return TOK_PLUS; }
|
|
Packit |
1c1d7e |
"-" { return TOK_MINUS; }
|
|
Packit |
1c1d7e |
"*" { return TOK_STAR; }
|
|
Packit |
1c1d7e |
"/" { return TOK_DIVIDE; }
|
|
Packit |
1c1d7e |
"%" { return TOK_MOD; }
|
|
Packit |
1c1d7e |
"~" { return TOK_TILDE; }
|
|
Packit |
1c1d7e |
"!" { return TOK_NOT; }
|
|
Packit |
1c1d7e |
"(" { return TOK_LPAREN; }
|
|
Packit |
1c1d7e |
")" { return TOK_RPAREN; }
|
|
Packit |
1c1d7e |
"'"(([^\'\n\r\\]+)|(\\(([ntvbrfa\\?'\"])|([0-9]+)|([xX][0-9a-fA-F]+))))"'" {
|
|
Packit |
1c1d7e |
g_strToken=yytext;
|
|
Packit |
1c1d7e |
return TOK_CHARACTER;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
0[0-7]*{CONSTSUFFIX}? { g_strToken=yytext;
|
|
Packit |
1c1d7e |
return TOK_OCTALINT;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
[1-9][0-9]*{CONSTSUFFIX}? { g_strToken=yytext;
|
|
Packit |
1c1d7e |
return TOK_DECIMALINT;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
(0x|0X)[0-9a-fA-F]+{CONSTSUFFIX}? { g_strToken=yytext+2;
|
|
Packit |
1c1d7e |
return TOK_HEXADECIMALINT;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
(([0-9]+\.[0-9]*)|([0-9]*\.[0-9]+))([eE]([\-\+])?[0-9]+)?([fFlL])? {
|
|
Packit |
1c1d7e |
g_strToken=yytext; return TOK_FLOAT;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
([0-9]+[eE])([\-\+])?[0-9]+([fFlL])? {
|
|
Packit |
1c1d7e |
g_strToken=yytext; return TOK_FLOAT;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
.
|
|
Packit |
1c1d7e |
\n
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
%%
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
bool parseconstexp(const char *fileName,int lineNr,const QCString &s)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
printlex(yy_flex_debug, TRUE, __FILE__, fileName);
|
|
Packit |
1c1d7e |
//printf("Expression: `%s'\n",s.data());
|
|
Packit |
1c1d7e |
g_constExpFileName = fileName;
|
|
Packit |
1c1d7e |
g_constExpLineNr = lineNr;
|
|
Packit |
1c1d7e |
g_inputString = s;
|
|
Packit |
1c1d7e |
g_inputPosition = 0;
|
|
Packit |
1c1d7e |
constexpYYrestart( constexpYYin );
|
|
Packit |
1c1d7e |
constexpYYparse();
|
|
Packit |
1c1d7e |
//printf("Result: %ld\n",(long)g_resultValue);
|
|
Packit |
1c1d7e |
printlex(yy_flex_debug, FALSE, __FILE__, fileName);
|
|
Packit |
1c1d7e |
return (long)g_resultValue!=0;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
extern "C" {
|
|
Packit |
1c1d7e |
int constexpYYwrap() { return 1; }
|
|
Packit |
1c1d7e |
}
|