Orb/Doxygen/src/constexp.l
changeset 0 42188c7ea2d9
child 4 468f4c8d3d5b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Orb/Doxygen/src/constexp.l	Thu Jan 21 17:29:01 2010 +0000
@@ -0,0 +1,120 @@
+/******************************************************************************
+ *
+ * 
+ *
+ *
+ * Copyright (C) 1997-2008 by Dimitri van Heesch.
+ *
+ * Permission to use, copy, modify, and distribute this software and its
+ * documentation under the terms of the GNU General Public License is hereby 
+ * granted. No representations are made about the suitability of this software 
+ * for any purpose. It is provided "as is" without express or implied warranty.
+ * See the GNU General Public License for more details.
+ *
+ * Documents produced by Doxygen are derivative works derived from the
+ * input used in their production; they are not affected by this license.
+ *
+ */
+
+%{
+
+#include "constexp.h"  
+#include "cppvalue.h"
+#include "ce_parse.h" // generated header file
+
+#define YY_NEVER_INTERACTIVE 1
+  
+QCString    g_strToken;  
+CPPValue    g_resultValue;
+int         g_constExpLineNr;
+QCString    g_constExpFileName;
+
+static const char *g_inputString;
+static int         g_inputPosition;
+
+#undef  YY_INPUT
+#define YY_INPUT(buf,result,max_size) result=yyread(buf,max_size);
+
+static int yyread(char *buf,int max_size)
+{
+  int c=0;
+  while( c < max_size && g_inputString[g_inputPosition] )
+  {
+    *buf = g_inputString[g_inputPosition++] ;
+    c++; buf++;
+  }
+  return c;
+}
+
+%}
+
+CONSTSUFFIX ([uU][lL]?[lL]?)|([lL][lL]?[uU]?)
+
+%option nounput
+
+%%
+
+"?"				   { return TOK_QUESTIONMARK; }
+":"				   { return TOK_COLON; }
+"||"				   { return TOK_OR; }
+"&&"				   { return TOK_AND; }
+"|"				   { return TOK_BITWISEOR; }
+"^"				   { return TOK_BITWISEXOR; }
+"&"				   { return TOK_AMPERSAND; }
+"!="            		   { return TOK_NOTEQUAL; }
+"=="            		   { return TOK_EQUAL; }
+"<"             		   { return TOK_LESSTHAN; }
+">"             		   { return TOK_GREATERTHAN; }
+"<="            		   { return TOK_LESSTHANOREQUALTO; }
+">="            		   { return TOK_GREATERTHANOREQUALTO; }
+"<<"            		   { return TOK_SHIFTLEFT; }
+">>"            		   { return TOK_SHIFTRIGHT; }
+"+"             		   { return TOK_PLUS; }
+"-"             		   { return TOK_MINUS; }
+"*"             		   { return TOK_STAR; }
+"/"             		   { return TOK_DIVIDE; }
+"%"             		   { return TOK_MOD; }
+"~"             		   { return TOK_TILDE; }
+"!"             		   { return TOK_NOT; }
+"("             		   { return TOK_LPAREN; }
+")"             		   { return TOK_RPAREN; }
+"'"(([^\'\n\r\\]+)|(\\(([ntvbrfa\\?'\"])|([0-9]+)|([xX][0-9a-fA-F]+))))"'"   { 
+                                     g_strToken=yytext;  
+				     return TOK_CHARACTER; 
+				   }
+0[0-7]*{CONSTSUFFIX}?              { g_strToken=yytext; 
+  				     return TOK_OCTALINT; 
+				   }
+[1-9][0-9]*{CONSTSUFFIX}?          { g_strToken=yytext; 
+  				     return TOK_DECIMALINT; 
+				   }
+(0x|0X)[0-9a-fA-F]+{CONSTSUFFIX}?  { g_strToken=yytext+2; 
+                                     return TOK_HEXADECIMALINT; 
+                                   }
+(([0-9]+\.[0-9]*)|([0-9]*\.[0-9]+))([eE]([\-\+])?[0-9]+)?([fFlL])? { 
+                                     g_strToken=yytext; return TOK_FLOAT; 
+                                   }
+([0-9]+[eE])([\-\+])?[0-9]+([fFlL])? { 
+                                     g_strToken=yytext; return TOK_FLOAT; 
+			           }
+.				   
+\n
+
+%%
+
+bool parseCppExpression(const char *fileName,int lineNr,const QCString &s)
+{
+  //printf("Expression: `%s'\n",s.data());
+  g_constExpFileName = fileName;
+  g_constExpLineNr = lineNr;
+  g_inputString = s;
+  g_inputPosition = 0;
+  cppExpYYrestart( cppExpYYin );
+  cppExpYYparse();
+  //printf("Result: %ld\n",(long)g_resultValue);
+  return (long)g_resultValue!=0;
+}
+
+extern "C" {
+  int cppExpYYwrap() { return 1; }
+}