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