%{
#include <string.h>
#include "idl.tab.cc.h"

int _lineNo = 1;


int idlFileLineNo() {
  return _lineNo;
}

extern "C" { int yywrap(); };

int yywrap()
{
  return 1;
}


%}

%x COMMENT


%%
^[ \t]*"/*"       { BEGIN COMMENT; /* Enter comment state */ }
<COMMENT>"*/"     {BEGIN INITIAL; /* End of comment */}
[ \t]+            { ; /* Eat extra whitespace */ }
\/\/.*            { ; /* Single-line comment */ }
interface         { return InterfaceTag; }
struct            { return StructTag; }
enum              { return EnumerationTag; }
in                { return InTag; }
out               { return OutTag; }
inout             { return InOutTag; }
float             { return FloatTag; }
double            { return DoubleTag; }
long              { return LongTag; }
short             { return ShortTag; }
"unsigned short"  { return UnsignedShortTag; }
"unsigned long"   { return UnsignedLongTag; }
void              { return VoidTag; }
"#[ \t]*include"  { return IncludeTag; }
[a-zA-Z]+[a-zA-Z0-9_\.\-]*   { yylval.string = strdup(yytext); return Name; }
[\+\-]*[0-9]+     { yylval.integer = atoi(yytext); return Integer; }
\{                { return '{'; }
\}                { return '}'; }
=                 { return '='; }
\;                { return ';'; }
,                 { return ','; }
\n                { _lineNo++; }
.                 { return yytext[0]; }
%%


