1*357f1050SThomas Veerman // An example of using the flex C++ scanner class. 2*357f1050SThomas Veerman 3*357f1050SThomas Veerman %option C++ noyywrap 4*357f1050SThomas Veerman 5*357f1050SThomas Veerman %{ 6*357f1050SThomas Veerman int mylineno = 0; 7*357f1050SThomas Veerman %} 8*357f1050SThomas Veerman 9*357f1050SThomas Veerman string \"[^\n"]+\" 10*357f1050SThomas Veerman 11*357f1050SThomas Veerman ws [ \t]+ 12*357f1050SThomas Veerman 13*357f1050SThomas Veerman alpha [A-Za-z] 14*357f1050SThomas Veerman dig [0-9] 15*357f1050SThomas Veerman name ({alpha}|{dig}|\$)({alpha}|{dig}|\_|\.|\-|\/|\$)* 16*357f1050SThomas Veerman num1 [-+]?{dig}+\.?([eE][-+]?{dig}+)? 17*357f1050SThomas Veerman num2 [-+]?{dig}*\.{dig}+([eE][-+]?{dig}+)? 18*357f1050SThomas Veerman number {num1}|{num2} 19*357f1050SThomas Veerman 20*357f1050SThomas Veerman %% 21*357f1050SThomas Veerman 22*357f1050SThomas Veerman {ws} /* skip blanks and tabs */ 23*357f1050SThomas Veerman 24*357f1050SThomas Veerman "/*" { 25*357f1050SThomas Veerman int c; 26*357f1050SThomas Veerman 27*357f1050SThomas Veerman while((c = yyinput()) != 0) 28*357f1050SThomas Veerman { 29*357f1050SThomas Veerman if(c == '\n') 30*357f1050SThomas Veerman ++mylineno; 31*357f1050SThomas Veerman 32*357f1050SThomas Veerman else if(c == '*') 33*357f1050SThomas Veerman { 34*357f1050SThomas Veerman if((c = yyinput()) == '/') 35*357f1050SThomas Veerman break; 36*357f1050SThomas Veerman else 37*357f1050SThomas Veerman unput(c); 38*357f1050SThomas Veerman } 39*357f1050SThomas Veerman } 40*357f1050SThomas Veerman } 41*357f1050SThomas Veerman 42*357f1050SThomas Veerman {number} FLEX_STD cout << "number " << YYText() << '\n'; 43*357f1050SThomas Veerman 44*357f1050SThomas Veerman \n mylineno++; 45*357f1050SThomas Veerman 46*357f1050SThomas Veerman {name} FLEX_STD cout << "name " << YYText() << '\n'; 47*357f1050SThomas Veerman 48*357f1050SThomas Veerman {string} FLEX_STD cout << "string " << YYText() << '\n'; 49*357f1050SThomas Veerman 50*357f1050SThomas Veerman %% 51*357f1050SThomas Veerman 52*357f1050SThomas Veerman int main( int /* argc */, char** /* argv */ ) 53*357f1050SThomas Veerman { 54*357f1050SThomas Veerman FlexLexer* lexer = new yyFlexLexer; 55*357f1050SThomas Veerman while(lexer->yylex() != 0) 56*357f1050SThomas Veerman ; 57*357f1050SThomas Veerman return 0; 58*357f1050SThomas Veerman } 59