Blame src/constexp.l

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
}