00001
00004 %{
00005
00006 #include <string>
00007
00008 #include "scanner.h"
00009
00010
00011 typedef example::Parser::token token;
00012 typedef example::Parser::token_type token_type;
00013
00014
00015
00016
00017 #undef yywrap
00018 #define yywrap() 1
00019
00020
00021
00022 #define yyterminate() return token::END
00023
00024
00025
00026 #define YY_NO_UNISTD_H
00027
00028 %}
00029
00030
00031
00032
00033 %option c++
00034
00035
00036 %option prefix="Example"
00037
00038
00039 %option batch
00040
00041
00042
00043 %option debug
00044
00045
00046 %option noyywrap nounput
00047
00048
00049 %option stack
00050
00051
00052
00053 %{
00054 #define YY_USER_ACTION yylloc->columns(yyleng);
00055 %}
00056
00057 %%
00058
00059
00060 %{
00061
00062 yylloc->step();
00063 %}
00064
00065
00066
00067 [0-9]+ {
00068 yylval->integerVal = atoi(yytext);
00069 return token::INTEGER;
00070 }
00071
00072 [0-9]+"."[0-9]* {
00073 yylval->doubleVal = atof(yytext);
00074 return token::DOUBLE;
00075 }
00076
00077 [A-Za-z][A-Za-z0-9_,.-]* {
00078 yylval->stringVal = new std::string(yytext, yyleng);
00079 return token::STRING;
00080 }
00081
00082
00083 [ \t\r]+ {
00084 yylloc->step();
00085 }
00086
00087
00088 \n {
00089 yylloc->lines(yyleng); yylloc->step();
00090 return token::EOL;
00091 }
00092
00093
00094 . {
00095 return static_cast<token_type>(*yytext);
00096 }
00097
00098
00099
00100 %%
00101
00102 namespace example {
00103
00104 Scanner::Scanner(std::istream* in,
00105 std::ostream* out)
00106 : ExampleFlexLexer(in, out)
00107 {
00108 }
00109
00110 Scanner::~Scanner()
00111 {
00112 }
00113
00114 void Scanner::set_debug(bool b)
00115 {
00116 yy_flex_debug = b;
00117 }
00118
00119 }
00120
00121
00122
00123
00124
00125 #ifdef yylex
00126 #undef yylex
00127 #endif
00128
00129 int ExampleFlexLexer::yylex()
00130 {
00131 std::cerr << "in ExampleFlexLexer::yylex() !" << std::endl;
00132 return 0;
00133 }