%{
+#include <config.h>
+
#include <math.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
-#include "tree.h"
+#include "tree.hpp"
#include "parser.hpp"
-#include "globals.h"
+#include "globals.hpp"
+// there seems to be a bug in flex that adds some ECHO directives
+// in some rules, we don't need debug output
+#define ECHO {}
+
+#define YY_NEVER_INTERACTIVE 1
#define YY_DECL int yylex(YYSTYPE* yylval)
#define YY_INPUT(buf, result, max_size) \
class { return T_CLASS; }
struct { return T_STRUCT; }
static { return T_STATIC; }
-virtual { return T_VIRTUAL; }
+virtual { }
const { return T_CONST; }
unsigned { return T_UNSIGNED; }
signed { return T_SIGNED; }
protected { return T_PROTECTED; }
private { return T_PRIVATE; }
namespace { return T_NAMESPACE; }
+__suspend { return T_SUSPEND; }
+__custom { return T_CUSTOM; }
[a-zA-Z_][a-zA-Z_0-9]* {
Namespace* ns = search_namespace;
if(ns == 0)
ns = current_namespace;
// is it a type?
yylval->atomic_type = ns->_findType(yytext, search_down);
- if(yylval->atomic_type)
+ if(yylval->atomic_type) {
return T_ATOMIC_TYPE;
+ }
// or a namespace? (hack for now...)
yylval->_namespace = ns->_findNamespace(yytext, search_down);
if(yylval->_namespace) {
return T_ID;
}
\:\: { return T_DDCOL; }
-[0-9]+ {
- yylval->ival = atoi(yytext);
- return T_INT;
- }
-[0-9]*\.[0-9]+(e[0-9]+)? {
- yylval->fval = atof(yytext);
- return T_FLOAT;
- }
-\".*\" {
- yylval->str = strdup(yytext);
- return T_STRING;
- }
+(0x)?[0-9]+ {
+ sscanf(yytext, "%i", &(yylval->ival));
+ return T_INT;
+}
+[0-9]*\.[0-9]+(e[0-9]+)? {
+ sscanf(yytext, "%f", &(yylval->fval));
+ return T_FLOAT;
+}
+\".*\" {
+ yylval->str = strdup(yytext);
+ return T_STRING;
+}
. { return yytext[0]; }
%%