8 #define YY_DECL int yylex YY_PROTO(( YYSTYPE* yylval ))
10 #define YY_INPUT(buf, result, max_size) \
12 input->read(buf, max_size); \
13 result = input->gcount(); \
20 /* %option never-interactive */
24 [[:space:]]+ /* eat spaces */
25 \/\*.*\*\/ /* eat comment */
26 \/\/[^\n]*\n /* eat comment */
27 class { return T_CLASS; }
28 struct { return T_STRUCT; }
29 static { return T_STATIC; }
30 const { return T_CONST; }
31 unsigned { return T_UNSIGNED; }
32 signed { return T_SIGNED; }
33 void { return T_VOID; }
34 bool { return T_BOOL; }
35 char { return T_CHAR; }
36 short { return T_SHORT; }
38 long { return T_LONG; }
39 float { return T_FLOAT; }
40 double { return T_DOUBLE; }
41 public { return T_PUBLIC; }
42 protected { return T_PROTECTED; }
43 private { return T_PRIVATE; }
44 [a-zA-Z_][a-zA-Z_0-9]* {
46 for(std::vector<AtomicType*>::iterator i = unit->types.begin();
47 i != unit->types.end(); ++i) {
48 AtomicType* type = *i;
49 if(type->name == yytext) {
50 yylval->atomic_type = type;
54 // or a namespace? (hack for now...)
55 if(strcmp(yytext, "std") == 0) {
56 yylval->_namespace = unit->namespaces[0];
59 yylval->str = strdup(yytext);
62 \:\: { return T_DDCOL; }
64 yylval->ival = atoi(yytext);
67 [0-9]*\.[0-9]+(e[0-9]+)? {
68 yylval->fval = atof(yytext);
72 yylval->str = strdup(yytext);
75 . { return yytext[0]; }