summaryrefslogtreecommitdiff
path: root/examples/testxxLexer.l
diff options
context:
space:
mode:
Diffstat (limited to 'examples/testxxLexer.l')
-rw-r--r--examples/testxxLexer.l58
1 files changed, 58 insertions, 0 deletions
diff --git a/examples/testxxLexer.l b/examples/testxxLexer.l
new file mode 100644
index 0000000..a3c4735
--- /dev/null
+++ b/examples/testxxLexer.l
@@ -0,0 +1,58 @@
+ // 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;
+ }