| // An example of using the flex C++ scanner class. |
| |
| %option C++ noyywrap |
| |
| %{ |
| int mylineno = 0; |
| %} |
| |
| string \"[^\n"]+\" |
| |
| ws [ \t]+ |
| |
| alpha [A-Za-z] |
| dig [0-9] |
| name ({alpha}|{dig}|\$)({alpha}|{dig}|\_|\.|\-|\/|\$)* |
| num1 [-+]?{dig}+\.?([eE][-+]?{dig}+)? |
| num2 [-+]?{dig}*\.{dig}+([eE][-+]?{dig}+)? |
| number {num1}|{num2} |
| |
| %% |
| |
| {ws} /* skip blanks and tabs */ |
| |
| "/*" { |
| int c; |
| |
| while((c = yyinput()) != 0) |
| { |
| if(c == '\n') |
| ++mylineno; |
| |
| else if(c == '*') |
| { |
| if((c = yyinput()) == '/') |
| break; |
| else |
| unput(c); |
| } |
| } |
| } |
| |
| {number} std::cout << "number " << YYText() << '\n'; |
| |
| \n mylineno++; |
| |
| {name} std::cout << "name " << YYText() << '\n'; |
| |
| {string} std::cout << "string " << YYText() << '\n'; |
| |
| %% |
| |
| int main( int /* argc */, char** /* argv */ ) |
| { |
| FlexLexer* lexer = new yyFlexLexer; |
| while(lexer->yylex() != 0) |
| ; |
| return 0; |
| } |