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